Loading...
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/rfkill.h>
30#include <linux/debugfs.h>
31#include <linux/crypto.h>
32#include <linux/kcov.h>
33#include <linux/property.h>
34#include <linux/suspend.h>
35#include <linux/wait.h>
36#include <asm/unaligned.h>
37
38#include <net/bluetooth/bluetooth.h>
39#include <net/bluetooth/hci_core.h>
40#include <net/bluetooth/l2cap.h>
41#include <net/bluetooth/mgmt.h>
42
43#include "hci_request.h"
44#include "hci_debugfs.h"
45#include "smp.h"
46#include "leds.h"
47#include "msft.h"
48#include "aosp.h"
49#include "hci_codec.h"
50
51static void hci_rx_work(struct work_struct *work);
52static void hci_cmd_work(struct work_struct *work);
53static void hci_tx_work(struct work_struct *work);
54
55/* HCI device list */
56LIST_HEAD(hci_dev_list);
57DEFINE_RWLOCK(hci_dev_list_lock);
58
59/* HCI callback list */
60LIST_HEAD(hci_cb_list);
61DEFINE_MUTEX(hci_cb_list_lock);
62
63/* HCI ID Numbering */
64static DEFINE_IDA(hci_index_ida);
65
66static int hci_scan_req(struct hci_request *req, unsigned long opt)
67{
68 __u8 scan = opt;
69
70 BT_DBG("%s %x", req->hdev->name, scan);
71
72 /* Inquiry and Page scans */
73 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
74 return 0;
75}
76
77static int hci_auth_req(struct hci_request *req, unsigned long opt)
78{
79 __u8 auth = opt;
80
81 BT_DBG("%s %x", req->hdev->name, auth);
82
83 /* Authentication */
84 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
85 return 0;
86}
87
88static int hci_encrypt_req(struct hci_request *req, unsigned long opt)
89{
90 __u8 encrypt = opt;
91
92 BT_DBG("%s %x", req->hdev->name, encrypt);
93
94 /* Encryption */
95 hci_req_add(req, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
96 return 0;
97}
98
99static int hci_linkpol_req(struct hci_request *req, unsigned long opt)
100{
101 __le16 policy = cpu_to_le16(opt);
102
103 BT_DBG("%s %x", req->hdev->name, policy);
104
105 /* Default link policy */
106 hci_req_add(req, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
107 return 0;
108}
109
110/* Get HCI device by index.
111 * Device is held on return. */
112struct hci_dev *hci_dev_get(int index)
113{
114 struct hci_dev *hdev = NULL, *d;
115
116 BT_DBG("%d", index);
117
118 if (index < 0)
119 return NULL;
120
121 read_lock(&hci_dev_list_lock);
122 list_for_each_entry(d, &hci_dev_list, list) {
123 if (d->id == index) {
124 hdev = hci_dev_hold(d);
125 break;
126 }
127 }
128 read_unlock(&hci_dev_list_lock);
129 return hdev;
130}
131
132/* ---- Inquiry support ---- */
133
134bool hci_discovery_active(struct hci_dev *hdev)
135{
136 struct discovery_state *discov = &hdev->discovery;
137
138 switch (discov->state) {
139 case DISCOVERY_FINDING:
140 case DISCOVERY_RESOLVING:
141 return true;
142
143 default:
144 return false;
145 }
146}
147
148void hci_discovery_set_state(struct hci_dev *hdev, int state)
149{
150 int old_state = hdev->discovery.state;
151
152 BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state);
153
154 if (old_state == state)
155 return;
156
157 hdev->discovery.state = state;
158
159 switch (state) {
160 case DISCOVERY_STOPPED:
161 hci_update_passive_scan(hdev);
162
163 if (old_state != DISCOVERY_STARTING)
164 mgmt_discovering(hdev, 0);
165 break;
166 case DISCOVERY_STARTING:
167 break;
168 case DISCOVERY_FINDING:
169 mgmt_discovering(hdev, 1);
170 break;
171 case DISCOVERY_RESOLVING:
172 break;
173 case DISCOVERY_STOPPING:
174 break;
175 }
176}
177
178void hci_inquiry_cache_flush(struct hci_dev *hdev)
179{
180 struct discovery_state *cache = &hdev->discovery;
181 struct inquiry_entry *p, *n;
182
183 list_for_each_entry_safe(p, n, &cache->all, all) {
184 list_del(&p->all);
185 kfree(p);
186 }
187
188 INIT_LIST_HEAD(&cache->unknown);
189 INIT_LIST_HEAD(&cache->resolve);
190}
191
192struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
193 bdaddr_t *bdaddr)
194{
195 struct discovery_state *cache = &hdev->discovery;
196 struct inquiry_entry *e;
197
198 BT_DBG("cache %p, %pMR", cache, bdaddr);
199
200 list_for_each_entry(e, &cache->all, all) {
201 if (!bacmp(&e->data.bdaddr, bdaddr))
202 return e;
203 }
204
205 return NULL;
206}
207
208struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
209 bdaddr_t *bdaddr)
210{
211 struct discovery_state *cache = &hdev->discovery;
212 struct inquiry_entry *e;
213
214 BT_DBG("cache %p, %pMR", cache, bdaddr);
215
216 list_for_each_entry(e, &cache->unknown, list) {
217 if (!bacmp(&e->data.bdaddr, bdaddr))
218 return e;
219 }
220
221 return NULL;
222}
223
224struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
225 bdaddr_t *bdaddr,
226 int state)
227{
228 struct discovery_state *cache = &hdev->discovery;
229 struct inquiry_entry *e;
230
231 BT_DBG("cache %p bdaddr %pMR state %d", cache, bdaddr, state);
232
233 list_for_each_entry(e, &cache->resolve, list) {
234 if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state)
235 return e;
236 if (!bacmp(&e->data.bdaddr, bdaddr))
237 return e;
238 }
239
240 return NULL;
241}
242
243void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
244 struct inquiry_entry *ie)
245{
246 struct discovery_state *cache = &hdev->discovery;
247 struct list_head *pos = &cache->resolve;
248 struct inquiry_entry *p;
249
250 list_del(&ie->list);
251
252 list_for_each_entry(p, &cache->resolve, list) {
253 if (p->name_state != NAME_PENDING &&
254 abs(p->data.rssi) >= abs(ie->data.rssi))
255 break;
256 pos = &p->list;
257 }
258
259 list_add(&ie->list, pos);
260}
261
262u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
263 bool name_known)
264{
265 struct discovery_state *cache = &hdev->discovery;
266 struct inquiry_entry *ie;
267 u32 flags = 0;
268
269 BT_DBG("cache %p, %pMR", cache, &data->bdaddr);
270
271 hci_remove_remote_oob_data(hdev, &data->bdaddr, BDADDR_BREDR);
272
273 if (!data->ssp_mode)
274 flags |= MGMT_DEV_FOUND_LEGACY_PAIRING;
275
276 ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
277 if (ie) {
278 if (!ie->data.ssp_mode)
279 flags |= MGMT_DEV_FOUND_LEGACY_PAIRING;
280
281 if (ie->name_state == NAME_NEEDED &&
282 data->rssi != ie->data.rssi) {
283 ie->data.rssi = data->rssi;
284 hci_inquiry_cache_update_resolve(hdev, ie);
285 }
286
287 goto update;
288 }
289
290 /* Entry not in the cache. Add new one. */
291 ie = kzalloc(sizeof(*ie), GFP_KERNEL);
292 if (!ie) {
293 flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
294 goto done;
295 }
296
297 list_add(&ie->all, &cache->all);
298
299 if (name_known) {
300 ie->name_state = NAME_KNOWN;
301 } else {
302 ie->name_state = NAME_NOT_KNOWN;
303 list_add(&ie->list, &cache->unknown);
304 }
305
306update:
307 if (name_known && ie->name_state != NAME_KNOWN &&
308 ie->name_state != NAME_PENDING) {
309 ie->name_state = NAME_KNOWN;
310 list_del(&ie->list);
311 }
312
313 memcpy(&ie->data, data, sizeof(*data));
314 ie->timestamp = jiffies;
315 cache->timestamp = jiffies;
316
317 if (ie->name_state == NAME_NOT_KNOWN)
318 flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
319
320done:
321 return flags;
322}
323
324static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
325{
326 struct discovery_state *cache = &hdev->discovery;
327 struct inquiry_info *info = (struct inquiry_info *) buf;
328 struct inquiry_entry *e;
329 int copied = 0;
330
331 list_for_each_entry(e, &cache->all, all) {
332 struct inquiry_data *data = &e->data;
333
334 if (copied >= num)
335 break;
336
337 bacpy(&info->bdaddr, &data->bdaddr);
338 info->pscan_rep_mode = data->pscan_rep_mode;
339 info->pscan_period_mode = data->pscan_period_mode;
340 info->pscan_mode = data->pscan_mode;
341 memcpy(info->dev_class, data->dev_class, 3);
342 info->clock_offset = data->clock_offset;
343
344 info++;
345 copied++;
346 }
347
348 BT_DBG("cache %p, copied %d", cache, copied);
349 return copied;
350}
351
352static int hci_inq_req(struct hci_request *req, unsigned long opt)
353{
354 struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
355 struct hci_dev *hdev = req->hdev;
356 struct hci_cp_inquiry cp;
357
358 BT_DBG("%s", hdev->name);
359
360 if (test_bit(HCI_INQUIRY, &hdev->flags))
361 return 0;
362
363 /* Start Inquiry */
364 memcpy(&cp.lap, &ir->lap, 3);
365 cp.length = ir->length;
366 cp.num_rsp = ir->num_rsp;
367 hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
368
369 return 0;
370}
371
372int hci_inquiry(void __user *arg)
373{
374 __u8 __user *ptr = arg;
375 struct hci_inquiry_req ir;
376 struct hci_dev *hdev;
377 int err = 0, do_inquiry = 0, max_rsp;
378 long timeo;
379 __u8 *buf;
380
381 if (copy_from_user(&ir, ptr, sizeof(ir)))
382 return -EFAULT;
383
384 hdev = hci_dev_get(ir.dev_id);
385 if (!hdev)
386 return -ENODEV;
387
388 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
389 err = -EBUSY;
390 goto done;
391 }
392
393 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
394 err = -EOPNOTSUPP;
395 goto done;
396 }
397
398 if (hdev->dev_type != HCI_PRIMARY) {
399 err = -EOPNOTSUPP;
400 goto done;
401 }
402
403 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
404 err = -EOPNOTSUPP;
405 goto done;
406 }
407
408 /* Restrict maximum inquiry length to 60 seconds */
409 if (ir.length > 60) {
410 err = -EINVAL;
411 goto done;
412 }
413
414 hci_dev_lock(hdev);
415 if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
416 inquiry_cache_empty(hdev) || ir.flags & IREQ_CACHE_FLUSH) {
417 hci_inquiry_cache_flush(hdev);
418 do_inquiry = 1;
419 }
420 hci_dev_unlock(hdev);
421
422 timeo = ir.length * msecs_to_jiffies(2000);
423
424 if (do_inquiry) {
425 err = hci_req_sync(hdev, hci_inq_req, (unsigned long) &ir,
426 timeo, NULL);
427 if (err < 0)
428 goto done;
429
430 /* Wait until Inquiry procedure finishes (HCI_INQUIRY flag is
431 * cleared). If it is interrupted by a signal, return -EINTR.
432 */
433 if (wait_on_bit(&hdev->flags, HCI_INQUIRY,
434 TASK_INTERRUPTIBLE)) {
435 err = -EINTR;
436 goto done;
437 }
438 }
439
440 /* for unlimited number of responses we will use buffer with
441 * 255 entries
442 */
443 max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
444
445 /* cache_dump can't sleep. Therefore we allocate temp buffer and then
446 * copy it to the user space.
447 */
448 buf = kmalloc_array(max_rsp, sizeof(struct inquiry_info), GFP_KERNEL);
449 if (!buf) {
450 err = -ENOMEM;
451 goto done;
452 }
453
454 hci_dev_lock(hdev);
455 ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
456 hci_dev_unlock(hdev);
457
458 BT_DBG("num_rsp %d", ir.num_rsp);
459
460 if (!copy_to_user(ptr, &ir, sizeof(ir))) {
461 ptr += sizeof(ir);
462 if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
463 ir.num_rsp))
464 err = -EFAULT;
465 } else
466 err = -EFAULT;
467
468 kfree(buf);
469
470done:
471 hci_dev_put(hdev);
472 return err;
473}
474
475static int hci_dev_do_open(struct hci_dev *hdev)
476{
477 int ret = 0;
478
479 BT_DBG("%s %p", hdev->name, hdev);
480
481 hci_req_sync_lock(hdev);
482
483 ret = hci_dev_open_sync(hdev);
484
485 hci_req_sync_unlock(hdev);
486 return ret;
487}
488
489/* ---- HCI ioctl helpers ---- */
490
491int hci_dev_open(__u16 dev)
492{
493 struct hci_dev *hdev;
494 int err;
495
496 hdev = hci_dev_get(dev);
497 if (!hdev)
498 return -ENODEV;
499
500 /* Devices that are marked as unconfigured can only be powered
501 * up as user channel. Trying to bring them up as normal devices
502 * will result into a failure. Only user channel operation is
503 * possible.
504 *
505 * When this function is called for a user channel, the flag
506 * HCI_USER_CHANNEL will be set first before attempting to
507 * open the device.
508 */
509 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
510 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
511 err = -EOPNOTSUPP;
512 goto done;
513 }
514
515 /* We need to ensure that no other power on/off work is pending
516 * before proceeding to call hci_dev_do_open. This is
517 * particularly important if the setup procedure has not yet
518 * completed.
519 */
520 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
521 cancel_delayed_work(&hdev->power_off);
522
523 /* After this call it is guaranteed that the setup procedure
524 * has finished. This means that error conditions like RFKILL
525 * or no valid public or static random address apply.
526 */
527 flush_workqueue(hdev->req_workqueue);
528
529 /* For controllers not using the management interface and that
530 * are brought up using legacy ioctl, set the HCI_BONDABLE bit
531 * so that pairing works for them. Once the management interface
532 * is in use this bit will be cleared again and userspace has
533 * to explicitly enable it.
534 */
535 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
536 !hci_dev_test_flag(hdev, HCI_MGMT))
537 hci_dev_set_flag(hdev, HCI_BONDABLE);
538
539 err = hci_dev_do_open(hdev);
540
541done:
542 hci_dev_put(hdev);
543 return err;
544}
545
546int hci_dev_do_close(struct hci_dev *hdev)
547{
548 int err;
549
550 BT_DBG("%s %p", hdev->name, hdev);
551
552 hci_req_sync_lock(hdev);
553
554 err = hci_dev_close_sync(hdev);
555
556 hci_req_sync_unlock(hdev);
557
558 return err;
559}
560
561int hci_dev_close(__u16 dev)
562{
563 struct hci_dev *hdev;
564 int err;
565
566 hdev = hci_dev_get(dev);
567 if (!hdev)
568 return -ENODEV;
569
570 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
571 err = -EBUSY;
572 goto done;
573 }
574
575 cancel_work_sync(&hdev->power_on);
576 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
577 cancel_delayed_work(&hdev->power_off);
578
579 err = hci_dev_do_close(hdev);
580
581done:
582 hci_dev_put(hdev);
583 return err;
584}
585
586static int hci_dev_do_reset(struct hci_dev *hdev)
587{
588 int ret;
589
590 BT_DBG("%s %p", hdev->name, hdev);
591
592 hci_req_sync_lock(hdev);
593
594 /* Drop queues */
595 skb_queue_purge(&hdev->rx_q);
596 skb_queue_purge(&hdev->cmd_q);
597
598 /* Cancel these to avoid queueing non-chained pending work */
599 hci_dev_set_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE);
600 /* Wait for
601 *
602 * if (!hci_dev_test_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE))
603 * queue_delayed_work(&hdev->{cmd,ncmd}_timer)
604 *
605 * inside RCU section to see the flag or complete scheduling.
606 */
607 synchronize_rcu();
608 /* Explicitly cancel works in case scheduled after setting the flag. */
609 cancel_delayed_work(&hdev->cmd_timer);
610 cancel_delayed_work(&hdev->ncmd_timer);
611
612 /* Avoid potential lockdep warnings from the *_flush() calls by
613 * ensuring the workqueue is empty up front.
614 */
615 drain_workqueue(hdev->workqueue);
616
617 hci_dev_lock(hdev);
618 hci_inquiry_cache_flush(hdev);
619 hci_conn_hash_flush(hdev);
620 hci_dev_unlock(hdev);
621
622 if (hdev->flush)
623 hdev->flush(hdev);
624
625 hci_dev_clear_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE);
626
627 atomic_set(&hdev->cmd_cnt, 1);
628 hdev->acl_cnt = 0;
629 hdev->sco_cnt = 0;
630 hdev->le_cnt = 0;
631 hdev->iso_cnt = 0;
632
633 ret = hci_reset_sync(hdev);
634
635 hci_req_sync_unlock(hdev);
636 return ret;
637}
638
639int hci_dev_reset(__u16 dev)
640{
641 struct hci_dev *hdev;
642 int err;
643
644 hdev = hci_dev_get(dev);
645 if (!hdev)
646 return -ENODEV;
647
648 if (!test_bit(HCI_UP, &hdev->flags)) {
649 err = -ENETDOWN;
650 goto done;
651 }
652
653 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
654 err = -EBUSY;
655 goto done;
656 }
657
658 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
659 err = -EOPNOTSUPP;
660 goto done;
661 }
662
663 err = hci_dev_do_reset(hdev);
664
665done:
666 hci_dev_put(hdev);
667 return err;
668}
669
670int hci_dev_reset_stat(__u16 dev)
671{
672 struct hci_dev *hdev;
673 int ret = 0;
674
675 hdev = hci_dev_get(dev);
676 if (!hdev)
677 return -ENODEV;
678
679 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
680 ret = -EBUSY;
681 goto done;
682 }
683
684 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
685 ret = -EOPNOTSUPP;
686 goto done;
687 }
688
689 memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
690
691done:
692 hci_dev_put(hdev);
693 return ret;
694}
695
696static void hci_update_passive_scan_state(struct hci_dev *hdev, u8 scan)
697{
698 bool conn_changed, discov_changed;
699
700 BT_DBG("%s scan 0x%02x", hdev->name, scan);
701
702 if ((scan & SCAN_PAGE))
703 conn_changed = !hci_dev_test_and_set_flag(hdev,
704 HCI_CONNECTABLE);
705 else
706 conn_changed = hci_dev_test_and_clear_flag(hdev,
707 HCI_CONNECTABLE);
708
709 if ((scan & SCAN_INQUIRY)) {
710 discov_changed = !hci_dev_test_and_set_flag(hdev,
711 HCI_DISCOVERABLE);
712 } else {
713 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
714 discov_changed = hci_dev_test_and_clear_flag(hdev,
715 HCI_DISCOVERABLE);
716 }
717
718 if (!hci_dev_test_flag(hdev, HCI_MGMT))
719 return;
720
721 if (conn_changed || discov_changed) {
722 /* In case this was disabled through mgmt */
723 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
724
725 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED))
726 hci_update_adv_data(hdev, hdev->cur_adv_instance);
727
728 mgmt_new_settings(hdev);
729 }
730}
731
732int hci_dev_cmd(unsigned int cmd, void __user *arg)
733{
734 struct hci_dev *hdev;
735 struct hci_dev_req dr;
736 int err = 0;
737
738 if (copy_from_user(&dr, arg, sizeof(dr)))
739 return -EFAULT;
740
741 hdev = hci_dev_get(dr.dev_id);
742 if (!hdev)
743 return -ENODEV;
744
745 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
746 err = -EBUSY;
747 goto done;
748 }
749
750 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
751 err = -EOPNOTSUPP;
752 goto done;
753 }
754
755 if (hdev->dev_type != HCI_PRIMARY) {
756 err = -EOPNOTSUPP;
757 goto done;
758 }
759
760 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
761 err = -EOPNOTSUPP;
762 goto done;
763 }
764
765 switch (cmd) {
766 case HCISETAUTH:
767 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
768 HCI_INIT_TIMEOUT, NULL);
769 break;
770
771 case HCISETENCRYPT:
772 if (!lmp_encrypt_capable(hdev)) {
773 err = -EOPNOTSUPP;
774 break;
775 }
776
777 if (!test_bit(HCI_AUTH, &hdev->flags)) {
778 /* Auth must be enabled first */
779 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
780 HCI_INIT_TIMEOUT, NULL);
781 if (err)
782 break;
783 }
784
785 err = hci_req_sync(hdev, hci_encrypt_req, dr.dev_opt,
786 HCI_INIT_TIMEOUT, NULL);
787 break;
788
789 case HCISETSCAN:
790 err = hci_req_sync(hdev, hci_scan_req, dr.dev_opt,
791 HCI_INIT_TIMEOUT, NULL);
792
793 /* Ensure that the connectable and discoverable states
794 * get correctly modified as this was a non-mgmt change.
795 */
796 if (!err)
797 hci_update_passive_scan_state(hdev, dr.dev_opt);
798 break;
799
800 case HCISETLINKPOL:
801 err = hci_req_sync(hdev, hci_linkpol_req, dr.dev_opt,
802 HCI_INIT_TIMEOUT, NULL);
803 break;
804
805 case HCISETLINKMODE:
806 hdev->link_mode = ((__u16) dr.dev_opt) &
807 (HCI_LM_MASTER | HCI_LM_ACCEPT);
808 break;
809
810 case HCISETPTYPE:
811 if (hdev->pkt_type == (__u16) dr.dev_opt)
812 break;
813
814 hdev->pkt_type = (__u16) dr.dev_opt;
815 mgmt_phy_configuration_changed(hdev, NULL);
816 break;
817
818 case HCISETACLMTU:
819 hdev->acl_mtu = *((__u16 *) &dr.dev_opt + 1);
820 hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
821 break;
822
823 case HCISETSCOMTU:
824 hdev->sco_mtu = *((__u16 *) &dr.dev_opt + 1);
825 hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
826 break;
827
828 default:
829 err = -EINVAL;
830 break;
831 }
832
833done:
834 hci_dev_put(hdev);
835 return err;
836}
837
838int hci_get_dev_list(void __user *arg)
839{
840 struct hci_dev *hdev;
841 struct hci_dev_list_req *dl;
842 struct hci_dev_req *dr;
843 int n = 0, size, err;
844 __u16 dev_num;
845
846 if (get_user(dev_num, (__u16 __user *) arg))
847 return -EFAULT;
848
849 if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
850 return -EINVAL;
851
852 size = sizeof(*dl) + dev_num * sizeof(*dr);
853
854 dl = kzalloc(size, GFP_KERNEL);
855 if (!dl)
856 return -ENOMEM;
857
858 dr = dl->dev_req;
859
860 read_lock(&hci_dev_list_lock);
861 list_for_each_entry(hdev, &hci_dev_list, list) {
862 unsigned long flags = hdev->flags;
863
864 /* When the auto-off is configured it means the transport
865 * is running, but in that case still indicate that the
866 * device is actually down.
867 */
868 if (hci_dev_test_flag(hdev, HCI_AUTO_OFF))
869 flags &= ~BIT(HCI_UP);
870
871 (dr + n)->dev_id = hdev->id;
872 (dr + n)->dev_opt = flags;
873
874 if (++n >= dev_num)
875 break;
876 }
877 read_unlock(&hci_dev_list_lock);
878
879 dl->dev_num = n;
880 size = sizeof(*dl) + n * sizeof(*dr);
881
882 err = copy_to_user(arg, dl, size);
883 kfree(dl);
884
885 return err ? -EFAULT : 0;
886}
887
888int hci_get_dev_info(void __user *arg)
889{
890 struct hci_dev *hdev;
891 struct hci_dev_info di;
892 unsigned long flags;
893 int err = 0;
894
895 if (copy_from_user(&di, arg, sizeof(di)))
896 return -EFAULT;
897
898 hdev = hci_dev_get(di.dev_id);
899 if (!hdev)
900 return -ENODEV;
901
902 /* When the auto-off is configured it means the transport
903 * is running, but in that case still indicate that the
904 * device is actually down.
905 */
906 if (hci_dev_test_flag(hdev, HCI_AUTO_OFF))
907 flags = hdev->flags & ~BIT(HCI_UP);
908 else
909 flags = hdev->flags;
910
911 strcpy(di.name, hdev->name);
912 di.bdaddr = hdev->bdaddr;
913 di.type = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4);
914 di.flags = flags;
915 di.pkt_type = hdev->pkt_type;
916 if (lmp_bredr_capable(hdev)) {
917 di.acl_mtu = hdev->acl_mtu;
918 di.acl_pkts = hdev->acl_pkts;
919 di.sco_mtu = hdev->sco_mtu;
920 di.sco_pkts = hdev->sco_pkts;
921 } else {
922 di.acl_mtu = hdev->le_mtu;
923 di.acl_pkts = hdev->le_pkts;
924 di.sco_mtu = 0;
925 di.sco_pkts = 0;
926 }
927 di.link_policy = hdev->link_policy;
928 di.link_mode = hdev->link_mode;
929
930 memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
931 memcpy(&di.features, &hdev->features, sizeof(di.features));
932
933 if (copy_to_user(arg, &di, sizeof(di)))
934 err = -EFAULT;
935
936 hci_dev_put(hdev);
937
938 return err;
939}
940
941/* ---- Interface to HCI drivers ---- */
942
943static int hci_rfkill_set_block(void *data, bool blocked)
944{
945 struct hci_dev *hdev = data;
946
947 BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
948
949 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
950 return -EBUSY;
951
952 if (blocked) {
953 hci_dev_set_flag(hdev, HCI_RFKILLED);
954 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
955 !hci_dev_test_flag(hdev, HCI_CONFIG))
956 hci_dev_do_close(hdev);
957 } else {
958 hci_dev_clear_flag(hdev, HCI_RFKILLED);
959 }
960
961 return 0;
962}
963
964static const struct rfkill_ops hci_rfkill_ops = {
965 .set_block = hci_rfkill_set_block,
966};
967
968static void hci_power_on(struct work_struct *work)
969{
970 struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
971 int err;
972
973 BT_DBG("%s", hdev->name);
974
975 if (test_bit(HCI_UP, &hdev->flags) &&
976 hci_dev_test_flag(hdev, HCI_MGMT) &&
977 hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) {
978 cancel_delayed_work(&hdev->power_off);
979 err = hci_powered_update_sync(hdev);
980 mgmt_power_on(hdev, err);
981 return;
982 }
983
984 err = hci_dev_do_open(hdev);
985 if (err < 0) {
986 hci_dev_lock(hdev);
987 mgmt_set_powered_failed(hdev, err);
988 hci_dev_unlock(hdev);
989 return;
990 }
991
992 /* During the HCI setup phase, a few error conditions are
993 * ignored and they need to be checked now. If they are still
994 * valid, it is important to turn the device back off.
995 */
996 if (hci_dev_test_flag(hdev, HCI_RFKILLED) ||
997 hci_dev_test_flag(hdev, HCI_UNCONFIGURED) ||
998 (hdev->dev_type == HCI_PRIMARY &&
999 !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
1000 !bacmp(&hdev->static_addr, BDADDR_ANY))) {
1001 hci_dev_clear_flag(hdev, HCI_AUTO_OFF);
1002 hci_dev_do_close(hdev);
1003 } else if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) {
1004 queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
1005 HCI_AUTO_OFF_TIMEOUT);
1006 }
1007
1008 if (hci_dev_test_and_clear_flag(hdev, HCI_SETUP)) {
1009 /* For unconfigured devices, set the HCI_RAW flag
1010 * so that userspace can easily identify them.
1011 */
1012 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
1013 set_bit(HCI_RAW, &hdev->flags);
1014
1015 /* For fully configured devices, this will send
1016 * the Index Added event. For unconfigured devices,
1017 * it will send Unconfigued Index Added event.
1018 *
1019 * Devices with HCI_QUIRK_RAW_DEVICE are ignored
1020 * and no event will be send.
1021 */
1022 mgmt_index_added(hdev);
1023 } else if (hci_dev_test_and_clear_flag(hdev, HCI_CONFIG)) {
1024 /* When the controller is now configured, then it
1025 * is important to clear the HCI_RAW flag.
1026 */
1027 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
1028 clear_bit(HCI_RAW, &hdev->flags);
1029
1030 /* Powering on the controller with HCI_CONFIG set only
1031 * happens with the transition from unconfigured to
1032 * configured. This will send the Index Added event.
1033 */
1034 mgmt_index_added(hdev);
1035 }
1036}
1037
1038static void hci_power_off(struct work_struct *work)
1039{
1040 struct hci_dev *hdev = container_of(work, struct hci_dev,
1041 power_off.work);
1042
1043 BT_DBG("%s", hdev->name);
1044
1045 hci_dev_do_close(hdev);
1046}
1047
1048static void hci_error_reset(struct work_struct *work)
1049{
1050 struct hci_dev *hdev = container_of(work, struct hci_dev, error_reset);
1051
1052 hci_dev_hold(hdev);
1053 BT_DBG("%s", hdev->name);
1054
1055 if (hdev->hw_error)
1056 hdev->hw_error(hdev, hdev->hw_error_code);
1057 else
1058 bt_dev_err(hdev, "hardware error 0x%2.2x", hdev->hw_error_code);
1059
1060 if (!hci_dev_do_close(hdev))
1061 hci_dev_do_open(hdev);
1062
1063 hci_dev_put(hdev);
1064}
1065
1066void hci_uuids_clear(struct hci_dev *hdev)
1067{
1068 struct bt_uuid *uuid, *tmp;
1069
1070 list_for_each_entry_safe(uuid, tmp, &hdev->uuids, list) {
1071 list_del(&uuid->list);
1072 kfree(uuid);
1073 }
1074}
1075
1076void hci_link_keys_clear(struct hci_dev *hdev)
1077{
1078 struct link_key *key, *tmp;
1079
1080 list_for_each_entry_safe(key, tmp, &hdev->link_keys, list) {
1081 list_del_rcu(&key->list);
1082 kfree_rcu(key, rcu);
1083 }
1084}
1085
1086void hci_smp_ltks_clear(struct hci_dev *hdev)
1087{
1088 struct smp_ltk *k, *tmp;
1089
1090 list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1091 list_del_rcu(&k->list);
1092 kfree_rcu(k, rcu);
1093 }
1094}
1095
1096void hci_smp_irks_clear(struct hci_dev *hdev)
1097{
1098 struct smp_irk *k, *tmp;
1099
1100 list_for_each_entry_safe(k, tmp, &hdev->identity_resolving_keys, list) {
1101 list_del_rcu(&k->list);
1102 kfree_rcu(k, rcu);
1103 }
1104}
1105
1106void hci_blocked_keys_clear(struct hci_dev *hdev)
1107{
1108 struct blocked_key *b, *tmp;
1109
1110 list_for_each_entry_safe(b, tmp, &hdev->blocked_keys, list) {
1111 list_del_rcu(&b->list);
1112 kfree_rcu(b, rcu);
1113 }
1114}
1115
1116bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16])
1117{
1118 bool blocked = false;
1119 struct blocked_key *b;
1120
1121 rcu_read_lock();
1122 list_for_each_entry_rcu(b, &hdev->blocked_keys, list) {
1123 if (b->type == type && !memcmp(b->val, val, sizeof(b->val))) {
1124 blocked = true;
1125 break;
1126 }
1127 }
1128
1129 rcu_read_unlock();
1130 return blocked;
1131}
1132
1133struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1134{
1135 struct link_key *k;
1136
1137 rcu_read_lock();
1138 list_for_each_entry_rcu(k, &hdev->link_keys, list) {
1139 if (bacmp(bdaddr, &k->bdaddr) == 0) {
1140 rcu_read_unlock();
1141
1142 if (hci_is_blocked_key(hdev,
1143 HCI_BLOCKED_KEY_TYPE_LINKKEY,
1144 k->val)) {
1145 bt_dev_warn_ratelimited(hdev,
1146 "Link key blocked for %pMR",
1147 &k->bdaddr);
1148 return NULL;
1149 }
1150
1151 return k;
1152 }
1153 }
1154 rcu_read_unlock();
1155
1156 return NULL;
1157}
1158
1159static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
1160 u8 key_type, u8 old_key_type)
1161{
1162 /* Legacy key */
1163 if (key_type < 0x03)
1164 return true;
1165
1166 /* Debug keys are insecure so don't store them persistently */
1167 if (key_type == HCI_LK_DEBUG_COMBINATION)
1168 return false;
1169
1170 /* Changed combination key and there's no previous one */
1171 if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
1172 return false;
1173
1174 /* Security mode 3 case */
1175 if (!conn)
1176 return true;
1177
1178 /* BR/EDR key derived using SC from an LE link */
1179 if (conn->type == LE_LINK)
1180 return true;
1181
1182 /* Neither local nor remote side had no-bonding as requirement */
1183 if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
1184 return true;
1185
1186 /* Local side had dedicated bonding as requirement */
1187 if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
1188 return true;
1189
1190 /* Remote side had dedicated bonding as requirement */
1191 if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
1192 return true;
1193
1194 /* If none of the above criteria match, then don't store the key
1195 * persistently */
1196 return false;
1197}
1198
1199static u8 ltk_role(u8 type)
1200{
1201 if (type == SMP_LTK)
1202 return HCI_ROLE_MASTER;
1203
1204 return HCI_ROLE_SLAVE;
1205}
1206
1207struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1208 u8 addr_type, u8 role)
1209{
1210 struct smp_ltk *k;
1211
1212 rcu_read_lock();
1213 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
1214 if (addr_type != k->bdaddr_type || bacmp(bdaddr, &k->bdaddr))
1215 continue;
1216
1217 if (smp_ltk_is_sc(k) || ltk_role(k->type) == role) {
1218 rcu_read_unlock();
1219
1220 if (hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_LTK,
1221 k->val)) {
1222 bt_dev_warn_ratelimited(hdev,
1223 "LTK blocked for %pMR",
1224 &k->bdaddr);
1225 return NULL;
1226 }
1227
1228 return k;
1229 }
1230 }
1231 rcu_read_unlock();
1232
1233 return NULL;
1234}
1235
1236struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa)
1237{
1238 struct smp_irk *irk_to_return = NULL;
1239 struct smp_irk *irk;
1240
1241 rcu_read_lock();
1242 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
1243 if (!bacmp(&irk->rpa, rpa)) {
1244 irk_to_return = irk;
1245 goto done;
1246 }
1247 }
1248
1249 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
1250 if (smp_irk_matches(hdev, irk->val, rpa)) {
1251 bacpy(&irk->rpa, rpa);
1252 irk_to_return = irk;
1253 goto done;
1254 }
1255 }
1256
1257done:
1258 if (irk_to_return && hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_IRK,
1259 irk_to_return->val)) {
1260 bt_dev_warn_ratelimited(hdev, "Identity key blocked for %pMR",
1261 &irk_to_return->bdaddr);
1262 irk_to_return = NULL;
1263 }
1264
1265 rcu_read_unlock();
1266
1267 return irk_to_return;
1268}
1269
1270struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1271 u8 addr_type)
1272{
1273 struct smp_irk *irk_to_return = NULL;
1274 struct smp_irk *irk;
1275
1276 /* Identity Address must be public or static random */
1277 if (addr_type == ADDR_LE_DEV_RANDOM && (bdaddr->b[5] & 0xc0) != 0xc0)
1278 return NULL;
1279
1280 rcu_read_lock();
1281 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
1282 if (addr_type == irk->addr_type &&
1283 bacmp(bdaddr, &irk->bdaddr) == 0) {
1284 irk_to_return = irk;
1285 goto done;
1286 }
1287 }
1288
1289done:
1290
1291 if (irk_to_return && hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_IRK,
1292 irk_to_return->val)) {
1293 bt_dev_warn_ratelimited(hdev, "Identity key blocked for %pMR",
1294 &irk_to_return->bdaddr);
1295 irk_to_return = NULL;
1296 }
1297
1298 rcu_read_unlock();
1299
1300 return irk_to_return;
1301}
1302
1303struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
1304 bdaddr_t *bdaddr, u8 *val, u8 type,
1305 u8 pin_len, bool *persistent)
1306{
1307 struct link_key *key, *old_key;
1308 u8 old_key_type;
1309
1310 old_key = hci_find_link_key(hdev, bdaddr);
1311 if (old_key) {
1312 old_key_type = old_key->type;
1313 key = old_key;
1314 } else {
1315 old_key_type = conn ? conn->key_type : 0xff;
1316 key = kzalloc(sizeof(*key), GFP_KERNEL);
1317 if (!key)
1318 return NULL;
1319 list_add_rcu(&key->list, &hdev->link_keys);
1320 }
1321
1322 BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type);
1323
1324 /* Some buggy controller combinations generate a changed
1325 * combination key for legacy pairing even when there's no
1326 * previous key */
1327 if (type == HCI_LK_CHANGED_COMBINATION &&
1328 (!conn || conn->remote_auth == 0xff) && old_key_type == 0xff) {
1329 type = HCI_LK_COMBINATION;
1330 if (conn)
1331 conn->key_type = type;
1332 }
1333
1334 bacpy(&key->bdaddr, bdaddr);
1335 memcpy(key->val, val, HCI_LINK_KEY_SIZE);
1336 key->pin_len = pin_len;
1337
1338 if (type == HCI_LK_CHANGED_COMBINATION)
1339 key->type = old_key_type;
1340 else
1341 key->type = type;
1342
1343 if (persistent)
1344 *persistent = hci_persistent_key(hdev, conn, type,
1345 old_key_type);
1346
1347 return key;
1348}
1349
1350struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1351 u8 addr_type, u8 type, u8 authenticated,
1352 u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand)
1353{
1354 struct smp_ltk *key, *old_key;
1355 u8 role = ltk_role(type);
1356
1357 old_key = hci_find_ltk(hdev, bdaddr, addr_type, role);
1358 if (old_key)
1359 key = old_key;
1360 else {
1361 key = kzalloc(sizeof(*key), GFP_KERNEL);
1362 if (!key)
1363 return NULL;
1364 list_add_rcu(&key->list, &hdev->long_term_keys);
1365 }
1366
1367 bacpy(&key->bdaddr, bdaddr);
1368 key->bdaddr_type = addr_type;
1369 memcpy(key->val, tk, sizeof(key->val));
1370 key->authenticated = authenticated;
1371 key->ediv = ediv;
1372 key->rand = rand;
1373 key->enc_size = enc_size;
1374 key->type = type;
1375
1376 return key;
1377}
1378
1379struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1380 u8 addr_type, u8 val[16], bdaddr_t *rpa)
1381{
1382 struct smp_irk *irk;
1383
1384 irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type);
1385 if (!irk) {
1386 irk = kzalloc(sizeof(*irk), GFP_KERNEL);
1387 if (!irk)
1388 return NULL;
1389
1390 bacpy(&irk->bdaddr, bdaddr);
1391 irk->addr_type = addr_type;
1392
1393 list_add_rcu(&irk->list, &hdev->identity_resolving_keys);
1394 }
1395
1396 memcpy(irk->val, val, 16);
1397 bacpy(&irk->rpa, rpa);
1398
1399 return irk;
1400}
1401
1402int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1403{
1404 struct link_key *key;
1405
1406 key = hci_find_link_key(hdev, bdaddr);
1407 if (!key)
1408 return -ENOENT;
1409
1410 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
1411
1412 list_del_rcu(&key->list);
1413 kfree_rcu(key, rcu);
1414
1415 return 0;
1416}
1417
1418int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type)
1419{
1420 struct smp_ltk *k, *tmp;
1421 int removed = 0;
1422
1423 list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1424 if (bacmp(bdaddr, &k->bdaddr) || k->bdaddr_type != bdaddr_type)
1425 continue;
1426
1427 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
1428
1429 list_del_rcu(&k->list);
1430 kfree_rcu(k, rcu);
1431 removed++;
1432 }
1433
1434 return removed ? 0 : -ENOENT;
1435}
1436
1437void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type)
1438{
1439 struct smp_irk *k, *tmp;
1440
1441 list_for_each_entry_safe(k, tmp, &hdev->identity_resolving_keys, list) {
1442 if (bacmp(bdaddr, &k->bdaddr) || k->addr_type != addr_type)
1443 continue;
1444
1445 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
1446
1447 list_del_rcu(&k->list);
1448 kfree_rcu(k, rcu);
1449 }
1450}
1451
1452bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
1453{
1454 struct smp_ltk *k;
1455 struct smp_irk *irk;
1456 u8 addr_type;
1457
1458 if (type == BDADDR_BREDR) {
1459 if (hci_find_link_key(hdev, bdaddr))
1460 return true;
1461 return false;
1462 }
1463
1464 /* Convert to HCI addr type which struct smp_ltk uses */
1465 if (type == BDADDR_LE_PUBLIC)
1466 addr_type = ADDR_LE_DEV_PUBLIC;
1467 else
1468 addr_type = ADDR_LE_DEV_RANDOM;
1469
1470 irk = hci_get_irk(hdev, bdaddr, addr_type);
1471 if (irk) {
1472 bdaddr = &irk->bdaddr;
1473 addr_type = irk->addr_type;
1474 }
1475
1476 rcu_read_lock();
1477 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
1478 if (k->bdaddr_type == addr_type && !bacmp(bdaddr, &k->bdaddr)) {
1479 rcu_read_unlock();
1480 return true;
1481 }
1482 }
1483 rcu_read_unlock();
1484
1485 return false;
1486}
1487
1488/* HCI command timer function */
1489static void hci_cmd_timeout(struct work_struct *work)
1490{
1491 struct hci_dev *hdev = container_of(work, struct hci_dev,
1492 cmd_timer.work);
1493
1494 if (hdev->sent_cmd) {
1495 struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data;
1496 u16 opcode = __le16_to_cpu(sent->opcode);
1497
1498 bt_dev_err(hdev, "command 0x%4.4x tx timeout", opcode);
1499 } else {
1500 bt_dev_err(hdev, "command tx timeout");
1501 }
1502
1503 if (hdev->cmd_timeout)
1504 hdev->cmd_timeout(hdev);
1505
1506 atomic_set(&hdev->cmd_cnt, 1);
1507 queue_work(hdev->workqueue, &hdev->cmd_work);
1508}
1509
1510/* HCI ncmd timer function */
1511static void hci_ncmd_timeout(struct work_struct *work)
1512{
1513 struct hci_dev *hdev = container_of(work, struct hci_dev,
1514 ncmd_timer.work);
1515
1516 bt_dev_err(hdev, "Controller not accepting commands anymore: ncmd = 0");
1517
1518 /* During HCI_INIT phase no events can be injected if the ncmd timer
1519 * triggers since the procedure has its own timeout handling.
1520 */
1521 if (test_bit(HCI_INIT, &hdev->flags))
1522 return;
1523
1524 /* This is an irrecoverable state, inject hardware error event */
1525 hci_reset_dev(hdev);
1526}
1527
1528struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1529 bdaddr_t *bdaddr, u8 bdaddr_type)
1530{
1531 struct oob_data *data;
1532
1533 list_for_each_entry(data, &hdev->remote_oob_data, list) {
1534 if (bacmp(bdaddr, &data->bdaddr) != 0)
1535 continue;
1536 if (data->bdaddr_type != bdaddr_type)
1537 continue;
1538 return data;
1539 }
1540
1541 return NULL;
1542}
1543
1544int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1545 u8 bdaddr_type)
1546{
1547 struct oob_data *data;
1548
1549 data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
1550 if (!data)
1551 return -ENOENT;
1552
1553 BT_DBG("%s removing %pMR (%u)", hdev->name, bdaddr, bdaddr_type);
1554
1555 list_del(&data->list);
1556 kfree(data);
1557
1558 return 0;
1559}
1560
1561void hci_remote_oob_data_clear(struct hci_dev *hdev)
1562{
1563 struct oob_data *data, *n;
1564
1565 list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
1566 list_del(&data->list);
1567 kfree(data);
1568 }
1569}
1570
1571int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1572 u8 bdaddr_type, u8 *hash192, u8 *rand192,
1573 u8 *hash256, u8 *rand256)
1574{
1575 struct oob_data *data;
1576
1577 data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
1578 if (!data) {
1579 data = kmalloc(sizeof(*data), GFP_KERNEL);
1580 if (!data)
1581 return -ENOMEM;
1582
1583 bacpy(&data->bdaddr, bdaddr);
1584 data->bdaddr_type = bdaddr_type;
1585 list_add(&data->list, &hdev->remote_oob_data);
1586 }
1587
1588 if (hash192 && rand192) {
1589 memcpy(data->hash192, hash192, sizeof(data->hash192));
1590 memcpy(data->rand192, rand192, sizeof(data->rand192));
1591 if (hash256 && rand256)
1592 data->present = 0x03;
1593 } else {
1594 memset(data->hash192, 0, sizeof(data->hash192));
1595 memset(data->rand192, 0, sizeof(data->rand192));
1596 if (hash256 && rand256)
1597 data->present = 0x02;
1598 else
1599 data->present = 0x00;
1600 }
1601
1602 if (hash256 && rand256) {
1603 memcpy(data->hash256, hash256, sizeof(data->hash256));
1604 memcpy(data->rand256, rand256, sizeof(data->rand256));
1605 } else {
1606 memset(data->hash256, 0, sizeof(data->hash256));
1607 memset(data->rand256, 0, sizeof(data->rand256));
1608 if (hash192 && rand192)
1609 data->present = 0x01;
1610 }
1611
1612 BT_DBG("%s for %pMR", hdev->name, bdaddr);
1613
1614 return 0;
1615}
1616
1617/* This function requires the caller holds hdev->lock */
1618struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance)
1619{
1620 struct adv_info *adv_instance;
1621
1622 list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
1623 if (adv_instance->instance == instance)
1624 return adv_instance;
1625 }
1626
1627 return NULL;
1628}
1629
1630/* This function requires the caller holds hdev->lock */
1631struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance)
1632{
1633 struct adv_info *cur_instance;
1634
1635 cur_instance = hci_find_adv_instance(hdev, instance);
1636 if (!cur_instance)
1637 return NULL;
1638
1639 if (cur_instance == list_last_entry(&hdev->adv_instances,
1640 struct adv_info, list))
1641 return list_first_entry(&hdev->adv_instances,
1642 struct adv_info, list);
1643 else
1644 return list_next_entry(cur_instance, list);
1645}
1646
1647/* This function requires the caller holds hdev->lock */
1648int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance)
1649{
1650 struct adv_info *adv_instance;
1651
1652 adv_instance = hci_find_adv_instance(hdev, instance);
1653 if (!adv_instance)
1654 return -ENOENT;
1655
1656 BT_DBG("%s removing %dMR", hdev->name, instance);
1657
1658 if (hdev->cur_adv_instance == instance) {
1659 if (hdev->adv_instance_timeout) {
1660 cancel_delayed_work(&hdev->adv_instance_expire);
1661 hdev->adv_instance_timeout = 0;
1662 }
1663 hdev->cur_adv_instance = 0x00;
1664 }
1665
1666 cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
1667
1668 list_del(&adv_instance->list);
1669 kfree(adv_instance);
1670
1671 hdev->adv_instance_cnt--;
1672
1673 return 0;
1674}
1675
1676void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired)
1677{
1678 struct adv_info *adv_instance, *n;
1679
1680 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list)
1681 adv_instance->rpa_expired = rpa_expired;
1682}
1683
1684/* This function requires the caller holds hdev->lock */
1685void hci_adv_instances_clear(struct hci_dev *hdev)
1686{
1687 struct adv_info *adv_instance, *n;
1688
1689 if (hdev->adv_instance_timeout) {
1690 cancel_delayed_work(&hdev->adv_instance_expire);
1691 hdev->adv_instance_timeout = 0;
1692 }
1693
1694 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
1695 cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
1696 list_del(&adv_instance->list);
1697 kfree(adv_instance);
1698 }
1699
1700 hdev->adv_instance_cnt = 0;
1701 hdev->cur_adv_instance = 0x00;
1702}
1703
1704static void adv_instance_rpa_expired(struct work_struct *work)
1705{
1706 struct adv_info *adv_instance = container_of(work, struct adv_info,
1707 rpa_expired_cb.work);
1708
1709 BT_DBG("");
1710
1711 adv_instance->rpa_expired = true;
1712}
1713
1714/* This function requires the caller holds hdev->lock */
1715struct adv_info *hci_add_adv_instance(struct hci_dev *hdev, u8 instance,
1716 u32 flags, u16 adv_data_len, u8 *adv_data,
1717 u16 scan_rsp_len, u8 *scan_rsp_data,
1718 u16 timeout, u16 duration, s8 tx_power,
1719 u32 min_interval, u32 max_interval,
1720 u8 mesh_handle)
1721{
1722 struct adv_info *adv;
1723
1724 adv = hci_find_adv_instance(hdev, instance);
1725 if (adv) {
1726 memset(adv->adv_data, 0, sizeof(adv->adv_data));
1727 memset(adv->scan_rsp_data, 0, sizeof(adv->scan_rsp_data));
1728 memset(adv->per_adv_data, 0, sizeof(adv->per_adv_data));
1729 } else {
1730 if (hdev->adv_instance_cnt >= hdev->le_num_of_adv_sets ||
1731 instance < 1 || instance > hdev->le_num_of_adv_sets + 1)
1732 return ERR_PTR(-EOVERFLOW);
1733
1734 adv = kzalloc(sizeof(*adv), GFP_KERNEL);
1735 if (!adv)
1736 return ERR_PTR(-ENOMEM);
1737
1738 adv->pending = true;
1739 adv->instance = instance;
1740 list_add(&adv->list, &hdev->adv_instances);
1741 hdev->adv_instance_cnt++;
1742 }
1743
1744 adv->flags = flags;
1745 adv->min_interval = min_interval;
1746 adv->max_interval = max_interval;
1747 adv->tx_power = tx_power;
1748 /* Defining a mesh_handle changes the timing units to ms,
1749 * rather than seconds, and ties the instance to the requested
1750 * mesh_tx queue.
1751 */
1752 adv->mesh = mesh_handle;
1753
1754 hci_set_adv_instance_data(hdev, instance, adv_data_len, adv_data,
1755 scan_rsp_len, scan_rsp_data);
1756
1757 adv->timeout = timeout;
1758 adv->remaining_time = timeout;
1759
1760 if (duration == 0)
1761 adv->duration = hdev->def_multi_adv_rotation_duration;
1762 else
1763 adv->duration = duration;
1764
1765 INIT_DELAYED_WORK(&adv->rpa_expired_cb, adv_instance_rpa_expired);
1766
1767 BT_DBG("%s for %dMR", hdev->name, instance);
1768
1769 return adv;
1770}
1771
1772/* This function requires the caller holds hdev->lock */
1773struct adv_info *hci_add_per_instance(struct hci_dev *hdev, u8 instance,
1774 u32 flags, u8 data_len, u8 *data,
1775 u32 min_interval, u32 max_interval)
1776{
1777 struct adv_info *adv;
1778
1779 adv = hci_add_adv_instance(hdev, instance, flags, 0, NULL, 0, NULL,
1780 0, 0, HCI_ADV_TX_POWER_NO_PREFERENCE,
1781 min_interval, max_interval, 0);
1782 if (IS_ERR(adv))
1783 return adv;
1784
1785 adv->periodic = true;
1786 adv->per_adv_data_len = data_len;
1787
1788 if (data)
1789 memcpy(adv->per_adv_data, data, data_len);
1790
1791 return adv;
1792}
1793
1794/* This function requires the caller holds hdev->lock */
1795int hci_set_adv_instance_data(struct hci_dev *hdev, u8 instance,
1796 u16 adv_data_len, u8 *adv_data,
1797 u16 scan_rsp_len, u8 *scan_rsp_data)
1798{
1799 struct adv_info *adv;
1800
1801 adv = hci_find_adv_instance(hdev, instance);
1802
1803 /* If advertisement doesn't exist, we can't modify its data */
1804 if (!adv)
1805 return -ENOENT;
1806
1807 if (adv_data_len && ADV_DATA_CMP(adv, adv_data, adv_data_len)) {
1808 memset(adv->adv_data, 0, sizeof(adv->adv_data));
1809 memcpy(adv->adv_data, adv_data, adv_data_len);
1810 adv->adv_data_len = adv_data_len;
1811 adv->adv_data_changed = true;
1812 }
1813
1814 if (scan_rsp_len && SCAN_RSP_CMP(adv, scan_rsp_data, scan_rsp_len)) {
1815 memset(adv->scan_rsp_data, 0, sizeof(adv->scan_rsp_data));
1816 memcpy(adv->scan_rsp_data, scan_rsp_data, scan_rsp_len);
1817 adv->scan_rsp_len = scan_rsp_len;
1818 adv->scan_rsp_changed = true;
1819 }
1820
1821 /* Mark as changed if there are flags which would affect it */
1822 if (((adv->flags & MGMT_ADV_FLAG_APPEARANCE) && hdev->appearance) ||
1823 adv->flags & MGMT_ADV_FLAG_LOCAL_NAME)
1824 adv->scan_rsp_changed = true;
1825
1826 return 0;
1827}
1828
1829/* This function requires the caller holds hdev->lock */
1830u32 hci_adv_instance_flags(struct hci_dev *hdev, u8 instance)
1831{
1832 u32 flags;
1833 struct adv_info *adv;
1834
1835 if (instance == 0x00) {
1836 /* Instance 0 always manages the "Tx Power" and "Flags"
1837 * fields
1838 */
1839 flags = MGMT_ADV_FLAG_TX_POWER | MGMT_ADV_FLAG_MANAGED_FLAGS;
1840
1841 /* For instance 0, the HCI_ADVERTISING_CONNECTABLE setting
1842 * corresponds to the "connectable" instance flag.
1843 */
1844 if (hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE))
1845 flags |= MGMT_ADV_FLAG_CONNECTABLE;
1846
1847 if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
1848 flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
1849 else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
1850 flags |= MGMT_ADV_FLAG_DISCOV;
1851
1852 return flags;
1853 }
1854
1855 adv = hci_find_adv_instance(hdev, instance);
1856
1857 /* Return 0 when we got an invalid instance identifier. */
1858 if (!adv)
1859 return 0;
1860
1861 return adv->flags;
1862}
1863
1864bool hci_adv_instance_is_scannable(struct hci_dev *hdev, u8 instance)
1865{
1866 struct adv_info *adv;
1867
1868 /* Instance 0x00 always set local name */
1869 if (instance == 0x00)
1870 return true;
1871
1872 adv = hci_find_adv_instance(hdev, instance);
1873 if (!adv)
1874 return false;
1875
1876 if (adv->flags & MGMT_ADV_FLAG_APPEARANCE ||
1877 adv->flags & MGMT_ADV_FLAG_LOCAL_NAME)
1878 return true;
1879
1880 return adv->scan_rsp_len ? true : false;
1881}
1882
1883/* This function requires the caller holds hdev->lock */
1884void hci_adv_monitors_clear(struct hci_dev *hdev)
1885{
1886 struct adv_monitor *monitor;
1887 int handle;
1888
1889 idr_for_each_entry(&hdev->adv_monitors_idr, monitor, handle)
1890 hci_free_adv_monitor(hdev, monitor);
1891
1892 idr_destroy(&hdev->adv_monitors_idr);
1893}
1894
1895/* Frees the monitor structure and do some bookkeepings.
1896 * This function requires the caller holds hdev->lock.
1897 */
1898void hci_free_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor)
1899{
1900 struct adv_pattern *pattern;
1901 struct adv_pattern *tmp;
1902
1903 if (!monitor)
1904 return;
1905
1906 list_for_each_entry_safe(pattern, tmp, &monitor->patterns, list) {
1907 list_del(&pattern->list);
1908 kfree(pattern);
1909 }
1910
1911 if (monitor->handle)
1912 idr_remove(&hdev->adv_monitors_idr, monitor->handle);
1913
1914 if (monitor->state != ADV_MONITOR_STATE_NOT_REGISTERED) {
1915 hdev->adv_monitors_cnt--;
1916 mgmt_adv_monitor_removed(hdev, monitor->handle);
1917 }
1918
1919 kfree(monitor);
1920}
1921
1922/* Assigns handle to a monitor, and if offloading is supported and power is on,
1923 * also attempts to forward the request to the controller.
1924 * This function requires the caller holds hci_req_sync_lock.
1925 */
1926int hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor)
1927{
1928 int min, max, handle;
1929 int status = 0;
1930
1931 if (!monitor)
1932 return -EINVAL;
1933
1934 hci_dev_lock(hdev);
1935
1936 min = HCI_MIN_ADV_MONITOR_HANDLE;
1937 max = HCI_MIN_ADV_MONITOR_HANDLE + HCI_MAX_ADV_MONITOR_NUM_HANDLES;
1938 handle = idr_alloc(&hdev->adv_monitors_idr, monitor, min, max,
1939 GFP_KERNEL);
1940
1941 hci_dev_unlock(hdev);
1942
1943 if (handle < 0)
1944 return handle;
1945
1946 monitor->handle = handle;
1947
1948 if (!hdev_is_powered(hdev))
1949 return status;
1950
1951 switch (hci_get_adv_monitor_offload_ext(hdev)) {
1952 case HCI_ADV_MONITOR_EXT_NONE:
1953 bt_dev_dbg(hdev, "add monitor %d status %d",
1954 monitor->handle, status);
1955 /* Message was not forwarded to controller - not an error */
1956 break;
1957
1958 case HCI_ADV_MONITOR_EXT_MSFT:
1959 status = msft_add_monitor_pattern(hdev, monitor);
1960 bt_dev_dbg(hdev, "add monitor %d msft status %d",
1961 handle, status);
1962 break;
1963 }
1964
1965 return status;
1966}
1967
1968/* Attempts to tell the controller and free the monitor. If somehow the
1969 * controller doesn't have a corresponding handle, remove anyway.
1970 * This function requires the caller holds hci_req_sync_lock.
1971 */
1972static int hci_remove_adv_monitor(struct hci_dev *hdev,
1973 struct adv_monitor *monitor)
1974{
1975 int status = 0;
1976 int handle;
1977
1978 switch (hci_get_adv_monitor_offload_ext(hdev)) {
1979 case HCI_ADV_MONITOR_EXT_NONE: /* also goes here when powered off */
1980 bt_dev_dbg(hdev, "remove monitor %d status %d",
1981 monitor->handle, status);
1982 goto free_monitor;
1983
1984 case HCI_ADV_MONITOR_EXT_MSFT:
1985 handle = monitor->handle;
1986 status = msft_remove_monitor(hdev, monitor);
1987 bt_dev_dbg(hdev, "remove monitor %d msft status %d",
1988 handle, status);
1989 break;
1990 }
1991
1992 /* In case no matching handle registered, just free the monitor */
1993 if (status == -ENOENT)
1994 goto free_monitor;
1995
1996 return status;
1997
1998free_monitor:
1999 if (status == -ENOENT)
2000 bt_dev_warn(hdev, "Removing monitor with no matching handle %d",
2001 monitor->handle);
2002 hci_free_adv_monitor(hdev, monitor);
2003
2004 return status;
2005}
2006
2007/* This function requires the caller holds hci_req_sync_lock */
2008int hci_remove_single_adv_monitor(struct hci_dev *hdev, u16 handle)
2009{
2010 struct adv_monitor *monitor = idr_find(&hdev->adv_monitors_idr, handle);
2011
2012 if (!monitor)
2013 return -EINVAL;
2014
2015 return hci_remove_adv_monitor(hdev, monitor);
2016}
2017
2018/* This function requires the caller holds hci_req_sync_lock */
2019int hci_remove_all_adv_monitor(struct hci_dev *hdev)
2020{
2021 struct adv_monitor *monitor;
2022 int idr_next_id = 0;
2023 int status = 0;
2024
2025 while (1) {
2026 monitor = idr_get_next(&hdev->adv_monitors_idr, &idr_next_id);
2027 if (!monitor)
2028 break;
2029
2030 status = hci_remove_adv_monitor(hdev, monitor);
2031 if (status)
2032 return status;
2033
2034 idr_next_id++;
2035 }
2036
2037 return status;
2038}
2039
2040/* This function requires the caller holds hdev->lock */
2041bool hci_is_adv_monitoring(struct hci_dev *hdev)
2042{
2043 return !idr_is_empty(&hdev->adv_monitors_idr);
2044}
2045
2046int hci_get_adv_monitor_offload_ext(struct hci_dev *hdev)
2047{
2048 if (msft_monitor_supported(hdev))
2049 return HCI_ADV_MONITOR_EXT_MSFT;
2050
2051 return HCI_ADV_MONITOR_EXT_NONE;
2052}
2053
2054struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *bdaddr_list,
2055 bdaddr_t *bdaddr, u8 type)
2056{
2057 struct bdaddr_list *b;
2058
2059 list_for_each_entry(b, bdaddr_list, list) {
2060 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2061 return b;
2062 }
2063
2064 return NULL;
2065}
2066
2067struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
2068 struct list_head *bdaddr_list, bdaddr_t *bdaddr,
2069 u8 type)
2070{
2071 struct bdaddr_list_with_irk *b;
2072
2073 list_for_each_entry(b, bdaddr_list, list) {
2074 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2075 return b;
2076 }
2077
2078 return NULL;
2079}
2080
2081struct bdaddr_list_with_flags *
2082hci_bdaddr_list_lookup_with_flags(struct list_head *bdaddr_list,
2083 bdaddr_t *bdaddr, u8 type)
2084{
2085 struct bdaddr_list_with_flags *b;
2086
2087 list_for_each_entry(b, bdaddr_list, list) {
2088 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2089 return b;
2090 }
2091
2092 return NULL;
2093}
2094
2095void hci_bdaddr_list_clear(struct list_head *bdaddr_list)
2096{
2097 struct bdaddr_list *b, *n;
2098
2099 list_for_each_entry_safe(b, n, bdaddr_list, list) {
2100 list_del(&b->list);
2101 kfree(b);
2102 }
2103}
2104
2105int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type)
2106{
2107 struct bdaddr_list *entry;
2108
2109 if (!bacmp(bdaddr, BDADDR_ANY))
2110 return -EBADF;
2111
2112 if (hci_bdaddr_list_lookup(list, bdaddr, type))
2113 return -EEXIST;
2114
2115 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2116 if (!entry)
2117 return -ENOMEM;
2118
2119 bacpy(&entry->bdaddr, bdaddr);
2120 entry->bdaddr_type = type;
2121
2122 list_add(&entry->list, list);
2123
2124 return 0;
2125}
2126
2127int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
2128 u8 type, u8 *peer_irk, u8 *local_irk)
2129{
2130 struct bdaddr_list_with_irk *entry;
2131
2132 if (!bacmp(bdaddr, BDADDR_ANY))
2133 return -EBADF;
2134
2135 if (hci_bdaddr_list_lookup(list, bdaddr, type))
2136 return -EEXIST;
2137
2138 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2139 if (!entry)
2140 return -ENOMEM;
2141
2142 bacpy(&entry->bdaddr, bdaddr);
2143 entry->bdaddr_type = type;
2144
2145 if (peer_irk)
2146 memcpy(entry->peer_irk, peer_irk, 16);
2147
2148 if (local_irk)
2149 memcpy(entry->local_irk, local_irk, 16);
2150
2151 list_add(&entry->list, list);
2152
2153 return 0;
2154}
2155
2156int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
2157 u8 type, u32 flags)
2158{
2159 struct bdaddr_list_with_flags *entry;
2160
2161 if (!bacmp(bdaddr, BDADDR_ANY))
2162 return -EBADF;
2163
2164 if (hci_bdaddr_list_lookup(list, bdaddr, type))
2165 return -EEXIST;
2166
2167 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2168 if (!entry)
2169 return -ENOMEM;
2170
2171 bacpy(&entry->bdaddr, bdaddr);
2172 entry->bdaddr_type = type;
2173 entry->flags = flags;
2174
2175 list_add(&entry->list, list);
2176
2177 return 0;
2178}
2179
2180int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type)
2181{
2182 struct bdaddr_list *entry;
2183
2184 if (!bacmp(bdaddr, BDADDR_ANY)) {
2185 hci_bdaddr_list_clear(list);
2186 return 0;
2187 }
2188
2189 entry = hci_bdaddr_list_lookup(list, bdaddr, type);
2190 if (!entry)
2191 return -ENOENT;
2192
2193 list_del(&entry->list);
2194 kfree(entry);
2195
2196 return 0;
2197}
2198
2199int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
2200 u8 type)
2201{
2202 struct bdaddr_list_with_irk *entry;
2203
2204 if (!bacmp(bdaddr, BDADDR_ANY)) {
2205 hci_bdaddr_list_clear(list);
2206 return 0;
2207 }
2208
2209 entry = hci_bdaddr_list_lookup_with_irk(list, bdaddr, type);
2210 if (!entry)
2211 return -ENOENT;
2212
2213 list_del(&entry->list);
2214 kfree(entry);
2215
2216 return 0;
2217}
2218
2219int hci_bdaddr_list_del_with_flags(struct list_head *list, bdaddr_t *bdaddr,
2220 u8 type)
2221{
2222 struct bdaddr_list_with_flags *entry;
2223
2224 if (!bacmp(bdaddr, BDADDR_ANY)) {
2225 hci_bdaddr_list_clear(list);
2226 return 0;
2227 }
2228
2229 entry = hci_bdaddr_list_lookup_with_flags(list, bdaddr, type);
2230 if (!entry)
2231 return -ENOENT;
2232
2233 list_del(&entry->list);
2234 kfree(entry);
2235
2236 return 0;
2237}
2238
2239/* This function requires the caller holds hdev->lock */
2240struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
2241 bdaddr_t *addr, u8 addr_type)
2242{
2243 struct hci_conn_params *params;
2244
2245 list_for_each_entry(params, &hdev->le_conn_params, list) {
2246 if (bacmp(¶ms->addr, addr) == 0 &&
2247 params->addr_type == addr_type) {
2248 return params;
2249 }
2250 }
2251
2252 return NULL;
2253}
2254
2255/* This function requires the caller holds hdev->lock or rcu_read_lock */
2256struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
2257 bdaddr_t *addr, u8 addr_type)
2258{
2259 struct hci_conn_params *param;
2260
2261 rcu_read_lock();
2262
2263 list_for_each_entry_rcu(param, list, action) {
2264 if (bacmp(¶m->addr, addr) == 0 &&
2265 param->addr_type == addr_type) {
2266 rcu_read_unlock();
2267 return param;
2268 }
2269 }
2270
2271 rcu_read_unlock();
2272
2273 return NULL;
2274}
2275
2276/* This function requires the caller holds hdev->lock */
2277void hci_pend_le_list_del_init(struct hci_conn_params *param)
2278{
2279 if (list_empty(¶m->action))
2280 return;
2281
2282 list_del_rcu(¶m->action);
2283 synchronize_rcu();
2284 INIT_LIST_HEAD(¶m->action);
2285}
2286
2287/* This function requires the caller holds hdev->lock */
2288void hci_pend_le_list_add(struct hci_conn_params *param,
2289 struct list_head *list)
2290{
2291 list_add_rcu(¶m->action, list);
2292}
2293
2294/* This function requires the caller holds hdev->lock */
2295struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
2296 bdaddr_t *addr, u8 addr_type)
2297{
2298 struct hci_conn_params *params;
2299
2300 params = hci_conn_params_lookup(hdev, addr, addr_type);
2301 if (params)
2302 return params;
2303
2304 params = kzalloc(sizeof(*params), GFP_KERNEL);
2305 if (!params) {
2306 bt_dev_err(hdev, "out of memory");
2307 return NULL;
2308 }
2309
2310 bacpy(¶ms->addr, addr);
2311 params->addr_type = addr_type;
2312
2313 list_add(¶ms->list, &hdev->le_conn_params);
2314 INIT_LIST_HEAD(¶ms->action);
2315
2316 params->conn_min_interval = hdev->le_conn_min_interval;
2317 params->conn_max_interval = hdev->le_conn_max_interval;
2318 params->conn_latency = hdev->le_conn_latency;
2319 params->supervision_timeout = hdev->le_supv_timeout;
2320 params->auto_connect = HCI_AUTO_CONN_DISABLED;
2321
2322 BT_DBG("addr %pMR (type %u)", addr, addr_type);
2323
2324 return params;
2325}
2326
2327void hci_conn_params_free(struct hci_conn_params *params)
2328{
2329 hci_pend_le_list_del_init(params);
2330
2331 if (params->conn) {
2332 hci_conn_drop(params->conn);
2333 hci_conn_put(params->conn);
2334 }
2335
2336 list_del(¶ms->list);
2337 kfree(params);
2338}
2339
2340/* This function requires the caller holds hdev->lock */
2341void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
2342{
2343 struct hci_conn_params *params;
2344
2345 params = hci_conn_params_lookup(hdev, addr, addr_type);
2346 if (!params)
2347 return;
2348
2349 hci_conn_params_free(params);
2350
2351 hci_update_passive_scan(hdev);
2352
2353 BT_DBG("addr %pMR (type %u)", addr, addr_type);
2354}
2355
2356/* This function requires the caller holds hdev->lock */
2357void hci_conn_params_clear_disabled(struct hci_dev *hdev)
2358{
2359 struct hci_conn_params *params, *tmp;
2360
2361 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
2362 if (params->auto_connect != HCI_AUTO_CONN_DISABLED)
2363 continue;
2364
2365 /* If trying to establish one time connection to disabled
2366 * device, leave the params, but mark them as just once.
2367 */
2368 if (params->explicit_connect) {
2369 params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
2370 continue;
2371 }
2372
2373 hci_conn_params_free(params);
2374 }
2375
2376 BT_DBG("All LE disabled connection parameters were removed");
2377}
2378
2379/* This function requires the caller holds hdev->lock */
2380static void hci_conn_params_clear_all(struct hci_dev *hdev)
2381{
2382 struct hci_conn_params *params, *tmp;
2383
2384 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list)
2385 hci_conn_params_free(params);
2386
2387 BT_DBG("All LE connection parameters were removed");
2388}
2389
2390/* Copy the Identity Address of the controller.
2391 *
2392 * If the controller has a public BD_ADDR, then by default use that one.
2393 * If this is a LE only controller without a public address, default to
2394 * the static random address.
2395 *
2396 * For debugging purposes it is possible to force controllers with a
2397 * public address to use the static random address instead.
2398 *
2399 * In case BR/EDR has been disabled on a dual-mode controller and
2400 * userspace has configured a static address, then that address
2401 * becomes the identity address instead of the public BR/EDR address.
2402 */
2403void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
2404 u8 *bdaddr_type)
2405{
2406 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
2407 !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
2408 (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
2409 bacmp(&hdev->static_addr, BDADDR_ANY))) {
2410 bacpy(bdaddr, &hdev->static_addr);
2411 *bdaddr_type = ADDR_LE_DEV_RANDOM;
2412 } else {
2413 bacpy(bdaddr, &hdev->bdaddr);
2414 *bdaddr_type = ADDR_LE_DEV_PUBLIC;
2415 }
2416}
2417
2418static void hci_clear_wake_reason(struct hci_dev *hdev)
2419{
2420 hci_dev_lock(hdev);
2421
2422 hdev->wake_reason = 0;
2423 bacpy(&hdev->wake_addr, BDADDR_ANY);
2424 hdev->wake_addr_type = 0;
2425
2426 hci_dev_unlock(hdev);
2427}
2428
2429static int hci_suspend_notifier(struct notifier_block *nb, unsigned long action,
2430 void *data)
2431{
2432 struct hci_dev *hdev =
2433 container_of(nb, struct hci_dev, suspend_notifier);
2434 int ret = 0;
2435
2436 /* Userspace has full control of this device. Do nothing. */
2437 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
2438 return NOTIFY_DONE;
2439
2440 /* To avoid a potential race with hci_unregister_dev. */
2441 hci_dev_hold(hdev);
2442
2443 if (action == PM_SUSPEND_PREPARE)
2444 ret = hci_suspend_dev(hdev);
2445 else if (action == PM_POST_SUSPEND)
2446 ret = hci_resume_dev(hdev);
2447
2448 if (ret)
2449 bt_dev_err(hdev, "Suspend notifier action (%lu) failed: %d",
2450 action, ret);
2451
2452 hci_dev_put(hdev);
2453 return NOTIFY_DONE;
2454}
2455
2456/* Alloc HCI device */
2457struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
2458{
2459 struct hci_dev *hdev;
2460 unsigned int alloc_size;
2461
2462 alloc_size = sizeof(*hdev);
2463 if (sizeof_priv) {
2464 /* Fixme: May need ALIGN-ment? */
2465 alloc_size += sizeof_priv;
2466 }
2467
2468 hdev = kzalloc(alloc_size, GFP_KERNEL);
2469 if (!hdev)
2470 return NULL;
2471
2472 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
2473 hdev->esco_type = (ESCO_HV1);
2474 hdev->link_mode = (HCI_LM_ACCEPT);
2475 hdev->num_iac = 0x01; /* One IAC support is mandatory */
2476 hdev->io_capability = 0x03; /* No Input No Output */
2477 hdev->manufacturer = 0xffff; /* Default to internal use */
2478 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
2479 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
2480 hdev->adv_instance_cnt = 0;
2481 hdev->cur_adv_instance = 0x00;
2482 hdev->adv_instance_timeout = 0;
2483
2484 hdev->advmon_allowlist_duration = 300;
2485 hdev->advmon_no_filter_duration = 500;
2486 hdev->enable_advmon_interleave_scan = 0x00; /* Default to disable */
2487
2488 hdev->sniff_max_interval = 800;
2489 hdev->sniff_min_interval = 80;
2490
2491 hdev->le_adv_channel_map = 0x07;
2492 hdev->le_adv_min_interval = 0x0800;
2493 hdev->le_adv_max_interval = 0x0800;
2494 hdev->le_scan_interval = 0x0060;
2495 hdev->le_scan_window = 0x0030;
2496 hdev->le_scan_int_suspend = 0x0400;
2497 hdev->le_scan_window_suspend = 0x0012;
2498 hdev->le_scan_int_discovery = DISCOV_LE_SCAN_INT;
2499 hdev->le_scan_window_discovery = DISCOV_LE_SCAN_WIN;
2500 hdev->le_scan_int_adv_monitor = 0x0060;
2501 hdev->le_scan_window_adv_monitor = 0x0030;
2502 hdev->le_scan_int_connect = 0x0060;
2503 hdev->le_scan_window_connect = 0x0060;
2504 hdev->le_conn_min_interval = 0x0018;
2505 hdev->le_conn_max_interval = 0x0028;
2506 hdev->le_conn_latency = 0x0000;
2507 hdev->le_supv_timeout = 0x002a;
2508 hdev->le_def_tx_len = 0x001b;
2509 hdev->le_def_tx_time = 0x0148;
2510 hdev->le_max_tx_len = 0x001b;
2511 hdev->le_max_tx_time = 0x0148;
2512 hdev->le_max_rx_len = 0x001b;
2513 hdev->le_max_rx_time = 0x0148;
2514 hdev->le_max_key_size = SMP_MAX_ENC_KEY_SIZE;
2515 hdev->le_min_key_size = SMP_MIN_ENC_KEY_SIZE;
2516 hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M;
2517 hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M;
2518 hdev->le_num_of_adv_sets = HCI_MAX_ADV_INSTANCES;
2519 hdev->def_multi_adv_rotation_duration = HCI_DEFAULT_ADV_DURATION;
2520 hdev->def_le_autoconnect_timeout = HCI_LE_AUTOCONN_TIMEOUT;
2521 hdev->min_le_tx_power = HCI_TX_POWER_INVALID;
2522 hdev->max_le_tx_power = HCI_TX_POWER_INVALID;
2523
2524 hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT;
2525 hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT;
2526 hdev->conn_info_min_age = DEFAULT_CONN_INFO_MIN_AGE;
2527 hdev->conn_info_max_age = DEFAULT_CONN_INFO_MAX_AGE;
2528 hdev->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;
2529 hdev->min_enc_key_size = HCI_MIN_ENC_KEY_SIZE;
2530
2531 /* default 1.28 sec page scan */
2532 hdev->def_page_scan_type = PAGE_SCAN_TYPE_STANDARD;
2533 hdev->def_page_scan_int = 0x0800;
2534 hdev->def_page_scan_window = 0x0012;
2535
2536 mutex_init(&hdev->lock);
2537 mutex_init(&hdev->req_lock);
2538
2539 ida_init(&hdev->unset_handle_ida);
2540
2541 INIT_LIST_HEAD(&hdev->mesh_pending);
2542 INIT_LIST_HEAD(&hdev->mgmt_pending);
2543 INIT_LIST_HEAD(&hdev->reject_list);
2544 INIT_LIST_HEAD(&hdev->accept_list);
2545 INIT_LIST_HEAD(&hdev->uuids);
2546 INIT_LIST_HEAD(&hdev->link_keys);
2547 INIT_LIST_HEAD(&hdev->long_term_keys);
2548 INIT_LIST_HEAD(&hdev->identity_resolving_keys);
2549 INIT_LIST_HEAD(&hdev->remote_oob_data);
2550 INIT_LIST_HEAD(&hdev->le_accept_list);
2551 INIT_LIST_HEAD(&hdev->le_resolv_list);
2552 INIT_LIST_HEAD(&hdev->le_conn_params);
2553 INIT_LIST_HEAD(&hdev->pend_le_conns);
2554 INIT_LIST_HEAD(&hdev->pend_le_reports);
2555 INIT_LIST_HEAD(&hdev->conn_hash.list);
2556 INIT_LIST_HEAD(&hdev->adv_instances);
2557 INIT_LIST_HEAD(&hdev->blocked_keys);
2558 INIT_LIST_HEAD(&hdev->monitored_devices);
2559
2560 INIT_LIST_HEAD(&hdev->local_codecs);
2561 INIT_WORK(&hdev->rx_work, hci_rx_work);
2562 INIT_WORK(&hdev->cmd_work, hci_cmd_work);
2563 INIT_WORK(&hdev->tx_work, hci_tx_work);
2564 INIT_WORK(&hdev->power_on, hci_power_on);
2565 INIT_WORK(&hdev->error_reset, hci_error_reset);
2566
2567 hci_cmd_sync_init(hdev);
2568
2569 INIT_DELAYED_WORK(&hdev->power_off, hci_power_off);
2570
2571 skb_queue_head_init(&hdev->rx_q);
2572 skb_queue_head_init(&hdev->cmd_q);
2573 skb_queue_head_init(&hdev->raw_q);
2574
2575 init_waitqueue_head(&hdev->req_wait_q);
2576
2577 INIT_DELAYED_WORK(&hdev->cmd_timer, hci_cmd_timeout);
2578 INIT_DELAYED_WORK(&hdev->ncmd_timer, hci_ncmd_timeout);
2579
2580 hci_devcd_setup(hdev);
2581 hci_request_setup(hdev);
2582
2583 hci_init_sysfs(hdev);
2584 discovery_init(hdev);
2585
2586 return hdev;
2587}
2588EXPORT_SYMBOL(hci_alloc_dev_priv);
2589
2590/* Free HCI device */
2591void hci_free_dev(struct hci_dev *hdev)
2592{
2593 /* will free via device release */
2594 put_device(&hdev->dev);
2595}
2596EXPORT_SYMBOL(hci_free_dev);
2597
2598/* Register HCI device */
2599int hci_register_dev(struct hci_dev *hdev)
2600{
2601 int id, error;
2602
2603 if (!hdev->open || !hdev->close || !hdev->send)
2604 return -EINVAL;
2605
2606 /* Do not allow HCI_AMP devices to register at index 0,
2607 * so the index can be used as the AMP controller ID.
2608 */
2609 switch (hdev->dev_type) {
2610 case HCI_PRIMARY:
2611 id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL);
2612 break;
2613 case HCI_AMP:
2614 id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL);
2615 break;
2616 default:
2617 return -EINVAL;
2618 }
2619
2620 if (id < 0)
2621 return id;
2622
2623 error = dev_set_name(&hdev->dev, "hci%u", id);
2624 if (error)
2625 return error;
2626
2627 hdev->name = dev_name(&hdev->dev);
2628 hdev->id = id;
2629
2630 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
2631
2632 hdev->workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI, hdev->name);
2633 if (!hdev->workqueue) {
2634 error = -ENOMEM;
2635 goto err;
2636 }
2637
2638 hdev->req_workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI,
2639 hdev->name);
2640 if (!hdev->req_workqueue) {
2641 destroy_workqueue(hdev->workqueue);
2642 error = -ENOMEM;
2643 goto err;
2644 }
2645
2646 if (!IS_ERR_OR_NULL(bt_debugfs))
2647 hdev->debugfs = debugfs_create_dir(hdev->name, bt_debugfs);
2648
2649 error = device_add(&hdev->dev);
2650 if (error < 0)
2651 goto err_wqueue;
2652
2653 hci_leds_init(hdev);
2654
2655 hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
2656 RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops,
2657 hdev);
2658 if (hdev->rfkill) {
2659 if (rfkill_register(hdev->rfkill) < 0) {
2660 rfkill_destroy(hdev->rfkill);
2661 hdev->rfkill = NULL;
2662 }
2663 }
2664
2665 if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
2666 hci_dev_set_flag(hdev, HCI_RFKILLED);
2667
2668 hci_dev_set_flag(hdev, HCI_SETUP);
2669 hci_dev_set_flag(hdev, HCI_AUTO_OFF);
2670
2671 if (hdev->dev_type == HCI_PRIMARY) {
2672 /* Assume BR/EDR support until proven otherwise (such as
2673 * through reading supported features during init.
2674 */
2675 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
2676 }
2677
2678 write_lock(&hci_dev_list_lock);
2679 list_add(&hdev->list, &hci_dev_list);
2680 write_unlock(&hci_dev_list_lock);
2681
2682 /* Devices that are marked for raw-only usage are unconfigured
2683 * and should not be included in normal operation.
2684 */
2685 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
2686 hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
2687
2688 /* Mark Remote Wakeup connection flag as supported if driver has wakeup
2689 * callback.
2690 */
2691 if (hdev->wakeup)
2692 hdev->conn_flags |= HCI_CONN_FLAG_REMOTE_WAKEUP;
2693
2694 hci_sock_dev_event(hdev, HCI_DEV_REG);
2695 hci_dev_hold(hdev);
2696
2697 error = hci_register_suspend_notifier(hdev);
2698 if (error)
2699 BT_WARN("register suspend notifier failed error:%d\n", error);
2700
2701 queue_work(hdev->req_workqueue, &hdev->power_on);
2702
2703 idr_init(&hdev->adv_monitors_idr);
2704 msft_register(hdev);
2705
2706 return id;
2707
2708err_wqueue:
2709 debugfs_remove_recursive(hdev->debugfs);
2710 destroy_workqueue(hdev->workqueue);
2711 destroy_workqueue(hdev->req_workqueue);
2712err:
2713 ida_simple_remove(&hci_index_ida, hdev->id);
2714
2715 return error;
2716}
2717EXPORT_SYMBOL(hci_register_dev);
2718
2719/* Unregister HCI device */
2720void hci_unregister_dev(struct hci_dev *hdev)
2721{
2722 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
2723
2724 mutex_lock(&hdev->unregister_lock);
2725 hci_dev_set_flag(hdev, HCI_UNREGISTER);
2726 mutex_unlock(&hdev->unregister_lock);
2727
2728 write_lock(&hci_dev_list_lock);
2729 list_del(&hdev->list);
2730 write_unlock(&hci_dev_list_lock);
2731
2732 cancel_work_sync(&hdev->power_on);
2733
2734 hci_cmd_sync_clear(hdev);
2735
2736 hci_unregister_suspend_notifier(hdev);
2737
2738 msft_unregister(hdev);
2739
2740 hci_dev_do_close(hdev);
2741
2742 if (!test_bit(HCI_INIT, &hdev->flags) &&
2743 !hci_dev_test_flag(hdev, HCI_SETUP) &&
2744 !hci_dev_test_flag(hdev, HCI_CONFIG)) {
2745 hci_dev_lock(hdev);
2746 mgmt_index_removed(hdev);
2747 hci_dev_unlock(hdev);
2748 }
2749
2750 /* mgmt_index_removed should take care of emptying the
2751 * pending list */
2752 BUG_ON(!list_empty(&hdev->mgmt_pending));
2753
2754 hci_sock_dev_event(hdev, HCI_DEV_UNREG);
2755
2756 if (hdev->rfkill) {
2757 rfkill_unregister(hdev->rfkill);
2758 rfkill_destroy(hdev->rfkill);
2759 }
2760
2761 device_del(&hdev->dev);
2762 /* Actual cleanup is deferred until hci_release_dev(). */
2763 hci_dev_put(hdev);
2764}
2765EXPORT_SYMBOL(hci_unregister_dev);
2766
2767/* Release HCI device */
2768void hci_release_dev(struct hci_dev *hdev)
2769{
2770 debugfs_remove_recursive(hdev->debugfs);
2771 kfree_const(hdev->hw_info);
2772 kfree_const(hdev->fw_info);
2773
2774 destroy_workqueue(hdev->workqueue);
2775 destroy_workqueue(hdev->req_workqueue);
2776
2777 hci_dev_lock(hdev);
2778 hci_bdaddr_list_clear(&hdev->reject_list);
2779 hci_bdaddr_list_clear(&hdev->accept_list);
2780 hci_uuids_clear(hdev);
2781 hci_link_keys_clear(hdev);
2782 hci_smp_ltks_clear(hdev);
2783 hci_smp_irks_clear(hdev);
2784 hci_remote_oob_data_clear(hdev);
2785 hci_adv_instances_clear(hdev);
2786 hci_adv_monitors_clear(hdev);
2787 hci_bdaddr_list_clear(&hdev->le_accept_list);
2788 hci_bdaddr_list_clear(&hdev->le_resolv_list);
2789 hci_conn_params_clear_all(hdev);
2790 hci_discovery_filter_clear(hdev);
2791 hci_blocked_keys_clear(hdev);
2792 hci_codec_list_clear(&hdev->local_codecs);
2793 hci_dev_unlock(hdev);
2794
2795 ida_destroy(&hdev->unset_handle_ida);
2796 ida_simple_remove(&hci_index_ida, hdev->id);
2797 kfree_skb(hdev->sent_cmd);
2798 kfree_skb(hdev->recv_event);
2799 kfree(hdev);
2800}
2801EXPORT_SYMBOL(hci_release_dev);
2802
2803int hci_register_suspend_notifier(struct hci_dev *hdev)
2804{
2805 int ret = 0;
2806
2807 if (!hdev->suspend_notifier.notifier_call &&
2808 !test_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks)) {
2809 hdev->suspend_notifier.notifier_call = hci_suspend_notifier;
2810 ret = register_pm_notifier(&hdev->suspend_notifier);
2811 }
2812
2813 return ret;
2814}
2815
2816int hci_unregister_suspend_notifier(struct hci_dev *hdev)
2817{
2818 int ret = 0;
2819
2820 if (hdev->suspend_notifier.notifier_call) {
2821 ret = unregister_pm_notifier(&hdev->suspend_notifier);
2822 if (!ret)
2823 hdev->suspend_notifier.notifier_call = NULL;
2824 }
2825
2826 return ret;
2827}
2828
2829/* Suspend HCI device */
2830int hci_suspend_dev(struct hci_dev *hdev)
2831{
2832 int ret;
2833
2834 bt_dev_dbg(hdev, "");
2835
2836 /* Suspend should only act on when powered. */
2837 if (!hdev_is_powered(hdev) ||
2838 hci_dev_test_flag(hdev, HCI_UNREGISTER))
2839 return 0;
2840
2841 /* If powering down don't attempt to suspend */
2842 if (mgmt_powering_down(hdev))
2843 return 0;
2844
2845 /* Cancel potentially blocking sync operation before suspend */
2846 __hci_cmd_sync_cancel(hdev, -EHOSTDOWN);
2847
2848 hci_req_sync_lock(hdev);
2849 ret = hci_suspend_sync(hdev);
2850 hci_req_sync_unlock(hdev);
2851
2852 hci_clear_wake_reason(hdev);
2853 mgmt_suspending(hdev, hdev->suspend_state);
2854
2855 hci_sock_dev_event(hdev, HCI_DEV_SUSPEND);
2856 return ret;
2857}
2858EXPORT_SYMBOL(hci_suspend_dev);
2859
2860/* Resume HCI device */
2861int hci_resume_dev(struct hci_dev *hdev)
2862{
2863 int ret;
2864
2865 bt_dev_dbg(hdev, "");
2866
2867 /* Resume should only act on when powered. */
2868 if (!hdev_is_powered(hdev) ||
2869 hci_dev_test_flag(hdev, HCI_UNREGISTER))
2870 return 0;
2871
2872 /* If powering down don't attempt to resume */
2873 if (mgmt_powering_down(hdev))
2874 return 0;
2875
2876 hci_req_sync_lock(hdev);
2877 ret = hci_resume_sync(hdev);
2878 hci_req_sync_unlock(hdev);
2879
2880 mgmt_resuming(hdev, hdev->wake_reason, &hdev->wake_addr,
2881 hdev->wake_addr_type);
2882
2883 hci_sock_dev_event(hdev, HCI_DEV_RESUME);
2884 return ret;
2885}
2886EXPORT_SYMBOL(hci_resume_dev);
2887
2888/* Reset HCI device */
2889int hci_reset_dev(struct hci_dev *hdev)
2890{
2891 static const u8 hw_err[] = { HCI_EV_HARDWARE_ERROR, 0x01, 0x00 };
2892 struct sk_buff *skb;
2893
2894 skb = bt_skb_alloc(3, GFP_ATOMIC);
2895 if (!skb)
2896 return -ENOMEM;
2897
2898 hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
2899 skb_put_data(skb, hw_err, 3);
2900
2901 bt_dev_err(hdev, "Injecting HCI hardware error event");
2902
2903 /* Send Hardware Error to upper stack */
2904 return hci_recv_frame(hdev, skb);
2905}
2906EXPORT_SYMBOL(hci_reset_dev);
2907
2908/* Receive frame from HCI drivers */
2909int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb)
2910{
2911 if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
2912 && !test_bit(HCI_INIT, &hdev->flags))) {
2913 kfree_skb(skb);
2914 return -ENXIO;
2915 }
2916
2917 switch (hci_skb_pkt_type(skb)) {
2918 case HCI_EVENT_PKT:
2919 break;
2920 case HCI_ACLDATA_PKT:
2921 /* Detect if ISO packet has been sent as ACL */
2922 if (hci_conn_num(hdev, ISO_LINK)) {
2923 __u16 handle = __le16_to_cpu(hci_acl_hdr(skb)->handle);
2924 __u8 type;
2925
2926 type = hci_conn_lookup_type(hdev, hci_handle(handle));
2927 if (type == ISO_LINK)
2928 hci_skb_pkt_type(skb) = HCI_ISODATA_PKT;
2929 }
2930 break;
2931 case HCI_SCODATA_PKT:
2932 break;
2933 case HCI_ISODATA_PKT:
2934 break;
2935 default:
2936 kfree_skb(skb);
2937 return -EINVAL;
2938 }
2939
2940 /* Incoming skb */
2941 bt_cb(skb)->incoming = 1;
2942
2943 /* Time stamp */
2944 __net_timestamp(skb);
2945
2946 skb_queue_tail(&hdev->rx_q, skb);
2947 queue_work(hdev->workqueue, &hdev->rx_work);
2948
2949 return 0;
2950}
2951EXPORT_SYMBOL(hci_recv_frame);
2952
2953/* Receive diagnostic message from HCI drivers */
2954int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb)
2955{
2956 /* Mark as diagnostic packet */
2957 hci_skb_pkt_type(skb) = HCI_DIAG_PKT;
2958
2959 /* Time stamp */
2960 __net_timestamp(skb);
2961
2962 skb_queue_tail(&hdev->rx_q, skb);
2963 queue_work(hdev->workqueue, &hdev->rx_work);
2964
2965 return 0;
2966}
2967EXPORT_SYMBOL(hci_recv_diag);
2968
2969void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...)
2970{
2971 va_list vargs;
2972
2973 va_start(vargs, fmt);
2974 kfree_const(hdev->hw_info);
2975 hdev->hw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs);
2976 va_end(vargs);
2977}
2978EXPORT_SYMBOL(hci_set_hw_info);
2979
2980void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...)
2981{
2982 va_list vargs;
2983
2984 va_start(vargs, fmt);
2985 kfree_const(hdev->fw_info);
2986 hdev->fw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs);
2987 va_end(vargs);
2988}
2989EXPORT_SYMBOL(hci_set_fw_info);
2990
2991/* ---- Interface to upper protocols ---- */
2992
2993int hci_register_cb(struct hci_cb *cb)
2994{
2995 BT_DBG("%p name %s", cb, cb->name);
2996
2997 mutex_lock(&hci_cb_list_lock);
2998 list_add_tail(&cb->list, &hci_cb_list);
2999 mutex_unlock(&hci_cb_list_lock);
3000
3001 return 0;
3002}
3003EXPORT_SYMBOL(hci_register_cb);
3004
3005int hci_unregister_cb(struct hci_cb *cb)
3006{
3007 BT_DBG("%p name %s", cb, cb->name);
3008
3009 mutex_lock(&hci_cb_list_lock);
3010 list_del(&cb->list);
3011 mutex_unlock(&hci_cb_list_lock);
3012
3013 return 0;
3014}
3015EXPORT_SYMBOL(hci_unregister_cb);
3016
3017static int hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
3018{
3019 int err;
3020
3021 BT_DBG("%s type %d len %d", hdev->name, hci_skb_pkt_type(skb),
3022 skb->len);
3023
3024 /* Time stamp */
3025 __net_timestamp(skb);
3026
3027 /* Send copy to monitor */
3028 hci_send_to_monitor(hdev, skb);
3029
3030 if (atomic_read(&hdev->promisc)) {
3031 /* Send copy to the sockets */
3032 hci_send_to_sock(hdev, skb);
3033 }
3034
3035 /* Get rid of skb owner, prior to sending to the driver. */
3036 skb_orphan(skb);
3037
3038 if (!test_bit(HCI_RUNNING, &hdev->flags)) {
3039 kfree_skb(skb);
3040 return -EINVAL;
3041 }
3042
3043 err = hdev->send(hdev, skb);
3044 if (err < 0) {
3045 bt_dev_err(hdev, "sending frame failed (%d)", err);
3046 kfree_skb(skb);
3047 return err;
3048 }
3049
3050 return 0;
3051}
3052
3053/* Send HCI command */
3054int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
3055 const void *param)
3056{
3057 struct sk_buff *skb;
3058
3059 BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
3060
3061 skb = hci_prepare_cmd(hdev, opcode, plen, param);
3062 if (!skb) {
3063 bt_dev_err(hdev, "no memory for command");
3064 return -ENOMEM;
3065 }
3066
3067 /* Stand-alone HCI commands must be flagged as
3068 * single-command requests.
3069 */
3070 bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
3071
3072 skb_queue_tail(&hdev->cmd_q, skb);
3073 queue_work(hdev->workqueue, &hdev->cmd_work);
3074
3075 return 0;
3076}
3077
3078int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
3079 const void *param)
3080{
3081 struct sk_buff *skb;
3082
3083 if (hci_opcode_ogf(opcode) != 0x3f) {
3084 /* A controller receiving a command shall respond with either
3085 * a Command Status Event or a Command Complete Event.
3086 * Therefore, all standard HCI commands must be sent via the
3087 * standard API, using hci_send_cmd or hci_cmd_sync helpers.
3088 * Some vendors do not comply with this rule for vendor-specific
3089 * commands and do not return any event. We want to support
3090 * unresponded commands for such cases only.
3091 */
3092 bt_dev_err(hdev, "unresponded command not supported");
3093 return -EINVAL;
3094 }
3095
3096 skb = hci_prepare_cmd(hdev, opcode, plen, param);
3097 if (!skb) {
3098 bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)",
3099 opcode);
3100 return -ENOMEM;
3101 }
3102
3103 hci_send_frame(hdev, skb);
3104
3105 return 0;
3106}
3107EXPORT_SYMBOL(__hci_cmd_send);
3108
3109/* Get data from the previously sent command */
3110void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
3111{
3112 struct hci_command_hdr *hdr;
3113
3114 if (!hdev->sent_cmd)
3115 return NULL;
3116
3117 hdr = (void *) hdev->sent_cmd->data;
3118
3119 if (hdr->opcode != cpu_to_le16(opcode))
3120 return NULL;
3121
3122 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
3123
3124 return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
3125}
3126
3127/* Get data from last received event */
3128void *hci_recv_event_data(struct hci_dev *hdev, __u8 event)
3129{
3130 struct hci_event_hdr *hdr;
3131 int offset;
3132
3133 if (!hdev->recv_event)
3134 return NULL;
3135
3136 hdr = (void *)hdev->recv_event->data;
3137 offset = sizeof(*hdr);
3138
3139 if (hdr->evt != event) {
3140 /* In case of LE metaevent check the subevent match */
3141 if (hdr->evt == HCI_EV_LE_META) {
3142 struct hci_ev_le_meta *ev;
3143
3144 ev = (void *)hdev->recv_event->data + offset;
3145 offset += sizeof(*ev);
3146 if (ev->subevent == event)
3147 goto found;
3148 }
3149 return NULL;
3150 }
3151
3152found:
3153 bt_dev_dbg(hdev, "event 0x%2.2x", event);
3154
3155 return hdev->recv_event->data + offset;
3156}
3157
3158/* Send ACL data */
3159static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
3160{
3161 struct hci_acl_hdr *hdr;
3162 int len = skb->len;
3163
3164 skb_push(skb, HCI_ACL_HDR_SIZE);
3165 skb_reset_transport_header(skb);
3166 hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
3167 hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
3168 hdr->dlen = cpu_to_le16(len);
3169}
3170
3171static void hci_queue_acl(struct hci_chan *chan, struct sk_buff_head *queue,
3172 struct sk_buff *skb, __u16 flags)
3173{
3174 struct hci_conn *conn = chan->conn;
3175 struct hci_dev *hdev = conn->hdev;
3176 struct sk_buff *list;
3177
3178 skb->len = skb_headlen(skb);
3179 skb->data_len = 0;
3180
3181 hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
3182
3183 switch (hdev->dev_type) {
3184 case HCI_PRIMARY:
3185 hci_add_acl_hdr(skb, conn->handle, flags);
3186 break;
3187 case HCI_AMP:
3188 hci_add_acl_hdr(skb, chan->handle, flags);
3189 break;
3190 default:
3191 bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
3192 return;
3193 }
3194
3195 list = skb_shinfo(skb)->frag_list;
3196 if (!list) {
3197 /* Non fragmented */
3198 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
3199
3200 skb_queue_tail(queue, skb);
3201 } else {
3202 /* Fragmented */
3203 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3204
3205 skb_shinfo(skb)->frag_list = NULL;
3206
3207 /* Queue all fragments atomically. We need to use spin_lock_bh
3208 * here because of 6LoWPAN links, as there this function is
3209 * called from softirq and using normal spin lock could cause
3210 * deadlocks.
3211 */
3212 spin_lock_bh(&queue->lock);
3213
3214 __skb_queue_tail(queue, skb);
3215
3216 flags &= ~ACL_START;
3217 flags |= ACL_CONT;
3218 do {
3219 skb = list; list = list->next;
3220
3221 hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
3222 hci_add_acl_hdr(skb, conn->handle, flags);
3223
3224 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3225
3226 __skb_queue_tail(queue, skb);
3227 } while (list);
3228
3229 spin_unlock_bh(&queue->lock);
3230 }
3231}
3232
3233void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags)
3234{
3235 struct hci_dev *hdev = chan->conn->hdev;
3236
3237 BT_DBG("%s chan %p flags 0x%4.4x", hdev->name, chan, flags);
3238
3239 hci_queue_acl(chan, &chan->data_q, skb, flags);
3240
3241 queue_work(hdev->workqueue, &hdev->tx_work);
3242}
3243
3244/* Send SCO data */
3245void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
3246{
3247 struct hci_dev *hdev = conn->hdev;
3248 struct hci_sco_hdr hdr;
3249
3250 BT_DBG("%s len %d", hdev->name, skb->len);
3251
3252 hdr.handle = cpu_to_le16(conn->handle);
3253 hdr.dlen = skb->len;
3254
3255 skb_push(skb, HCI_SCO_HDR_SIZE);
3256 skb_reset_transport_header(skb);
3257 memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
3258
3259 hci_skb_pkt_type(skb) = HCI_SCODATA_PKT;
3260
3261 skb_queue_tail(&conn->data_q, skb);
3262 queue_work(hdev->workqueue, &hdev->tx_work);
3263}
3264
3265/* Send ISO data */
3266static void hci_add_iso_hdr(struct sk_buff *skb, __u16 handle, __u8 flags)
3267{
3268 struct hci_iso_hdr *hdr;
3269 int len = skb->len;
3270
3271 skb_push(skb, HCI_ISO_HDR_SIZE);
3272 skb_reset_transport_header(skb);
3273 hdr = (struct hci_iso_hdr *)skb_transport_header(skb);
3274 hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
3275 hdr->dlen = cpu_to_le16(len);
3276}
3277
3278static void hci_queue_iso(struct hci_conn *conn, struct sk_buff_head *queue,
3279 struct sk_buff *skb)
3280{
3281 struct hci_dev *hdev = conn->hdev;
3282 struct sk_buff *list;
3283 __u16 flags;
3284
3285 skb->len = skb_headlen(skb);
3286 skb->data_len = 0;
3287
3288 hci_skb_pkt_type(skb) = HCI_ISODATA_PKT;
3289
3290 list = skb_shinfo(skb)->frag_list;
3291
3292 flags = hci_iso_flags_pack(list ? ISO_START : ISO_SINGLE, 0x00);
3293 hci_add_iso_hdr(skb, conn->handle, flags);
3294
3295 if (!list) {
3296 /* Non fragmented */
3297 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
3298
3299 skb_queue_tail(queue, skb);
3300 } else {
3301 /* Fragmented */
3302 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3303
3304 skb_shinfo(skb)->frag_list = NULL;
3305
3306 __skb_queue_tail(queue, skb);
3307
3308 do {
3309 skb = list; list = list->next;
3310
3311 hci_skb_pkt_type(skb) = HCI_ISODATA_PKT;
3312 flags = hci_iso_flags_pack(list ? ISO_CONT : ISO_END,
3313 0x00);
3314 hci_add_iso_hdr(skb, conn->handle, flags);
3315
3316 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3317
3318 __skb_queue_tail(queue, skb);
3319 } while (list);
3320 }
3321}
3322
3323void hci_send_iso(struct hci_conn *conn, struct sk_buff *skb)
3324{
3325 struct hci_dev *hdev = conn->hdev;
3326
3327 BT_DBG("%s len %d", hdev->name, skb->len);
3328
3329 hci_queue_iso(conn, &conn->data_q, skb);
3330
3331 queue_work(hdev->workqueue, &hdev->tx_work);
3332}
3333
3334/* ---- HCI TX task (outgoing data) ---- */
3335
3336/* HCI Connection scheduler */
3337static inline void hci_quote_sent(struct hci_conn *conn, int num, int *quote)
3338{
3339 struct hci_dev *hdev;
3340 int cnt, q;
3341
3342 if (!conn) {
3343 *quote = 0;
3344 return;
3345 }
3346
3347 hdev = conn->hdev;
3348
3349 switch (conn->type) {
3350 case ACL_LINK:
3351 cnt = hdev->acl_cnt;
3352 break;
3353 case AMP_LINK:
3354 cnt = hdev->block_cnt;
3355 break;
3356 case SCO_LINK:
3357 case ESCO_LINK:
3358 cnt = hdev->sco_cnt;
3359 break;
3360 case LE_LINK:
3361 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
3362 break;
3363 case ISO_LINK:
3364 cnt = hdev->iso_mtu ? hdev->iso_cnt :
3365 hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
3366 break;
3367 default:
3368 cnt = 0;
3369 bt_dev_err(hdev, "unknown link type %d", conn->type);
3370 }
3371
3372 q = cnt / num;
3373 *quote = q ? q : 1;
3374}
3375
3376static struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type,
3377 int *quote)
3378{
3379 struct hci_conn_hash *h = &hdev->conn_hash;
3380 struct hci_conn *conn = NULL, *c;
3381 unsigned int num = 0, min = ~0;
3382
3383 /* We don't have to lock device here. Connections are always
3384 * added and removed with TX task disabled. */
3385
3386 rcu_read_lock();
3387
3388 list_for_each_entry_rcu(c, &h->list, list) {
3389 if (c->type != type || skb_queue_empty(&c->data_q))
3390 continue;
3391
3392 if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
3393 continue;
3394
3395 num++;
3396
3397 if (c->sent < min) {
3398 min = c->sent;
3399 conn = c;
3400 }
3401
3402 if (hci_conn_num(hdev, type) == num)
3403 break;
3404 }
3405
3406 rcu_read_unlock();
3407
3408 hci_quote_sent(conn, num, quote);
3409
3410 BT_DBG("conn %p quote %d", conn, *quote);
3411 return conn;
3412}
3413
3414static void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
3415{
3416 struct hci_conn_hash *h = &hdev->conn_hash;
3417 struct hci_conn *c;
3418
3419 bt_dev_err(hdev, "link tx timeout");
3420
3421 rcu_read_lock();
3422
3423 /* Kill stalled connections */
3424 list_for_each_entry_rcu(c, &h->list, list) {
3425 if (c->type == type && c->sent) {
3426 bt_dev_err(hdev, "killing stalled connection %pMR",
3427 &c->dst);
3428 /* hci_disconnect might sleep, so, we have to release
3429 * the RCU read lock before calling it.
3430 */
3431 rcu_read_unlock();
3432 hci_disconnect(c, HCI_ERROR_REMOTE_USER_TERM);
3433 rcu_read_lock();
3434 }
3435 }
3436
3437 rcu_read_unlock();
3438}
3439
3440static struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type,
3441 int *quote)
3442{
3443 struct hci_conn_hash *h = &hdev->conn_hash;
3444 struct hci_chan *chan = NULL;
3445 unsigned int num = 0, min = ~0, cur_prio = 0;
3446 struct hci_conn *conn;
3447 int conn_num = 0;
3448
3449 BT_DBG("%s", hdev->name);
3450
3451 rcu_read_lock();
3452
3453 list_for_each_entry_rcu(conn, &h->list, list) {
3454 struct hci_chan *tmp;
3455
3456 if (conn->type != type)
3457 continue;
3458
3459 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3460 continue;
3461
3462 conn_num++;
3463
3464 list_for_each_entry_rcu(tmp, &conn->chan_list, list) {
3465 struct sk_buff *skb;
3466
3467 if (skb_queue_empty(&tmp->data_q))
3468 continue;
3469
3470 skb = skb_peek(&tmp->data_q);
3471 if (skb->priority < cur_prio)
3472 continue;
3473
3474 if (skb->priority > cur_prio) {
3475 num = 0;
3476 min = ~0;
3477 cur_prio = skb->priority;
3478 }
3479
3480 num++;
3481
3482 if (conn->sent < min) {
3483 min = conn->sent;
3484 chan = tmp;
3485 }
3486 }
3487
3488 if (hci_conn_num(hdev, type) == conn_num)
3489 break;
3490 }
3491
3492 rcu_read_unlock();
3493
3494 if (!chan)
3495 return NULL;
3496
3497 hci_quote_sent(chan->conn, num, quote);
3498
3499 BT_DBG("chan %p quote %d", chan, *quote);
3500 return chan;
3501}
3502
3503static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
3504{
3505 struct hci_conn_hash *h = &hdev->conn_hash;
3506 struct hci_conn *conn;
3507 int num = 0;
3508
3509 BT_DBG("%s", hdev->name);
3510
3511 rcu_read_lock();
3512
3513 list_for_each_entry_rcu(conn, &h->list, list) {
3514 struct hci_chan *chan;
3515
3516 if (conn->type != type)
3517 continue;
3518
3519 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3520 continue;
3521
3522 num++;
3523
3524 list_for_each_entry_rcu(chan, &conn->chan_list, list) {
3525 struct sk_buff *skb;
3526
3527 if (chan->sent) {
3528 chan->sent = 0;
3529 continue;
3530 }
3531
3532 if (skb_queue_empty(&chan->data_q))
3533 continue;
3534
3535 skb = skb_peek(&chan->data_q);
3536 if (skb->priority >= HCI_PRIO_MAX - 1)
3537 continue;
3538
3539 skb->priority = HCI_PRIO_MAX - 1;
3540
3541 BT_DBG("chan %p skb %p promoted to %d", chan, skb,
3542 skb->priority);
3543 }
3544
3545 if (hci_conn_num(hdev, type) == num)
3546 break;
3547 }
3548
3549 rcu_read_unlock();
3550
3551}
3552
3553static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
3554{
3555 /* Calculate count of blocks used by this packet */
3556 return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
3557}
3558
3559static void __check_timeout(struct hci_dev *hdev, unsigned int cnt, u8 type)
3560{
3561 unsigned long last_tx;
3562
3563 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
3564 return;
3565
3566 switch (type) {
3567 case LE_LINK:
3568 last_tx = hdev->le_last_tx;
3569 break;
3570 default:
3571 last_tx = hdev->acl_last_tx;
3572 break;
3573 }
3574
3575 /* tx timeout must be longer than maximum link supervision timeout
3576 * (40.9 seconds)
3577 */
3578 if (!cnt && time_after(jiffies, last_tx + HCI_ACL_TX_TIMEOUT))
3579 hci_link_tx_to(hdev, type);
3580}
3581
3582/* Schedule SCO */
3583static void hci_sched_sco(struct hci_dev *hdev)
3584{
3585 struct hci_conn *conn;
3586 struct sk_buff *skb;
3587 int quote;
3588
3589 BT_DBG("%s", hdev->name);
3590
3591 if (!hci_conn_num(hdev, SCO_LINK))
3592 return;
3593
3594 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, "e))) {
3595 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
3596 BT_DBG("skb %p len %d", skb, skb->len);
3597 hci_send_frame(hdev, skb);
3598
3599 conn->sent++;
3600 if (conn->sent == ~0)
3601 conn->sent = 0;
3602 }
3603 }
3604}
3605
3606static void hci_sched_esco(struct hci_dev *hdev)
3607{
3608 struct hci_conn *conn;
3609 struct sk_buff *skb;
3610 int quote;
3611
3612 BT_DBG("%s", hdev->name);
3613
3614 if (!hci_conn_num(hdev, ESCO_LINK))
3615 return;
3616
3617 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK,
3618 "e))) {
3619 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
3620 BT_DBG("skb %p len %d", skb, skb->len);
3621 hci_send_frame(hdev, skb);
3622
3623 conn->sent++;
3624 if (conn->sent == ~0)
3625 conn->sent = 0;
3626 }
3627 }
3628}
3629
3630static void hci_sched_acl_pkt(struct hci_dev *hdev)
3631{
3632 unsigned int cnt = hdev->acl_cnt;
3633 struct hci_chan *chan;
3634 struct sk_buff *skb;
3635 int quote;
3636
3637 __check_timeout(hdev, cnt, ACL_LINK);
3638
3639 while (hdev->acl_cnt &&
3640 (chan = hci_chan_sent(hdev, ACL_LINK, "e))) {
3641 u32 priority = (skb_peek(&chan->data_q))->priority;
3642 while (quote-- && (skb = skb_peek(&chan->data_q))) {
3643 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
3644 skb->len, skb->priority);
3645
3646 /* Stop if priority has changed */
3647 if (skb->priority < priority)
3648 break;
3649
3650 skb = skb_dequeue(&chan->data_q);
3651
3652 hci_conn_enter_active_mode(chan->conn,
3653 bt_cb(skb)->force_active);
3654
3655 hci_send_frame(hdev, skb);
3656 hdev->acl_last_tx = jiffies;
3657
3658 hdev->acl_cnt--;
3659 chan->sent++;
3660 chan->conn->sent++;
3661
3662 /* Send pending SCO packets right away */
3663 hci_sched_sco(hdev);
3664 hci_sched_esco(hdev);
3665 }
3666 }
3667
3668 if (cnt != hdev->acl_cnt)
3669 hci_prio_recalculate(hdev, ACL_LINK);
3670}
3671
3672static void hci_sched_acl_blk(struct hci_dev *hdev)
3673{
3674 unsigned int cnt = hdev->block_cnt;
3675 struct hci_chan *chan;
3676 struct sk_buff *skb;
3677 int quote;
3678 u8 type;
3679
3680 BT_DBG("%s", hdev->name);
3681
3682 if (hdev->dev_type == HCI_AMP)
3683 type = AMP_LINK;
3684 else
3685 type = ACL_LINK;
3686
3687 __check_timeout(hdev, cnt, type);
3688
3689 while (hdev->block_cnt > 0 &&
3690 (chan = hci_chan_sent(hdev, type, "e))) {
3691 u32 priority = (skb_peek(&chan->data_q))->priority;
3692 while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
3693 int blocks;
3694
3695 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
3696 skb->len, skb->priority);
3697
3698 /* Stop if priority has changed */
3699 if (skb->priority < priority)
3700 break;
3701
3702 skb = skb_dequeue(&chan->data_q);
3703
3704 blocks = __get_blocks(hdev, skb);
3705 if (blocks > hdev->block_cnt)
3706 return;
3707
3708 hci_conn_enter_active_mode(chan->conn,
3709 bt_cb(skb)->force_active);
3710
3711 hci_send_frame(hdev, skb);
3712 hdev->acl_last_tx = jiffies;
3713
3714 hdev->block_cnt -= blocks;
3715 quote -= blocks;
3716
3717 chan->sent += blocks;
3718 chan->conn->sent += blocks;
3719 }
3720 }
3721
3722 if (cnt != hdev->block_cnt)
3723 hci_prio_recalculate(hdev, type);
3724}
3725
3726static void hci_sched_acl(struct hci_dev *hdev)
3727{
3728 BT_DBG("%s", hdev->name);
3729
3730 /* No ACL link over BR/EDR controller */
3731 if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_PRIMARY)
3732 return;
3733
3734 /* No AMP link over AMP controller */
3735 if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP)
3736 return;
3737
3738 switch (hdev->flow_ctl_mode) {
3739 case HCI_FLOW_CTL_MODE_PACKET_BASED:
3740 hci_sched_acl_pkt(hdev);
3741 break;
3742
3743 case HCI_FLOW_CTL_MODE_BLOCK_BASED:
3744 hci_sched_acl_blk(hdev);
3745 break;
3746 }
3747}
3748
3749static void hci_sched_le(struct hci_dev *hdev)
3750{
3751 struct hci_chan *chan;
3752 struct sk_buff *skb;
3753 int quote, cnt, tmp;
3754
3755 BT_DBG("%s", hdev->name);
3756
3757 if (!hci_conn_num(hdev, LE_LINK))
3758 return;
3759
3760 cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
3761
3762 __check_timeout(hdev, cnt, LE_LINK);
3763
3764 tmp = cnt;
3765 while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, "e))) {
3766 u32 priority = (skb_peek(&chan->data_q))->priority;
3767 while (quote-- && (skb = skb_peek(&chan->data_q))) {
3768 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
3769 skb->len, skb->priority);
3770
3771 /* Stop if priority has changed */
3772 if (skb->priority < priority)
3773 break;
3774
3775 skb = skb_dequeue(&chan->data_q);
3776
3777 hci_send_frame(hdev, skb);
3778 hdev->le_last_tx = jiffies;
3779
3780 cnt--;
3781 chan->sent++;
3782 chan->conn->sent++;
3783
3784 /* Send pending SCO packets right away */
3785 hci_sched_sco(hdev);
3786 hci_sched_esco(hdev);
3787 }
3788 }
3789
3790 if (hdev->le_pkts)
3791 hdev->le_cnt = cnt;
3792 else
3793 hdev->acl_cnt = cnt;
3794
3795 if (cnt != tmp)
3796 hci_prio_recalculate(hdev, LE_LINK);
3797}
3798
3799/* Schedule CIS */
3800static void hci_sched_iso(struct hci_dev *hdev)
3801{
3802 struct hci_conn *conn;
3803 struct sk_buff *skb;
3804 int quote, *cnt;
3805
3806 BT_DBG("%s", hdev->name);
3807
3808 if (!hci_conn_num(hdev, ISO_LINK))
3809 return;
3810
3811 cnt = hdev->iso_pkts ? &hdev->iso_cnt :
3812 hdev->le_pkts ? &hdev->le_cnt : &hdev->acl_cnt;
3813 while (*cnt && (conn = hci_low_sent(hdev, ISO_LINK, "e))) {
3814 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
3815 BT_DBG("skb %p len %d", skb, skb->len);
3816 hci_send_frame(hdev, skb);
3817
3818 conn->sent++;
3819 if (conn->sent == ~0)
3820 conn->sent = 0;
3821 (*cnt)--;
3822 }
3823 }
3824}
3825
3826static void hci_tx_work(struct work_struct *work)
3827{
3828 struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work);
3829 struct sk_buff *skb;
3830
3831 BT_DBG("%s acl %d sco %d le %d iso %d", hdev->name, hdev->acl_cnt,
3832 hdev->sco_cnt, hdev->le_cnt, hdev->iso_cnt);
3833
3834 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
3835 /* Schedule queues and send stuff to HCI driver */
3836 hci_sched_sco(hdev);
3837 hci_sched_esco(hdev);
3838 hci_sched_iso(hdev);
3839 hci_sched_acl(hdev);
3840 hci_sched_le(hdev);
3841 }
3842
3843 /* Send next queued raw (unknown type) packet */
3844 while ((skb = skb_dequeue(&hdev->raw_q)))
3845 hci_send_frame(hdev, skb);
3846}
3847
3848/* ----- HCI RX task (incoming data processing) ----- */
3849
3850/* ACL data packet */
3851static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
3852{
3853 struct hci_acl_hdr *hdr = (void *) skb->data;
3854 struct hci_conn *conn;
3855 __u16 handle, flags;
3856
3857 skb_pull(skb, HCI_ACL_HDR_SIZE);
3858
3859 handle = __le16_to_cpu(hdr->handle);
3860 flags = hci_flags(handle);
3861 handle = hci_handle(handle);
3862
3863 BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len,
3864 handle, flags);
3865
3866 hdev->stat.acl_rx++;
3867
3868 hci_dev_lock(hdev);
3869 conn = hci_conn_hash_lookup_handle(hdev, handle);
3870 hci_dev_unlock(hdev);
3871
3872 if (conn) {
3873 hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
3874
3875 /* Send to upper protocol */
3876 l2cap_recv_acldata(conn, skb, flags);
3877 return;
3878 } else {
3879 bt_dev_err(hdev, "ACL packet for unknown connection handle %d",
3880 handle);
3881 }
3882
3883 kfree_skb(skb);
3884}
3885
3886/* SCO data packet */
3887static void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
3888{
3889 struct hci_sco_hdr *hdr = (void *) skb->data;
3890 struct hci_conn *conn;
3891 __u16 handle, flags;
3892
3893 skb_pull(skb, HCI_SCO_HDR_SIZE);
3894
3895 handle = __le16_to_cpu(hdr->handle);
3896 flags = hci_flags(handle);
3897 handle = hci_handle(handle);
3898
3899 BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len,
3900 handle, flags);
3901
3902 hdev->stat.sco_rx++;
3903
3904 hci_dev_lock(hdev);
3905 conn = hci_conn_hash_lookup_handle(hdev, handle);
3906 hci_dev_unlock(hdev);
3907
3908 if (conn) {
3909 /* Send to upper protocol */
3910 hci_skb_pkt_status(skb) = flags & 0x03;
3911 sco_recv_scodata(conn, skb);
3912 return;
3913 } else {
3914 bt_dev_err_ratelimited(hdev, "SCO packet for unknown connection handle %d",
3915 handle);
3916 }
3917
3918 kfree_skb(skb);
3919}
3920
3921static void hci_isodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
3922{
3923 struct hci_iso_hdr *hdr;
3924 struct hci_conn *conn;
3925 __u16 handle, flags;
3926
3927 hdr = skb_pull_data(skb, sizeof(*hdr));
3928 if (!hdr) {
3929 bt_dev_err(hdev, "ISO packet too small");
3930 goto drop;
3931 }
3932
3933 handle = __le16_to_cpu(hdr->handle);
3934 flags = hci_flags(handle);
3935 handle = hci_handle(handle);
3936
3937 bt_dev_dbg(hdev, "len %d handle 0x%4.4x flags 0x%4.4x", skb->len,
3938 handle, flags);
3939
3940 hci_dev_lock(hdev);
3941 conn = hci_conn_hash_lookup_handle(hdev, handle);
3942 hci_dev_unlock(hdev);
3943
3944 if (!conn) {
3945 bt_dev_err(hdev, "ISO packet for unknown connection handle %d",
3946 handle);
3947 goto drop;
3948 }
3949
3950 /* Send to upper protocol */
3951 iso_recv(conn, skb, flags);
3952 return;
3953
3954drop:
3955 kfree_skb(skb);
3956}
3957
3958static bool hci_req_is_complete(struct hci_dev *hdev)
3959{
3960 struct sk_buff *skb;
3961
3962 skb = skb_peek(&hdev->cmd_q);
3963 if (!skb)
3964 return true;
3965
3966 return (bt_cb(skb)->hci.req_flags & HCI_REQ_START);
3967}
3968
3969static void hci_resend_last(struct hci_dev *hdev)
3970{
3971 struct hci_command_hdr *sent;
3972 struct sk_buff *skb;
3973 u16 opcode;
3974
3975 if (!hdev->sent_cmd)
3976 return;
3977
3978 sent = (void *) hdev->sent_cmd->data;
3979 opcode = __le16_to_cpu(sent->opcode);
3980 if (opcode == HCI_OP_RESET)
3981 return;
3982
3983 skb = skb_clone(hdev->sent_cmd, GFP_KERNEL);
3984 if (!skb)
3985 return;
3986
3987 skb_queue_head(&hdev->cmd_q, skb);
3988 queue_work(hdev->workqueue, &hdev->cmd_work);
3989}
3990
3991void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status,
3992 hci_req_complete_t *req_complete,
3993 hci_req_complete_skb_t *req_complete_skb)
3994{
3995 struct sk_buff *skb;
3996 unsigned long flags;
3997
3998 BT_DBG("opcode 0x%04x status 0x%02x", opcode, status);
3999
4000 /* If the completed command doesn't match the last one that was
4001 * sent we need to do special handling of it.
4002 */
4003 if (!hci_sent_cmd_data(hdev, opcode)) {
4004 /* Some CSR based controllers generate a spontaneous
4005 * reset complete event during init and any pending
4006 * command will never be completed. In such a case we
4007 * need to resend whatever was the last sent
4008 * command.
4009 */
4010 if (test_bit(HCI_INIT, &hdev->flags) && opcode == HCI_OP_RESET)
4011 hci_resend_last(hdev);
4012
4013 return;
4014 }
4015
4016 /* If we reach this point this event matches the last command sent */
4017 hci_dev_clear_flag(hdev, HCI_CMD_PENDING);
4018
4019 /* If the command succeeded and there's still more commands in
4020 * this request the request is not yet complete.
4021 */
4022 if (!status && !hci_req_is_complete(hdev))
4023 return;
4024
4025 /* If this was the last command in a request the complete
4026 * callback would be found in hdev->sent_cmd instead of the
4027 * command queue (hdev->cmd_q).
4028 */
4029 if (bt_cb(hdev->sent_cmd)->hci.req_flags & HCI_REQ_SKB) {
4030 *req_complete_skb = bt_cb(hdev->sent_cmd)->hci.req_complete_skb;
4031 return;
4032 }
4033
4034 if (bt_cb(hdev->sent_cmd)->hci.req_complete) {
4035 *req_complete = bt_cb(hdev->sent_cmd)->hci.req_complete;
4036 return;
4037 }
4038
4039 /* Remove all pending commands belonging to this request */
4040 spin_lock_irqsave(&hdev->cmd_q.lock, flags);
4041 while ((skb = __skb_dequeue(&hdev->cmd_q))) {
4042 if (bt_cb(skb)->hci.req_flags & HCI_REQ_START) {
4043 __skb_queue_head(&hdev->cmd_q, skb);
4044 break;
4045 }
4046
4047 if (bt_cb(skb)->hci.req_flags & HCI_REQ_SKB)
4048 *req_complete_skb = bt_cb(skb)->hci.req_complete_skb;
4049 else
4050 *req_complete = bt_cb(skb)->hci.req_complete;
4051 dev_kfree_skb_irq(skb);
4052 }
4053 spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
4054}
4055
4056static void hci_rx_work(struct work_struct *work)
4057{
4058 struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work);
4059 struct sk_buff *skb;
4060
4061 BT_DBG("%s", hdev->name);
4062
4063 /* The kcov_remote functions used for collecting packet parsing
4064 * coverage information from this background thread and associate
4065 * the coverage with the syscall's thread which originally injected
4066 * the packet. This helps fuzzing the kernel.
4067 */
4068 for (; (skb = skb_dequeue(&hdev->rx_q)); kcov_remote_stop()) {
4069 kcov_remote_start_common(skb_get_kcov_handle(skb));
4070
4071 /* Send copy to monitor */
4072 hci_send_to_monitor(hdev, skb);
4073
4074 if (atomic_read(&hdev->promisc)) {
4075 /* Send copy to the sockets */
4076 hci_send_to_sock(hdev, skb);
4077 }
4078
4079 /* If the device has been opened in HCI_USER_CHANNEL,
4080 * the userspace has exclusive access to device.
4081 * When device is HCI_INIT, we still need to process
4082 * the data packets to the driver in order
4083 * to complete its setup().
4084 */
4085 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
4086 !test_bit(HCI_INIT, &hdev->flags)) {
4087 kfree_skb(skb);
4088 continue;
4089 }
4090
4091 if (test_bit(HCI_INIT, &hdev->flags)) {
4092 /* Don't process data packets in this states. */
4093 switch (hci_skb_pkt_type(skb)) {
4094 case HCI_ACLDATA_PKT:
4095 case HCI_SCODATA_PKT:
4096 case HCI_ISODATA_PKT:
4097 kfree_skb(skb);
4098 continue;
4099 }
4100 }
4101
4102 /* Process frame */
4103 switch (hci_skb_pkt_type(skb)) {
4104 case HCI_EVENT_PKT:
4105 BT_DBG("%s Event packet", hdev->name);
4106 hci_event_packet(hdev, skb);
4107 break;
4108
4109 case HCI_ACLDATA_PKT:
4110 BT_DBG("%s ACL data packet", hdev->name);
4111 hci_acldata_packet(hdev, skb);
4112 break;
4113
4114 case HCI_SCODATA_PKT:
4115 BT_DBG("%s SCO data packet", hdev->name);
4116 hci_scodata_packet(hdev, skb);
4117 break;
4118
4119 case HCI_ISODATA_PKT:
4120 BT_DBG("%s ISO data packet", hdev->name);
4121 hci_isodata_packet(hdev, skb);
4122 break;
4123
4124 default:
4125 kfree_skb(skb);
4126 break;
4127 }
4128 }
4129}
4130
4131static void hci_cmd_work(struct work_struct *work)
4132{
4133 struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work);
4134 struct sk_buff *skb;
4135
4136 BT_DBG("%s cmd_cnt %d cmd queued %d", hdev->name,
4137 atomic_read(&hdev->cmd_cnt), skb_queue_len(&hdev->cmd_q));
4138
4139 /* Send queued commands */
4140 if (atomic_read(&hdev->cmd_cnt)) {
4141 skb = skb_dequeue(&hdev->cmd_q);
4142 if (!skb)
4143 return;
4144
4145 kfree_skb(hdev->sent_cmd);
4146
4147 hdev->sent_cmd = skb_clone(skb, GFP_KERNEL);
4148 if (hdev->sent_cmd) {
4149 int res;
4150 if (hci_req_status_pend(hdev))
4151 hci_dev_set_flag(hdev, HCI_CMD_PENDING);
4152 atomic_dec(&hdev->cmd_cnt);
4153
4154 res = hci_send_frame(hdev, skb);
4155 if (res < 0)
4156 __hci_cmd_sync_cancel(hdev, -res);
4157
4158 rcu_read_lock();
4159 if (test_bit(HCI_RESET, &hdev->flags) ||
4160 hci_dev_test_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE))
4161 cancel_delayed_work(&hdev->cmd_timer);
4162 else
4163 queue_delayed_work(hdev->workqueue, &hdev->cmd_timer,
4164 HCI_CMD_TIMEOUT);
4165 rcu_read_unlock();
4166 } else {
4167 skb_queue_head(&hdev->cmd_q, skb);
4168 queue_work(hdev->workqueue, &hdev->cmd_work);
4169 }
4170 }
4171}
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#include <linux/rfkill.h>
31#include <linux/debugfs.h>
32#include <linux/crypto.h>
33#include <asm/unaligned.h>
34
35#include <net/bluetooth/bluetooth.h>
36#include <net/bluetooth/hci_core.h>
37
38#include "smp.h"
39
40static void hci_rx_work(struct work_struct *work);
41static void hci_cmd_work(struct work_struct *work);
42static void hci_tx_work(struct work_struct *work);
43
44/* HCI device list */
45LIST_HEAD(hci_dev_list);
46DEFINE_RWLOCK(hci_dev_list_lock);
47
48/* HCI callback list */
49LIST_HEAD(hci_cb_list);
50DEFINE_RWLOCK(hci_cb_list_lock);
51
52/* HCI ID Numbering */
53static DEFINE_IDA(hci_index_ida);
54
55/* ---- HCI notifications ---- */
56
57static void hci_notify(struct hci_dev *hdev, int event)
58{
59 hci_sock_dev_event(hdev, event);
60}
61
62/* ---- HCI debugfs entries ---- */
63
64static ssize_t dut_mode_read(struct file *file, char __user *user_buf,
65 size_t count, loff_t *ppos)
66{
67 struct hci_dev *hdev = file->private_data;
68 char buf[3];
69
70 buf[0] = test_bit(HCI_DUT_MODE, &hdev->dev_flags) ? 'Y': 'N';
71 buf[1] = '\n';
72 buf[2] = '\0';
73 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
74}
75
76static ssize_t dut_mode_write(struct file *file, const char __user *user_buf,
77 size_t count, loff_t *ppos)
78{
79 struct hci_dev *hdev = file->private_data;
80 struct sk_buff *skb;
81 char buf[32];
82 size_t buf_size = min(count, (sizeof(buf)-1));
83 bool enable;
84 int err;
85
86 if (!test_bit(HCI_UP, &hdev->flags))
87 return -ENETDOWN;
88
89 if (copy_from_user(buf, user_buf, buf_size))
90 return -EFAULT;
91
92 buf[buf_size] = '\0';
93 if (strtobool(buf, &enable))
94 return -EINVAL;
95
96 if (enable == test_bit(HCI_DUT_MODE, &hdev->dev_flags))
97 return -EALREADY;
98
99 hci_req_lock(hdev);
100 if (enable)
101 skb = __hci_cmd_sync(hdev, HCI_OP_ENABLE_DUT_MODE, 0, NULL,
102 HCI_CMD_TIMEOUT);
103 else
104 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL,
105 HCI_CMD_TIMEOUT);
106 hci_req_unlock(hdev);
107
108 if (IS_ERR(skb))
109 return PTR_ERR(skb);
110
111 err = -bt_to_errno(skb->data[0]);
112 kfree_skb(skb);
113
114 if (err < 0)
115 return err;
116
117 change_bit(HCI_DUT_MODE, &hdev->dev_flags);
118
119 return count;
120}
121
122static const struct file_operations dut_mode_fops = {
123 .open = simple_open,
124 .read = dut_mode_read,
125 .write = dut_mode_write,
126 .llseek = default_llseek,
127};
128
129static int features_show(struct seq_file *f, void *ptr)
130{
131 struct hci_dev *hdev = f->private;
132 u8 p;
133
134 hci_dev_lock(hdev);
135 for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++) {
136 seq_printf(f, "%2u: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x "
137 "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", p,
138 hdev->features[p][0], hdev->features[p][1],
139 hdev->features[p][2], hdev->features[p][3],
140 hdev->features[p][4], hdev->features[p][5],
141 hdev->features[p][6], hdev->features[p][7]);
142 }
143 if (lmp_le_capable(hdev))
144 seq_printf(f, "LE: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x "
145 "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n",
146 hdev->le_features[0], hdev->le_features[1],
147 hdev->le_features[2], hdev->le_features[3],
148 hdev->le_features[4], hdev->le_features[5],
149 hdev->le_features[6], hdev->le_features[7]);
150 hci_dev_unlock(hdev);
151
152 return 0;
153}
154
155static int features_open(struct inode *inode, struct file *file)
156{
157 return single_open(file, features_show, inode->i_private);
158}
159
160static const struct file_operations features_fops = {
161 .open = features_open,
162 .read = seq_read,
163 .llseek = seq_lseek,
164 .release = single_release,
165};
166
167static int blacklist_show(struct seq_file *f, void *p)
168{
169 struct hci_dev *hdev = f->private;
170 struct bdaddr_list *b;
171
172 hci_dev_lock(hdev);
173 list_for_each_entry(b, &hdev->blacklist, list)
174 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
175 hci_dev_unlock(hdev);
176
177 return 0;
178}
179
180static int blacklist_open(struct inode *inode, struct file *file)
181{
182 return single_open(file, blacklist_show, inode->i_private);
183}
184
185static const struct file_operations blacklist_fops = {
186 .open = blacklist_open,
187 .read = seq_read,
188 .llseek = seq_lseek,
189 .release = single_release,
190};
191
192static int uuids_show(struct seq_file *f, void *p)
193{
194 struct hci_dev *hdev = f->private;
195 struct bt_uuid *uuid;
196
197 hci_dev_lock(hdev);
198 list_for_each_entry(uuid, &hdev->uuids, list) {
199 u8 i, val[16];
200
201 /* The Bluetooth UUID values are stored in big endian,
202 * but with reversed byte order. So convert them into
203 * the right order for the %pUb modifier.
204 */
205 for (i = 0; i < 16; i++)
206 val[i] = uuid->uuid[15 - i];
207
208 seq_printf(f, "%pUb\n", val);
209 }
210 hci_dev_unlock(hdev);
211
212 return 0;
213}
214
215static int uuids_open(struct inode *inode, struct file *file)
216{
217 return single_open(file, uuids_show, inode->i_private);
218}
219
220static const struct file_operations uuids_fops = {
221 .open = uuids_open,
222 .read = seq_read,
223 .llseek = seq_lseek,
224 .release = single_release,
225};
226
227static int inquiry_cache_show(struct seq_file *f, void *p)
228{
229 struct hci_dev *hdev = f->private;
230 struct discovery_state *cache = &hdev->discovery;
231 struct inquiry_entry *e;
232
233 hci_dev_lock(hdev);
234
235 list_for_each_entry(e, &cache->all, all) {
236 struct inquiry_data *data = &e->data;
237 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
238 &data->bdaddr,
239 data->pscan_rep_mode, data->pscan_period_mode,
240 data->pscan_mode, data->dev_class[2],
241 data->dev_class[1], data->dev_class[0],
242 __le16_to_cpu(data->clock_offset),
243 data->rssi, data->ssp_mode, e->timestamp);
244 }
245
246 hci_dev_unlock(hdev);
247
248 return 0;
249}
250
251static int inquiry_cache_open(struct inode *inode, struct file *file)
252{
253 return single_open(file, inquiry_cache_show, inode->i_private);
254}
255
256static const struct file_operations inquiry_cache_fops = {
257 .open = inquiry_cache_open,
258 .read = seq_read,
259 .llseek = seq_lseek,
260 .release = single_release,
261};
262
263static int link_keys_show(struct seq_file *f, void *ptr)
264{
265 struct hci_dev *hdev = f->private;
266 struct list_head *p, *n;
267
268 hci_dev_lock(hdev);
269 list_for_each_safe(p, n, &hdev->link_keys) {
270 struct link_key *key = list_entry(p, struct link_key, list);
271 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
272 HCI_LINK_KEY_SIZE, key->val, key->pin_len);
273 }
274 hci_dev_unlock(hdev);
275
276 return 0;
277}
278
279static int link_keys_open(struct inode *inode, struct file *file)
280{
281 return single_open(file, link_keys_show, inode->i_private);
282}
283
284static const struct file_operations link_keys_fops = {
285 .open = link_keys_open,
286 .read = seq_read,
287 .llseek = seq_lseek,
288 .release = single_release,
289};
290
291static int dev_class_show(struct seq_file *f, void *ptr)
292{
293 struct hci_dev *hdev = f->private;
294
295 hci_dev_lock(hdev);
296 seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
297 hdev->dev_class[1], hdev->dev_class[0]);
298 hci_dev_unlock(hdev);
299
300 return 0;
301}
302
303static int dev_class_open(struct inode *inode, struct file *file)
304{
305 return single_open(file, dev_class_show, inode->i_private);
306}
307
308static const struct file_operations dev_class_fops = {
309 .open = dev_class_open,
310 .read = seq_read,
311 .llseek = seq_lseek,
312 .release = single_release,
313};
314
315static int voice_setting_get(void *data, u64 *val)
316{
317 struct hci_dev *hdev = data;
318
319 hci_dev_lock(hdev);
320 *val = hdev->voice_setting;
321 hci_dev_unlock(hdev);
322
323 return 0;
324}
325
326DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
327 NULL, "0x%4.4llx\n");
328
329static int auto_accept_delay_set(void *data, u64 val)
330{
331 struct hci_dev *hdev = data;
332
333 hci_dev_lock(hdev);
334 hdev->auto_accept_delay = val;
335 hci_dev_unlock(hdev);
336
337 return 0;
338}
339
340static int auto_accept_delay_get(void *data, u64 *val)
341{
342 struct hci_dev *hdev = data;
343
344 hci_dev_lock(hdev);
345 *val = hdev->auto_accept_delay;
346 hci_dev_unlock(hdev);
347
348 return 0;
349}
350
351DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
352 auto_accept_delay_set, "%llu\n");
353
354static int ssp_debug_mode_set(void *data, u64 val)
355{
356 struct hci_dev *hdev = data;
357 struct sk_buff *skb;
358 __u8 mode;
359 int err;
360
361 if (val != 0 && val != 1)
362 return -EINVAL;
363
364 if (!test_bit(HCI_UP, &hdev->flags))
365 return -ENETDOWN;
366
367 hci_req_lock(hdev);
368 mode = val;
369 skb = __hci_cmd_sync(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE, sizeof(mode),
370 &mode, HCI_CMD_TIMEOUT);
371 hci_req_unlock(hdev);
372
373 if (IS_ERR(skb))
374 return PTR_ERR(skb);
375
376 err = -bt_to_errno(skb->data[0]);
377 kfree_skb(skb);
378
379 if (err < 0)
380 return err;
381
382 hci_dev_lock(hdev);
383 hdev->ssp_debug_mode = val;
384 hci_dev_unlock(hdev);
385
386 return 0;
387}
388
389static int ssp_debug_mode_get(void *data, u64 *val)
390{
391 struct hci_dev *hdev = data;
392
393 hci_dev_lock(hdev);
394 *val = hdev->ssp_debug_mode;
395 hci_dev_unlock(hdev);
396
397 return 0;
398}
399
400DEFINE_SIMPLE_ATTRIBUTE(ssp_debug_mode_fops, ssp_debug_mode_get,
401 ssp_debug_mode_set, "%llu\n");
402
403static ssize_t force_sc_support_read(struct file *file, char __user *user_buf,
404 size_t count, loff_t *ppos)
405{
406 struct hci_dev *hdev = file->private_data;
407 char buf[3];
408
409 buf[0] = test_bit(HCI_FORCE_SC, &hdev->dev_flags) ? 'Y': 'N';
410 buf[1] = '\n';
411 buf[2] = '\0';
412 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
413}
414
415static ssize_t force_sc_support_write(struct file *file,
416 const char __user *user_buf,
417 size_t count, loff_t *ppos)
418{
419 struct hci_dev *hdev = file->private_data;
420 char buf[32];
421 size_t buf_size = min(count, (sizeof(buf)-1));
422 bool enable;
423
424 if (test_bit(HCI_UP, &hdev->flags))
425 return -EBUSY;
426
427 if (copy_from_user(buf, user_buf, buf_size))
428 return -EFAULT;
429
430 buf[buf_size] = '\0';
431 if (strtobool(buf, &enable))
432 return -EINVAL;
433
434 if (enable == test_bit(HCI_FORCE_SC, &hdev->dev_flags))
435 return -EALREADY;
436
437 change_bit(HCI_FORCE_SC, &hdev->dev_flags);
438
439 return count;
440}
441
442static const struct file_operations force_sc_support_fops = {
443 .open = simple_open,
444 .read = force_sc_support_read,
445 .write = force_sc_support_write,
446 .llseek = default_llseek,
447};
448
449static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
450 size_t count, loff_t *ppos)
451{
452 struct hci_dev *hdev = file->private_data;
453 char buf[3];
454
455 buf[0] = test_bit(HCI_SC_ONLY, &hdev->dev_flags) ? 'Y': 'N';
456 buf[1] = '\n';
457 buf[2] = '\0';
458 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
459}
460
461static const struct file_operations sc_only_mode_fops = {
462 .open = simple_open,
463 .read = sc_only_mode_read,
464 .llseek = default_llseek,
465};
466
467static int idle_timeout_set(void *data, u64 val)
468{
469 struct hci_dev *hdev = data;
470
471 if (val != 0 && (val < 500 || val > 3600000))
472 return -EINVAL;
473
474 hci_dev_lock(hdev);
475 hdev->idle_timeout = val;
476 hci_dev_unlock(hdev);
477
478 return 0;
479}
480
481static int idle_timeout_get(void *data, u64 *val)
482{
483 struct hci_dev *hdev = data;
484
485 hci_dev_lock(hdev);
486 *val = hdev->idle_timeout;
487 hci_dev_unlock(hdev);
488
489 return 0;
490}
491
492DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
493 idle_timeout_set, "%llu\n");
494
495static int rpa_timeout_set(void *data, u64 val)
496{
497 struct hci_dev *hdev = data;
498
499 /* Require the RPA timeout to be at least 30 seconds and at most
500 * 24 hours.
501 */
502 if (val < 30 || val > (60 * 60 * 24))
503 return -EINVAL;
504
505 hci_dev_lock(hdev);
506 hdev->rpa_timeout = val;
507 hci_dev_unlock(hdev);
508
509 return 0;
510}
511
512static int rpa_timeout_get(void *data, u64 *val)
513{
514 struct hci_dev *hdev = data;
515
516 hci_dev_lock(hdev);
517 *val = hdev->rpa_timeout;
518 hci_dev_unlock(hdev);
519
520 return 0;
521}
522
523DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
524 rpa_timeout_set, "%llu\n");
525
526static int sniff_min_interval_set(void *data, u64 val)
527{
528 struct hci_dev *hdev = data;
529
530 if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
531 return -EINVAL;
532
533 hci_dev_lock(hdev);
534 hdev->sniff_min_interval = val;
535 hci_dev_unlock(hdev);
536
537 return 0;
538}
539
540static int sniff_min_interval_get(void *data, u64 *val)
541{
542 struct hci_dev *hdev = data;
543
544 hci_dev_lock(hdev);
545 *val = hdev->sniff_min_interval;
546 hci_dev_unlock(hdev);
547
548 return 0;
549}
550
551DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
552 sniff_min_interval_set, "%llu\n");
553
554static int sniff_max_interval_set(void *data, u64 val)
555{
556 struct hci_dev *hdev = data;
557
558 if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
559 return -EINVAL;
560
561 hci_dev_lock(hdev);
562 hdev->sniff_max_interval = val;
563 hci_dev_unlock(hdev);
564
565 return 0;
566}
567
568static int sniff_max_interval_get(void *data, u64 *val)
569{
570 struct hci_dev *hdev = data;
571
572 hci_dev_lock(hdev);
573 *val = hdev->sniff_max_interval;
574 hci_dev_unlock(hdev);
575
576 return 0;
577}
578
579DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
580 sniff_max_interval_set, "%llu\n");
581
582static int identity_show(struct seq_file *f, void *p)
583{
584 struct hci_dev *hdev = f->private;
585 bdaddr_t addr;
586 u8 addr_type;
587
588 hci_dev_lock(hdev);
589
590 hci_copy_identity_address(hdev, &addr, &addr_type);
591
592 seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
593 16, hdev->irk, &hdev->rpa);
594
595 hci_dev_unlock(hdev);
596
597 return 0;
598}
599
600static int identity_open(struct inode *inode, struct file *file)
601{
602 return single_open(file, identity_show, inode->i_private);
603}
604
605static const struct file_operations identity_fops = {
606 .open = identity_open,
607 .read = seq_read,
608 .llseek = seq_lseek,
609 .release = single_release,
610};
611
612static int random_address_show(struct seq_file *f, void *p)
613{
614 struct hci_dev *hdev = f->private;
615
616 hci_dev_lock(hdev);
617 seq_printf(f, "%pMR\n", &hdev->random_addr);
618 hci_dev_unlock(hdev);
619
620 return 0;
621}
622
623static int random_address_open(struct inode *inode, struct file *file)
624{
625 return single_open(file, random_address_show, inode->i_private);
626}
627
628static const struct file_operations random_address_fops = {
629 .open = random_address_open,
630 .read = seq_read,
631 .llseek = seq_lseek,
632 .release = single_release,
633};
634
635static int static_address_show(struct seq_file *f, void *p)
636{
637 struct hci_dev *hdev = f->private;
638
639 hci_dev_lock(hdev);
640 seq_printf(f, "%pMR\n", &hdev->static_addr);
641 hci_dev_unlock(hdev);
642
643 return 0;
644}
645
646static int static_address_open(struct inode *inode, struct file *file)
647{
648 return single_open(file, static_address_show, inode->i_private);
649}
650
651static const struct file_operations static_address_fops = {
652 .open = static_address_open,
653 .read = seq_read,
654 .llseek = seq_lseek,
655 .release = single_release,
656};
657
658static ssize_t force_static_address_read(struct file *file,
659 char __user *user_buf,
660 size_t count, loff_t *ppos)
661{
662 struct hci_dev *hdev = file->private_data;
663 char buf[3];
664
665 buf[0] = test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dev_flags) ? 'Y': 'N';
666 buf[1] = '\n';
667 buf[2] = '\0';
668 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
669}
670
671static ssize_t force_static_address_write(struct file *file,
672 const char __user *user_buf,
673 size_t count, loff_t *ppos)
674{
675 struct hci_dev *hdev = file->private_data;
676 char buf[32];
677 size_t buf_size = min(count, (sizeof(buf)-1));
678 bool enable;
679
680 if (test_bit(HCI_UP, &hdev->flags))
681 return -EBUSY;
682
683 if (copy_from_user(buf, user_buf, buf_size))
684 return -EFAULT;
685
686 buf[buf_size] = '\0';
687 if (strtobool(buf, &enable))
688 return -EINVAL;
689
690 if (enable == test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dev_flags))
691 return -EALREADY;
692
693 change_bit(HCI_FORCE_STATIC_ADDR, &hdev->dev_flags);
694
695 return count;
696}
697
698static const struct file_operations force_static_address_fops = {
699 .open = simple_open,
700 .read = force_static_address_read,
701 .write = force_static_address_write,
702 .llseek = default_llseek,
703};
704
705static int white_list_show(struct seq_file *f, void *ptr)
706{
707 struct hci_dev *hdev = f->private;
708 struct bdaddr_list *b;
709
710 hci_dev_lock(hdev);
711 list_for_each_entry(b, &hdev->le_white_list, list)
712 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
713 hci_dev_unlock(hdev);
714
715 return 0;
716}
717
718static int white_list_open(struct inode *inode, struct file *file)
719{
720 return single_open(file, white_list_show, inode->i_private);
721}
722
723static const struct file_operations white_list_fops = {
724 .open = white_list_open,
725 .read = seq_read,
726 .llseek = seq_lseek,
727 .release = single_release,
728};
729
730static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
731{
732 struct hci_dev *hdev = f->private;
733 struct list_head *p, *n;
734
735 hci_dev_lock(hdev);
736 list_for_each_safe(p, n, &hdev->identity_resolving_keys) {
737 struct smp_irk *irk = list_entry(p, struct smp_irk, list);
738 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
739 &irk->bdaddr, irk->addr_type,
740 16, irk->val, &irk->rpa);
741 }
742 hci_dev_unlock(hdev);
743
744 return 0;
745}
746
747static int identity_resolving_keys_open(struct inode *inode, struct file *file)
748{
749 return single_open(file, identity_resolving_keys_show,
750 inode->i_private);
751}
752
753static const struct file_operations identity_resolving_keys_fops = {
754 .open = identity_resolving_keys_open,
755 .read = seq_read,
756 .llseek = seq_lseek,
757 .release = single_release,
758};
759
760static int long_term_keys_show(struct seq_file *f, void *ptr)
761{
762 struct hci_dev *hdev = f->private;
763 struct list_head *p, *n;
764
765 hci_dev_lock(hdev);
766 list_for_each_safe(p, n, &hdev->long_term_keys) {
767 struct smp_ltk *ltk = list_entry(p, struct smp_ltk, list);
768 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
769 <k->bdaddr, ltk->bdaddr_type, ltk->authenticated,
770 ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
771 __le64_to_cpu(ltk->rand), 16, ltk->val);
772 }
773 hci_dev_unlock(hdev);
774
775 return 0;
776}
777
778static int long_term_keys_open(struct inode *inode, struct file *file)
779{
780 return single_open(file, long_term_keys_show, inode->i_private);
781}
782
783static const struct file_operations long_term_keys_fops = {
784 .open = long_term_keys_open,
785 .read = seq_read,
786 .llseek = seq_lseek,
787 .release = single_release,
788};
789
790static int conn_min_interval_set(void *data, u64 val)
791{
792 struct hci_dev *hdev = data;
793
794 if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
795 return -EINVAL;
796
797 hci_dev_lock(hdev);
798 hdev->le_conn_min_interval = val;
799 hci_dev_unlock(hdev);
800
801 return 0;
802}
803
804static int conn_min_interval_get(void *data, u64 *val)
805{
806 struct hci_dev *hdev = data;
807
808 hci_dev_lock(hdev);
809 *val = hdev->le_conn_min_interval;
810 hci_dev_unlock(hdev);
811
812 return 0;
813}
814
815DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
816 conn_min_interval_set, "%llu\n");
817
818static int conn_max_interval_set(void *data, u64 val)
819{
820 struct hci_dev *hdev = data;
821
822 if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
823 return -EINVAL;
824
825 hci_dev_lock(hdev);
826 hdev->le_conn_max_interval = val;
827 hci_dev_unlock(hdev);
828
829 return 0;
830}
831
832static int conn_max_interval_get(void *data, u64 *val)
833{
834 struct hci_dev *hdev = data;
835
836 hci_dev_lock(hdev);
837 *val = hdev->le_conn_max_interval;
838 hci_dev_unlock(hdev);
839
840 return 0;
841}
842
843DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
844 conn_max_interval_set, "%llu\n");
845
846static int adv_channel_map_set(void *data, u64 val)
847{
848 struct hci_dev *hdev = data;
849
850 if (val < 0x01 || val > 0x07)
851 return -EINVAL;
852
853 hci_dev_lock(hdev);
854 hdev->le_adv_channel_map = val;
855 hci_dev_unlock(hdev);
856
857 return 0;
858}
859
860static int adv_channel_map_get(void *data, u64 *val)
861{
862 struct hci_dev *hdev = data;
863
864 hci_dev_lock(hdev);
865 *val = hdev->le_adv_channel_map;
866 hci_dev_unlock(hdev);
867
868 return 0;
869}
870
871DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
872 adv_channel_map_set, "%llu\n");
873
874static ssize_t lowpan_read(struct file *file, char __user *user_buf,
875 size_t count, loff_t *ppos)
876{
877 struct hci_dev *hdev = file->private_data;
878 char buf[3];
879
880 buf[0] = test_bit(HCI_6LOWPAN_ENABLED, &hdev->dev_flags) ? 'Y' : 'N';
881 buf[1] = '\n';
882 buf[2] = '\0';
883 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
884}
885
886static ssize_t lowpan_write(struct file *fp, const char __user *user_buffer,
887 size_t count, loff_t *position)
888{
889 struct hci_dev *hdev = fp->private_data;
890 bool enable;
891 char buf[32];
892 size_t buf_size = min(count, (sizeof(buf)-1));
893
894 if (copy_from_user(buf, user_buffer, buf_size))
895 return -EFAULT;
896
897 buf[buf_size] = '\0';
898
899 if (strtobool(buf, &enable) < 0)
900 return -EINVAL;
901
902 if (enable == test_bit(HCI_6LOWPAN_ENABLED, &hdev->dev_flags))
903 return -EALREADY;
904
905 change_bit(HCI_6LOWPAN_ENABLED, &hdev->dev_flags);
906
907 return count;
908}
909
910static const struct file_operations lowpan_debugfs_fops = {
911 .open = simple_open,
912 .read = lowpan_read,
913 .write = lowpan_write,
914 .llseek = default_llseek,
915};
916
917static int le_auto_conn_show(struct seq_file *sf, void *ptr)
918{
919 struct hci_dev *hdev = sf->private;
920 struct hci_conn_params *p;
921
922 hci_dev_lock(hdev);
923
924 list_for_each_entry(p, &hdev->le_conn_params, list) {
925 seq_printf(sf, "%pMR %u %u\n", &p->addr, p->addr_type,
926 p->auto_connect);
927 }
928
929 hci_dev_unlock(hdev);
930
931 return 0;
932}
933
934static int le_auto_conn_open(struct inode *inode, struct file *file)
935{
936 return single_open(file, le_auto_conn_show, inode->i_private);
937}
938
939static ssize_t le_auto_conn_write(struct file *file, const char __user *data,
940 size_t count, loff_t *offset)
941{
942 struct seq_file *sf = file->private_data;
943 struct hci_dev *hdev = sf->private;
944 u8 auto_connect = 0;
945 bdaddr_t addr;
946 u8 addr_type;
947 char *buf;
948 int err = 0;
949 int n;
950
951 /* Don't allow partial write */
952 if (*offset != 0)
953 return -EINVAL;
954
955 if (count < 3)
956 return -EINVAL;
957
958 buf = kzalloc(count, GFP_KERNEL);
959 if (!buf)
960 return -ENOMEM;
961
962 if (copy_from_user(buf, data, count)) {
963 err = -EFAULT;
964 goto done;
965 }
966
967 if (memcmp(buf, "add", 3) == 0) {
968 n = sscanf(&buf[4], "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx %hhu %hhu",
969 &addr.b[5], &addr.b[4], &addr.b[3], &addr.b[2],
970 &addr.b[1], &addr.b[0], &addr_type,
971 &auto_connect);
972
973 if (n < 7) {
974 err = -EINVAL;
975 goto done;
976 }
977
978 hci_dev_lock(hdev);
979 err = hci_conn_params_add(hdev, &addr, addr_type, auto_connect,
980 hdev->le_conn_min_interval,
981 hdev->le_conn_max_interval);
982 hci_dev_unlock(hdev);
983
984 if (err)
985 goto done;
986 } else if (memcmp(buf, "del", 3) == 0) {
987 n = sscanf(&buf[4], "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx %hhu",
988 &addr.b[5], &addr.b[4], &addr.b[3], &addr.b[2],
989 &addr.b[1], &addr.b[0], &addr_type);
990
991 if (n < 7) {
992 err = -EINVAL;
993 goto done;
994 }
995
996 hci_dev_lock(hdev);
997 hci_conn_params_del(hdev, &addr, addr_type);
998 hci_dev_unlock(hdev);
999 } else if (memcmp(buf, "clr", 3) == 0) {
1000 hci_dev_lock(hdev);
1001 hci_conn_params_clear(hdev);
1002 hci_pend_le_conns_clear(hdev);
1003 hci_update_background_scan(hdev);
1004 hci_dev_unlock(hdev);
1005 } else {
1006 err = -EINVAL;
1007 }
1008
1009done:
1010 kfree(buf);
1011
1012 if (err)
1013 return err;
1014 else
1015 return count;
1016}
1017
1018static const struct file_operations le_auto_conn_fops = {
1019 .open = le_auto_conn_open,
1020 .read = seq_read,
1021 .write = le_auto_conn_write,
1022 .llseek = seq_lseek,
1023 .release = single_release,
1024};
1025
1026/* ---- HCI requests ---- */
1027
1028static void hci_req_sync_complete(struct hci_dev *hdev, u8 result)
1029{
1030 BT_DBG("%s result 0x%2.2x", hdev->name, result);
1031
1032 if (hdev->req_status == HCI_REQ_PEND) {
1033 hdev->req_result = result;
1034 hdev->req_status = HCI_REQ_DONE;
1035 wake_up_interruptible(&hdev->req_wait_q);
1036 }
1037}
1038
1039static void hci_req_cancel(struct hci_dev *hdev, int err)
1040{
1041 BT_DBG("%s err 0x%2.2x", hdev->name, err);
1042
1043 if (hdev->req_status == HCI_REQ_PEND) {
1044 hdev->req_result = err;
1045 hdev->req_status = HCI_REQ_CANCELED;
1046 wake_up_interruptible(&hdev->req_wait_q);
1047 }
1048}
1049
1050static struct sk_buff *hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
1051 u8 event)
1052{
1053 struct hci_ev_cmd_complete *ev;
1054 struct hci_event_hdr *hdr;
1055 struct sk_buff *skb;
1056
1057 hci_dev_lock(hdev);
1058
1059 skb = hdev->recv_evt;
1060 hdev->recv_evt = NULL;
1061
1062 hci_dev_unlock(hdev);
1063
1064 if (!skb)
1065 return ERR_PTR(-ENODATA);
1066
1067 if (skb->len < sizeof(*hdr)) {
1068 BT_ERR("Too short HCI event");
1069 goto failed;
1070 }
1071
1072 hdr = (void *) skb->data;
1073 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1074
1075 if (event) {
1076 if (hdr->evt != event)
1077 goto failed;
1078 return skb;
1079 }
1080
1081 if (hdr->evt != HCI_EV_CMD_COMPLETE) {
1082 BT_DBG("Last event is not cmd complete (0x%2.2x)", hdr->evt);
1083 goto failed;
1084 }
1085
1086 if (skb->len < sizeof(*ev)) {
1087 BT_ERR("Too short cmd_complete event");
1088 goto failed;
1089 }
1090
1091 ev = (void *) skb->data;
1092 skb_pull(skb, sizeof(*ev));
1093
1094 if (opcode == __le16_to_cpu(ev->opcode))
1095 return skb;
1096
1097 BT_DBG("opcode doesn't match (0x%2.2x != 0x%2.2x)", opcode,
1098 __le16_to_cpu(ev->opcode));
1099
1100failed:
1101 kfree_skb(skb);
1102 return ERR_PTR(-ENODATA);
1103}
1104
1105struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1106 const void *param, u8 event, u32 timeout)
1107{
1108 DECLARE_WAITQUEUE(wait, current);
1109 struct hci_request req;
1110 int err = 0;
1111
1112 BT_DBG("%s", hdev->name);
1113
1114 hci_req_init(&req, hdev);
1115
1116 hci_req_add_ev(&req, opcode, plen, param, event);
1117
1118 hdev->req_status = HCI_REQ_PEND;
1119
1120 err = hci_req_run(&req, hci_req_sync_complete);
1121 if (err < 0)
1122 return ERR_PTR(err);
1123
1124 add_wait_queue(&hdev->req_wait_q, &wait);
1125 set_current_state(TASK_INTERRUPTIBLE);
1126
1127 schedule_timeout(timeout);
1128
1129 remove_wait_queue(&hdev->req_wait_q, &wait);
1130
1131 if (signal_pending(current))
1132 return ERR_PTR(-EINTR);
1133
1134 switch (hdev->req_status) {
1135 case HCI_REQ_DONE:
1136 err = -bt_to_errno(hdev->req_result);
1137 break;
1138
1139 case HCI_REQ_CANCELED:
1140 err = -hdev->req_result;
1141 break;
1142
1143 default:
1144 err = -ETIMEDOUT;
1145 break;
1146 }
1147
1148 hdev->req_status = hdev->req_result = 0;
1149
1150 BT_DBG("%s end: err %d", hdev->name, err);
1151
1152 if (err < 0)
1153 return ERR_PTR(err);
1154
1155 return hci_get_cmd_complete(hdev, opcode, event);
1156}
1157EXPORT_SYMBOL(__hci_cmd_sync_ev);
1158
1159struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1160 const void *param, u32 timeout)
1161{
1162 return __hci_cmd_sync_ev(hdev, opcode, plen, param, 0, timeout);
1163}
1164EXPORT_SYMBOL(__hci_cmd_sync);
1165
1166/* Execute request and wait for completion. */
1167static int __hci_req_sync(struct hci_dev *hdev,
1168 void (*func)(struct hci_request *req,
1169 unsigned long opt),
1170 unsigned long opt, __u32 timeout)
1171{
1172 struct hci_request req;
1173 DECLARE_WAITQUEUE(wait, current);
1174 int err = 0;
1175
1176 BT_DBG("%s start", hdev->name);
1177
1178 hci_req_init(&req, hdev);
1179
1180 hdev->req_status = HCI_REQ_PEND;
1181
1182 func(&req, opt);
1183
1184 err = hci_req_run(&req, hci_req_sync_complete);
1185 if (err < 0) {
1186 hdev->req_status = 0;
1187
1188 /* ENODATA means the HCI request command queue is empty.
1189 * This can happen when a request with conditionals doesn't
1190 * trigger any commands to be sent. This is normal behavior
1191 * and should not trigger an error return.
1192 */
1193 if (err == -ENODATA)
1194 return 0;
1195
1196 return err;
1197 }
1198
1199 add_wait_queue(&hdev->req_wait_q, &wait);
1200 set_current_state(TASK_INTERRUPTIBLE);
1201
1202 schedule_timeout(timeout);
1203
1204 remove_wait_queue(&hdev->req_wait_q, &wait);
1205
1206 if (signal_pending(current))
1207 return -EINTR;
1208
1209 switch (hdev->req_status) {
1210 case HCI_REQ_DONE:
1211 err = -bt_to_errno(hdev->req_result);
1212 break;
1213
1214 case HCI_REQ_CANCELED:
1215 err = -hdev->req_result;
1216 break;
1217
1218 default:
1219 err = -ETIMEDOUT;
1220 break;
1221 }
1222
1223 hdev->req_status = hdev->req_result = 0;
1224
1225 BT_DBG("%s end: err %d", hdev->name, err);
1226
1227 return err;
1228}
1229
1230static int hci_req_sync(struct hci_dev *hdev,
1231 void (*req)(struct hci_request *req,
1232 unsigned long opt),
1233 unsigned long opt, __u32 timeout)
1234{
1235 int ret;
1236
1237 if (!test_bit(HCI_UP, &hdev->flags))
1238 return -ENETDOWN;
1239
1240 /* Serialize all requests */
1241 hci_req_lock(hdev);
1242 ret = __hci_req_sync(hdev, req, opt, timeout);
1243 hci_req_unlock(hdev);
1244
1245 return ret;
1246}
1247
1248static void hci_reset_req(struct hci_request *req, unsigned long opt)
1249{
1250 BT_DBG("%s %ld", req->hdev->name, opt);
1251
1252 /* Reset device */
1253 set_bit(HCI_RESET, &req->hdev->flags);
1254 hci_req_add(req, HCI_OP_RESET, 0, NULL);
1255}
1256
1257static void bredr_init(struct hci_request *req)
1258{
1259 req->hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED;
1260
1261 /* Read Local Supported Features */
1262 hci_req_add(req, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
1263
1264 /* Read Local Version */
1265 hci_req_add(req, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
1266
1267 /* Read BD Address */
1268 hci_req_add(req, HCI_OP_READ_BD_ADDR, 0, NULL);
1269}
1270
1271static void amp_init(struct hci_request *req)
1272{
1273 req->hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED;
1274
1275 /* Read Local Version */
1276 hci_req_add(req, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
1277
1278 /* Read Local Supported Commands */
1279 hci_req_add(req, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
1280
1281 /* Read Local Supported Features */
1282 hci_req_add(req, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
1283
1284 /* Read Local AMP Info */
1285 hci_req_add(req, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
1286
1287 /* Read Data Blk size */
1288 hci_req_add(req, HCI_OP_READ_DATA_BLOCK_SIZE, 0, NULL);
1289
1290 /* Read Flow Control Mode */
1291 hci_req_add(req, HCI_OP_READ_FLOW_CONTROL_MODE, 0, NULL);
1292
1293 /* Read Location Data */
1294 hci_req_add(req, HCI_OP_READ_LOCATION_DATA, 0, NULL);
1295}
1296
1297static void hci_init1_req(struct hci_request *req, unsigned long opt)
1298{
1299 struct hci_dev *hdev = req->hdev;
1300
1301 BT_DBG("%s %ld", hdev->name, opt);
1302
1303 /* Reset */
1304 if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks))
1305 hci_reset_req(req, 0);
1306
1307 switch (hdev->dev_type) {
1308 case HCI_BREDR:
1309 bredr_init(req);
1310 break;
1311
1312 case HCI_AMP:
1313 amp_init(req);
1314 break;
1315
1316 default:
1317 BT_ERR("Unknown device type %d", hdev->dev_type);
1318 break;
1319 }
1320}
1321
1322static void bredr_setup(struct hci_request *req)
1323{
1324 struct hci_dev *hdev = req->hdev;
1325
1326 __le16 param;
1327 __u8 flt_type;
1328
1329 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
1330 hci_req_add(req, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
1331
1332 /* Read Class of Device */
1333 hci_req_add(req, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
1334
1335 /* Read Local Name */
1336 hci_req_add(req, HCI_OP_READ_LOCAL_NAME, 0, NULL);
1337
1338 /* Read Voice Setting */
1339 hci_req_add(req, HCI_OP_READ_VOICE_SETTING, 0, NULL);
1340
1341 /* Read Number of Supported IAC */
1342 hci_req_add(req, HCI_OP_READ_NUM_SUPPORTED_IAC, 0, NULL);
1343
1344 /* Read Current IAC LAP */
1345 hci_req_add(req, HCI_OP_READ_CURRENT_IAC_LAP, 0, NULL);
1346
1347 /* Clear Event Filters */
1348 flt_type = HCI_FLT_CLEAR_ALL;
1349 hci_req_add(req, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
1350
1351 /* Connection accept timeout ~20 secs */
1352 param = cpu_to_le16(0x7d00);
1353 hci_req_add(req, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
1354
1355 /* AVM Berlin (31), aka "BlueFRITZ!", reports version 1.2,
1356 * but it does not support page scan related HCI commands.
1357 */
1358 if (hdev->manufacturer != 31 && hdev->hci_ver > BLUETOOTH_VER_1_1) {
1359 hci_req_add(req, HCI_OP_READ_PAGE_SCAN_ACTIVITY, 0, NULL);
1360 hci_req_add(req, HCI_OP_READ_PAGE_SCAN_TYPE, 0, NULL);
1361 }
1362}
1363
1364static void le_setup(struct hci_request *req)
1365{
1366 struct hci_dev *hdev = req->hdev;
1367
1368 /* Read LE Buffer Size */
1369 hci_req_add(req, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
1370
1371 /* Read LE Local Supported Features */
1372 hci_req_add(req, HCI_OP_LE_READ_LOCAL_FEATURES, 0, NULL);
1373
1374 /* Read LE Supported States */
1375 hci_req_add(req, HCI_OP_LE_READ_SUPPORTED_STATES, 0, NULL);
1376
1377 /* Read LE Advertising Channel TX Power */
1378 hci_req_add(req, HCI_OP_LE_READ_ADV_TX_POWER, 0, NULL);
1379
1380 /* Read LE White List Size */
1381 hci_req_add(req, HCI_OP_LE_READ_WHITE_LIST_SIZE, 0, NULL);
1382
1383 /* Clear LE White List */
1384 hci_req_add(req, HCI_OP_LE_CLEAR_WHITE_LIST, 0, NULL);
1385
1386 /* LE-only controllers have LE implicitly enabled */
1387 if (!lmp_bredr_capable(hdev))
1388 set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1389}
1390
1391static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
1392{
1393 if (lmp_ext_inq_capable(hdev))
1394 return 0x02;
1395
1396 if (lmp_inq_rssi_capable(hdev))
1397 return 0x01;
1398
1399 if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
1400 hdev->lmp_subver == 0x0757)
1401 return 0x01;
1402
1403 if (hdev->manufacturer == 15) {
1404 if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
1405 return 0x01;
1406 if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
1407 return 0x01;
1408 if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
1409 return 0x01;
1410 }
1411
1412 if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
1413 hdev->lmp_subver == 0x1805)
1414 return 0x01;
1415
1416 return 0x00;
1417}
1418
1419static void hci_setup_inquiry_mode(struct hci_request *req)
1420{
1421 u8 mode;
1422
1423 mode = hci_get_inquiry_mode(req->hdev);
1424
1425 hci_req_add(req, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
1426}
1427
1428static void hci_setup_event_mask(struct hci_request *req)
1429{
1430 struct hci_dev *hdev = req->hdev;
1431
1432 /* The second byte is 0xff instead of 0x9f (two reserved bits
1433 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
1434 * command otherwise.
1435 */
1436 u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
1437
1438 /* CSR 1.1 dongles does not accept any bitfield so don't try to set
1439 * any event mask for pre 1.2 devices.
1440 */
1441 if (hdev->hci_ver < BLUETOOTH_VER_1_2)
1442 return;
1443
1444 if (lmp_bredr_capable(hdev)) {
1445 events[4] |= 0x01; /* Flow Specification Complete */
1446 events[4] |= 0x02; /* Inquiry Result with RSSI */
1447 events[4] |= 0x04; /* Read Remote Extended Features Complete */
1448 events[5] |= 0x08; /* Synchronous Connection Complete */
1449 events[5] |= 0x10; /* Synchronous Connection Changed */
1450 } else {
1451 /* Use a different default for LE-only devices */
1452 memset(events, 0, sizeof(events));
1453 events[0] |= 0x10; /* Disconnection Complete */
1454 events[0] |= 0x80; /* Encryption Change */
1455 events[1] |= 0x08; /* Read Remote Version Information Complete */
1456 events[1] |= 0x20; /* Command Complete */
1457 events[1] |= 0x40; /* Command Status */
1458 events[1] |= 0x80; /* Hardware Error */
1459 events[2] |= 0x04; /* Number of Completed Packets */
1460 events[3] |= 0x02; /* Data Buffer Overflow */
1461 events[5] |= 0x80; /* Encryption Key Refresh Complete */
1462 }
1463
1464 if (lmp_inq_rssi_capable(hdev))
1465 events[4] |= 0x02; /* Inquiry Result with RSSI */
1466
1467 if (lmp_sniffsubr_capable(hdev))
1468 events[5] |= 0x20; /* Sniff Subrating */
1469
1470 if (lmp_pause_enc_capable(hdev))
1471 events[5] |= 0x80; /* Encryption Key Refresh Complete */
1472
1473 if (lmp_ext_inq_capable(hdev))
1474 events[5] |= 0x40; /* Extended Inquiry Result */
1475
1476 if (lmp_no_flush_capable(hdev))
1477 events[7] |= 0x01; /* Enhanced Flush Complete */
1478
1479 if (lmp_lsto_capable(hdev))
1480 events[6] |= 0x80; /* Link Supervision Timeout Changed */
1481
1482 if (lmp_ssp_capable(hdev)) {
1483 events[6] |= 0x01; /* IO Capability Request */
1484 events[6] |= 0x02; /* IO Capability Response */
1485 events[6] |= 0x04; /* User Confirmation Request */
1486 events[6] |= 0x08; /* User Passkey Request */
1487 events[6] |= 0x10; /* Remote OOB Data Request */
1488 events[6] |= 0x20; /* Simple Pairing Complete */
1489 events[7] |= 0x04; /* User Passkey Notification */
1490 events[7] |= 0x08; /* Keypress Notification */
1491 events[7] |= 0x10; /* Remote Host Supported
1492 * Features Notification
1493 */
1494 }
1495
1496 if (lmp_le_capable(hdev))
1497 events[7] |= 0x20; /* LE Meta-Event */
1498
1499 hci_req_add(req, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
1500
1501 if (lmp_le_capable(hdev)) {
1502 memset(events, 0, sizeof(events));
1503 events[0] = 0x1f;
1504 hci_req_add(req, HCI_OP_LE_SET_EVENT_MASK,
1505 sizeof(events), events);
1506 }
1507}
1508
1509static void hci_init2_req(struct hci_request *req, unsigned long opt)
1510{
1511 struct hci_dev *hdev = req->hdev;
1512
1513 if (lmp_bredr_capable(hdev))
1514 bredr_setup(req);
1515 else
1516 clear_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
1517
1518 if (lmp_le_capable(hdev))
1519 le_setup(req);
1520
1521 hci_setup_event_mask(req);
1522
1523 /* AVM Berlin (31), aka "BlueFRITZ!", doesn't support the read
1524 * local supported commands HCI command.
1525 */
1526 if (hdev->manufacturer != 31 && hdev->hci_ver > BLUETOOTH_VER_1_1)
1527 hci_req_add(req, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
1528
1529 if (lmp_ssp_capable(hdev)) {
1530 /* When SSP is available, then the host features page
1531 * should also be available as well. However some
1532 * controllers list the max_page as 0 as long as SSP
1533 * has not been enabled. To achieve proper debugging
1534 * output, force the minimum max_page to 1 at least.
1535 */
1536 hdev->max_page = 0x01;
1537
1538 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
1539 u8 mode = 0x01;
1540 hci_req_add(req, HCI_OP_WRITE_SSP_MODE,
1541 sizeof(mode), &mode);
1542 } else {
1543 struct hci_cp_write_eir cp;
1544
1545 memset(hdev->eir, 0, sizeof(hdev->eir));
1546 memset(&cp, 0, sizeof(cp));
1547
1548 hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
1549 }
1550 }
1551
1552 if (lmp_inq_rssi_capable(hdev))
1553 hci_setup_inquiry_mode(req);
1554
1555 if (lmp_inq_tx_pwr_capable(hdev))
1556 hci_req_add(req, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
1557
1558 if (lmp_ext_feat_capable(hdev)) {
1559 struct hci_cp_read_local_ext_features cp;
1560
1561 cp.page = 0x01;
1562 hci_req_add(req, HCI_OP_READ_LOCAL_EXT_FEATURES,
1563 sizeof(cp), &cp);
1564 }
1565
1566 if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags)) {
1567 u8 enable = 1;
1568 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, sizeof(enable),
1569 &enable);
1570 }
1571}
1572
1573static void hci_setup_link_policy(struct hci_request *req)
1574{
1575 struct hci_dev *hdev = req->hdev;
1576 struct hci_cp_write_def_link_policy cp;
1577 u16 link_policy = 0;
1578
1579 if (lmp_rswitch_capable(hdev))
1580 link_policy |= HCI_LP_RSWITCH;
1581 if (lmp_hold_capable(hdev))
1582 link_policy |= HCI_LP_HOLD;
1583 if (lmp_sniff_capable(hdev))
1584 link_policy |= HCI_LP_SNIFF;
1585 if (lmp_park_capable(hdev))
1586 link_policy |= HCI_LP_PARK;
1587
1588 cp.policy = cpu_to_le16(link_policy);
1589 hci_req_add(req, HCI_OP_WRITE_DEF_LINK_POLICY, sizeof(cp), &cp);
1590}
1591
1592static void hci_set_le_support(struct hci_request *req)
1593{
1594 struct hci_dev *hdev = req->hdev;
1595 struct hci_cp_write_le_host_supported cp;
1596
1597 /* LE-only devices do not support explicit enablement */
1598 if (!lmp_bredr_capable(hdev))
1599 return;
1600
1601 memset(&cp, 0, sizeof(cp));
1602
1603 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
1604 cp.le = 0x01;
1605 cp.simul = lmp_le_br_capable(hdev);
1606 }
1607
1608 if (cp.le != lmp_host_le_capable(hdev))
1609 hci_req_add(req, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp),
1610 &cp);
1611}
1612
1613static void hci_set_event_mask_page_2(struct hci_request *req)
1614{
1615 struct hci_dev *hdev = req->hdev;
1616 u8 events[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
1617
1618 /* If Connectionless Slave Broadcast master role is supported
1619 * enable all necessary events for it.
1620 */
1621 if (lmp_csb_master_capable(hdev)) {
1622 events[1] |= 0x40; /* Triggered Clock Capture */
1623 events[1] |= 0x80; /* Synchronization Train Complete */
1624 events[2] |= 0x10; /* Slave Page Response Timeout */
1625 events[2] |= 0x20; /* CSB Channel Map Change */
1626 }
1627
1628 /* If Connectionless Slave Broadcast slave role is supported
1629 * enable all necessary events for it.
1630 */
1631 if (lmp_csb_slave_capable(hdev)) {
1632 events[2] |= 0x01; /* Synchronization Train Received */
1633 events[2] |= 0x02; /* CSB Receive */
1634 events[2] |= 0x04; /* CSB Timeout */
1635 events[2] |= 0x08; /* Truncated Page Complete */
1636 }
1637
1638 /* Enable Authenticated Payload Timeout Expired event if supported */
1639 if (lmp_ping_capable(hdev))
1640 events[2] |= 0x80;
1641
1642 hci_req_add(req, HCI_OP_SET_EVENT_MASK_PAGE_2, sizeof(events), events);
1643}
1644
1645static void hci_init3_req(struct hci_request *req, unsigned long opt)
1646{
1647 struct hci_dev *hdev = req->hdev;
1648 u8 p;
1649
1650 /* Some Broadcom based Bluetooth controllers do not support the
1651 * Delete Stored Link Key command. They are clearly indicating its
1652 * absence in the bit mask of supported commands.
1653 *
1654 * Check the supported commands and only if the the command is marked
1655 * as supported send it. If not supported assume that the controller
1656 * does not have actual support for stored link keys which makes this
1657 * command redundant anyway.
1658 *
1659 * Some controllers indicate that they support handling deleting
1660 * stored link keys, but they don't. The quirk lets a driver
1661 * just disable this command.
1662 */
1663 if (hdev->commands[6] & 0x80 &&
1664 !test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks)) {
1665 struct hci_cp_delete_stored_link_key cp;
1666
1667 bacpy(&cp.bdaddr, BDADDR_ANY);
1668 cp.delete_all = 0x01;
1669 hci_req_add(req, HCI_OP_DELETE_STORED_LINK_KEY,
1670 sizeof(cp), &cp);
1671 }
1672
1673 if (hdev->commands[5] & 0x10)
1674 hci_setup_link_policy(req);
1675
1676 if (lmp_le_capable(hdev))
1677 hci_set_le_support(req);
1678
1679 /* Read features beyond page 1 if available */
1680 for (p = 2; p < HCI_MAX_PAGES && p <= hdev->max_page; p++) {
1681 struct hci_cp_read_local_ext_features cp;
1682
1683 cp.page = p;
1684 hci_req_add(req, HCI_OP_READ_LOCAL_EXT_FEATURES,
1685 sizeof(cp), &cp);
1686 }
1687}
1688
1689static void hci_init4_req(struct hci_request *req, unsigned long opt)
1690{
1691 struct hci_dev *hdev = req->hdev;
1692
1693 /* Set event mask page 2 if the HCI command for it is supported */
1694 if (hdev->commands[22] & 0x04)
1695 hci_set_event_mask_page_2(req);
1696
1697 /* Check for Synchronization Train support */
1698 if (lmp_sync_train_capable(hdev))
1699 hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL);
1700
1701 /* Enable Secure Connections if supported and configured */
1702 if ((lmp_sc_capable(hdev) ||
1703 test_bit(HCI_FORCE_SC, &hdev->dev_flags)) &&
1704 test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) {
1705 u8 support = 0x01;
1706 hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT,
1707 sizeof(support), &support);
1708 }
1709}
1710
1711static int __hci_init(struct hci_dev *hdev)
1712{
1713 int err;
1714
1715 err = __hci_req_sync(hdev, hci_init1_req, 0, HCI_INIT_TIMEOUT);
1716 if (err < 0)
1717 return err;
1718
1719 /* The Device Under Test (DUT) mode is special and available for
1720 * all controller types. So just create it early on.
1721 */
1722 if (test_bit(HCI_SETUP, &hdev->dev_flags)) {
1723 debugfs_create_file("dut_mode", 0644, hdev->debugfs, hdev,
1724 &dut_mode_fops);
1725 }
1726
1727 /* HCI_BREDR covers both single-mode LE, BR/EDR and dual-mode
1728 * BR/EDR/LE type controllers. AMP controllers only need the
1729 * first stage init.
1730 */
1731 if (hdev->dev_type != HCI_BREDR)
1732 return 0;
1733
1734 err = __hci_req_sync(hdev, hci_init2_req, 0, HCI_INIT_TIMEOUT);
1735 if (err < 0)
1736 return err;
1737
1738 err = __hci_req_sync(hdev, hci_init3_req, 0, HCI_INIT_TIMEOUT);
1739 if (err < 0)
1740 return err;
1741
1742 err = __hci_req_sync(hdev, hci_init4_req, 0, HCI_INIT_TIMEOUT);
1743 if (err < 0)
1744 return err;
1745
1746 /* Only create debugfs entries during the initial setup
1747 * phase and not every time the controller gets powered on.
1748 */
1749 if (!test_bit(HCI_SETUP, &hdev->dev_flags))
1750 return 0;
1751
1752 debugfs_create_file("features", 0444, hdev->debugfs, hdev,
1753 &features_fops);
1754 debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
1755 &hdev->manufacturer);
1756 debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
1757 debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
1758 debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
1759 &blacklist_fops);
1760 debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
1761
1762 if (lmp_bredr_capable(hdev)) {
1763 debugfs_create_file("inquiry_cache", 0444, hdev->debugfs,
1764 hdev, &inquiry_cache_fops);
1765 debugfs_create_file("link_keys", 0400, hdev->debugfs,
1766 hdev, &link_keys_fops);
1767 debugfs_create_file("dev_class", 0444, hdev->debugfs,
1768 hdev, &dev_class_fops);
1769 debugfs_create_file("voice_setting", 0444, hdev->debugfs,
1770 hdev, &voice_setting_fops);
1771 }
1772
1773 if (lmp_ssp_capable(hdev)) {
1774 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
1775 hdev, &auto_accept_delay_fops);
1776 debugfs_create_file("ssp_debug_mode", 0644, hdev->debugfs,
1777 hdev, &ssp_debug_mode_fops);
1778 debugfs_create_file("force_sc_support", 0644, hdev->debugfs,
1779 hdev, &force_sc_support_fops);
1780 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
1781 hdev, &sc_only_mode_fops);
1782 }
1783
1784 if (lmp_sniff_capable(hdev)) {
1785 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
1786 hdev, &idle_timeout_fops);
1787 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
1788 hdev, &sniff_min_interval_fops);
1789 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
1790 hdev, &sniff_max_interval_fops);
1791 }
1792
1793 if (lmp_le_capable(hdev)) {
1794 debugfs_create_file("identity", 0400, hdev->debugfs,
1795 hdev, &identity_fops);
1796 debugfs_create_file("rpa_timeout", 0644, hdev->debugfs,
1797 hdev, &rpa_timeout_fops);
1798 debugfs_create_file("random_address", 0444, hdev->debugfs,
1799 hdev, &random_address_fops);
1800 debugfs_create_file("static_address", 0444, hdev->debugfs,
1801 hdev, &static_address_fops);
1802
1803 /* For controllers with a public address, provide a debug
1804 * option to force the usage of the configured static
1805 * address. By default the public address is used.
1806 */
1807 if (bacmp(&hdev->bdaddr, BDADDR_ANY))
1808 debugfs_create_file("force_static_address", 0644,
1809 hdev->debugfs, hdev,
1810 &force_static_address_fops);
1811
1812 debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
1813 &hdev->le_white_list_size);
1814 debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
1815 &white_list_fops);
1816 debugfs_create_file("identity_resolving_keys", 0400,
1817 hdev->debugfs, hdev,
1818 &identity_resolving_keys_fops);
1819 debugfs_create_file("long_term_keys", 0400, hdev->debugfs,
1820 hdev, &long_term_keys_fops);
1821 debugfs_create_file("conn_min_interval", 0644, hdev->debugfs,
1822 hdev, &conn_min_interval_fops);
1823 debugfs_create_file("conn_max_interval", 0644, hdev->debugfs,
1824 hdev, &conn_max_interval_fops);
1825 debugfs_create_file("adv_channel_map", 0644, hdev->debugfs,
1826 hdev, &adv_channel_map_fops);
1827 debugfs_create_file("6lowpan", 0644, hdev->debugfs, hdev,
1828 &lowpan_debugfs_fops);
1829 debugfs_create_file("le_auto_conn", 0644, hdev->debugfs, hdev,
1830 &le_auto_conn_fops);
1831 }
1832
1833 return 0;
1834}
1835
1836static void hci_scan_req(struct hci_request *req, unsigned long opt)
1837{
1838 __u8 scan = opt;
1839
1840 BT_DBG("%s %x", req->hdev->name, scan);
1841
1842 /* Inquiry and Page scans */
1843 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1844}
1845
1846static void hci_auth_req(struct hci_request *req, unsigned long opt)
1847{
1848 __u8 auth = opt;
1849
1850 BT_DBG("%s %x", req->hdev->name, auth);
1851
1852 /* Authentication */
1853 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
1854}
1855
1856static void hci_encrypt_req(struct hci_request *req, unsigned long opt)
1857{
1858 __u8 encrypt = opt;
1859
1860 BT_DBG("%s %x", req->hdev->name, encrypt);
1861
1862 /* Encryption */
1863 hci_req_add(req, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
1864}
1865
1866static void hci_linkpol_req(struct hci_request *req, unsigned long opt)
1867{
1868 __le16 policy = cpu_to_le16(opt);
1869
1870 BT_DBG("%s %x", req->hdev->name, policy);
1871
1872 /* Default link policy */
1873 hci_req_add(req, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
1874}
1875
1876/* Get HCI device by index.
1877 * Device is held on return. */
1878struct hci_dev *hci_dev_get(int index)
1879{
1880 struct hci_dev *hdev = NULL, *d;
1881
1882 BT_DBG("%d", index);
1883
1884 if (index < 0)
1885 return NULL;
1886
1887 read_lock(&hci_dev_list_lock);
1888 list_for_each_entry(d, &hci_dev_list, list) {
1889 if (d->id == index) {
1890 hdev = hci_dev_hold(d);
1891 break;
1892 }
1893 }
1894 read_unlock(&hci_dev_list_lock);
1895 return hdev;
1896}
1897
1898/* ---- Inquiry support ---- */
1899
1900bool hci_discovery_active(struct hci_dev *hdev)
1901{
1902 struct discovery_state *discov = &hdev->discovery;
1903
1904 switch (discov->state) {
1905 case DISCOVERY_FINDING:
1906 case DISCOVERY_RESOLVING:
1907 return true;
1908
1909 default:
1910 return false;
1911 }
1912}
1913
1914void hci_discovery_set_state(struct hci_dev *hdev, int state)
1915{
1916 BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state);
1917
1918 if (hdev->discovery.state == state)
1919 return;
1920
1921 switch (state) {
1922 case DISCOVERY_STOPPED:
1923 hci_update_background_scan(hdev);
1924
1925 if (hdev->discovery.state != DISCOVERY_STARTING)
1926 mgmt_discovering(hdev, 0);
1927 break;
1928 case DISCOVERY_STARTING:
1929 break;
1930 case DISCOVERY_FINDING:
1931 mgmt_discovering(hdev, 1);
1932 break;
1933 case DISCOVERY_RESOLVING:
1934 break;
1935 case DISCOVERY_STOPPING:
1936 break;
1937 }
1938
1939 hdev->discovery.state = state;
1940}
1941
1942void hci_inquiry_cache_flush(struct hci_dev *hdev)
1943{
1944 struct discovery_state *cache = &hdev->discovery;
1945 struct inquiry_entry *p, *n;
1946
1947 list_for_each_entry_safe(p, n, &cache->all, all) {
1948 list_del(&p->all);
1949 kfree(p);
1950 }
1951
1952 INIT_LIST_HEAD(&cache->unknown);
1953 INIT_LIST_HEAD(&cache->resolve);
1954}
1955
1956struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
1957 bdaddr_t *bdaddr)
1958{
1959 struct discovery_state *cache = &hdev->discovery;
1960 struct inquiry_entry *e;
1961
1962 BT_DBG("cache %p, %pMR", cache, bdaddr);
1963
1964 list_for_each_entry(e, &cache->all, all) {
1965 if (!bacmp(&e->data.bdaddr, bdaddr))
1966 return e;
1967 }
1968
1969 return NULL;
1970}
1971
1972struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
1973 bdaddr_t *bdaddr)
1974{
1975 struct discovery_state *cache = &hdev->discovery;
1976 struct inquiry_entry *e;
1977
1978 BT_DBG("cache %p, %pMR", cache, bdaddr);
1979
1980 list_for_each_entry(e, &cache->unknown, list) {
1981 if (!bacmp(&e->data.bdaddr, bdaddr))
1982 return e;
1983 }
1984
1985 return NULL;
1986}
1987
1988struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
1989 bdaddr_t *bdaddr,
1990 int state)
1991{
1992 struct discovery_state *cache = &hdev->discovery;
1993 struct inquiry_entry *e;
1994
1995 BT_DBG("cache %p bdaddr %pMR state %d", cache, bdaddr, state);
1996
1997 list_for_each_entry(e, &cache->resolve, list) {
1998 if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state)
1999 return e;
2000 if (!bacmp(&e->data.bdaddr, bdaddr))
2001 return e;
2002 }
2003
2004 return NULL;
2005}
2006
2007void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
2008 struct inquiry_entry *ie)
2009{
2010 struct discovery_state *cache = &hdev->discovery;
2011 struct list_head *pos = &cache->resolve;
2012 struct inquiry_entry *p;
2013
2014 list_del(&ie->list);
2015
2016 list_for_each_entry(p, &cache->resolve, list) {
2017 if (p->name_state != NAME_PENDING &&
2018 abs(p->data.rssi) >= abs(ie->data.rssi))
2019 break;
2020 pos = &p->list;
2021 }
2022
2023 list_add(&ie->list, pos);
2024}
2025
2026bool hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
2027 bool name_known, bool *ssp)
2028{
2029 struct discovery_state *cache = &hdev->discovery;
2030 struct inquiry_entry *ie;
2031
2032 BT_DBG("cache %p, %pMR", cache, &data->bdaddr);
2033
2034 hci_remove_remote_oob_data(hdev, &data->bdaddr);
2035
2036 if (ssp)
2037 *ssp = data->ssp_mode;
2038
2039 ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
2040 if (ie) {
2041 if (ie->data.ssp_mode && ssp)
2042 *ssp = true;
2043
2044 if (ie->name_state == NAME_NEEDED &&
2045 data->rssi != ie->data.rssi) {
2046 ie->data.rssi = data->rssi;
2047 hci_inquiry_cache_update_resolve(hdev, ie);
2048 }
2049
2050 goto update;
2051 }
2052
2053 /* Entry not in the cache. Add new one. */
2054 ie = kzalloc(sizeof(struct inquiry_entry), GFP_ATOMIC);
2055 if (!ie)
2056 return false;
2057
2058 list_add(&ie->all, &cache->all);
2059
2060 if (name_known) {
2061 ie->name_state = NAME_KNOWN;
2062 } else {
2063 ie->name_state = NAME_NOT_KNOWN;
2064 list_add(&ie->list, &cache->unknown);
2065 }
2066
2067update:
2068 if (name_known && ie->name_state != NAME_KNOWN &&
2069 ie->name_state != NAME_PENDING) {
2070 ie->name_state = NAME_KNOWN;
2071 list_del(&ie->list);
2072 }
2073
2074 memcpy(&ie->data, data, sizeof(*data));
2075 ie->timestamp = jiffies;
2076 cache->timestamp = jiffies;
2077
2078 if (ie->name_state == NAME_NOT_KNOWN)
2079 return false;
2080
2081 return true;
2082}
2083
2084static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
2085{
2086 struct discovery_state *cache = &hdev->discovery;
2087 struct inquiry_info *info = (struct inquiry_info *) buf;
2088 struct inquiry_entry *e;
2089 int copied = 0;
2090
2091 list_for_each_entry(e, &cache->all, all) {
2092 struct inquiry_data *data = &e->data;
2093
2094 if (copied >= num)
2095 break;
2096
2097 bacpy(&info->bdaddr, &data->bdaddr);
2098 info->pscan_rep_mode = data->pscan_rep_mode;
2099 info->pscan_period_mode = data->pscan_period_mode;
2100 info->pscan_mode = data->pscan_mode;
2101 memcpy(info->dev_class, data->dev_class, 3);
2102 info->clock_offset = data->clock_offset;
2103
2104 info++;
2105 copied++;
2106 }
2107
2108 BT_DBG("cache %p, copied %d", cache, copied);
2109 return copied;
2110}
2111
2112static void hci_inq_req(struct hci_request *req, unsigned long opt)
2113{
2114 struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
2115 struct hci_dev *hdev = req->hdev;
2116 struct hci_cp_inquiry cp;
2117
2118 BT_DBG("%s", hdev->name);
2119
2120 if (test_bit(HCI_INQUIRY, &hdev->flags))
2121 return;
2122
2123 /* Start Inquiry */
2124 memcpy(&cp.lap, &ir->lap, 3);
2125 cp.length = ir->length;
2126 cp.num_rsp = ir->num_rsp;
2127 hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
2128}
2129
2130static int wait_inquiry(void *word)
2131{
2132 schedule();
2133 return signal_pending(current);
2134}
2135
2136int hci_inquiry(void __user *arg)
2137{
2138 __u8 __user *ptr = arg;
2139 struct hci_inquiry_req ir;
2140 struct hci_dev *hdev;
2141 int err = 0, do_inquiry = 0, max_rsp;
2142 long timeo;
2143 __u8 *buf;
2144
2145 if (copy_from_user(&ir, ptr, sizeof(ir)))
2146 return -EFAULT;
2147
2148 hdev = hci_dev_get(ir.dev_id);
2149 if (!hdev)
2150 return -ENODEV;
2151
2152 if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
2153 err = -EBUSY;
2154 goto done;
2155 }
2156
2157 if (hdev->dev_type != HCI_BREDR) {
2158 err = -EOPNOTSUPP;
2159 goto done;
2160 }
2161
2162 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
2163 err = -EOPNOTSUPP;
2164 goto done;
2165 }
2166
2167 hci_dev_lock(hdev);
2168 if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
2169 inquiry_cache_empty(hdev) || ir.flags & IREQ_CACHE_FLUSH) {
2170 hci_inquiry_cache_flush(hdev);
2171 do_inquiry = 1;
2172 }
2173 hci_dev_unlock(hdev);
2174
2175 timeo = ir.length * msecs_to_jiffies(2000);
2176
2177 if (do_inquiry) {
2178 err = hci_req_sync(hdev, hci_inq_req, (unsigned long) &ir,
2179 timeo);
2180 if (err < 0)
2181 goto done;
2182
2183 /* Wait until Inquiry procedure finishes (HCI_INQUIRY flag is
2184 * cleared). If it is interrupted by a signal, return -EINTR.
2185 */
2186 if (wait_on_bit(&hdev->flags, HCI_INQUIRY, wait_inquiry,
2187 TASK_INTERRUPTIBLE))
2188 return -EINTR;
2189 }
2190
2191 /* for unlimited number of responses we will use buffer with
2192 * 255 entries
2193 */
2194 max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
2195
2196 /* cache_dump can't sleep. Therefore we allocate temp buffer and then
2197 * copy it to the user space.
2198 */
2199 buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL);
2200 if (!buf) {
2201 err = -ENOMEM;
2202 goto done;
2203 }
2204
2205 hci_dev_lock(hdev);
2206 ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
2207 hci_dev_unlock(hdev);
2208
2209 BT_DBG("num_rsp %d", ir.num_rsp);
2210
2211 if (!copy_to_user(ptr, &ir, sizeof(ir))) {
2212 ptr += sizeof(ir);
2213 if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
2214 ir.num_rsp))
2215 err = -EFAULT;
2216 } else
2217 err = -EFAULT;
2218
2219 kfree(buf);
2220
2221done:
2222 hci_dev_put(hdev);
2223 return err;
2224}
2225
2226static int hci_dev_do_open(struct hci_dev *hdev)
2227{
2228 int ret = 0;
2229
2230 BT_DBG("%s %p", hdev->name, hdev);
2231
2232 hci_req_lock(hdev);
2233
2234 if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) {
2235 ret = -ENODEV;
2236 goto done;
2237 }
2238
2239 if (!test_bit(HCI_SETUP, &hdev->dev_flags)) {
2240 /* Check for rfkill but allow the HCI setup stage to
2241 * proceed (which in itself doesn't cause any RF activity).
2242 */
2243 if (test_bit(HCI_RFKILLED, &hdev->dev_flags)) {
2244 ret = -ERFKILL;
2245 goto done;
2246 }
2247
2248 /* Check for valid public address or a configured static
2249 * random adddress, but let the HCI setup proceed to
2250 * be able to determine if there is a public address
2251 * or not.
2252 *
2253 * In case of user channel usage, it is not important
2254 * if a public address or static random address is
2255 * available.
2256 *
2257 * This check is only valid for BR/EDR controllers
2258 * since AMP controllers do not have an address.
2259 */
2260 if (!test_bit(HCI_USER_CHANNEL, &hdev->dev_flags) &&
2261 hdev->dev_type == HCI_BREDR &&
2262 !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
2263 !bacmp(&hdev->static_addr, BDADDR_ANY)) {
2264 ret = -EADDRNOTAVAIL;
2265 goto done;
2266 }
2267 }
2268
2269 if (test_bit(HCI_UP, &hdev->flags)) {
2270 ret = -EALREADY;
2271 goto done;
2272 }
2273
2274 if (hdev->open(hdev)) {
2275 ret = -EIO;
2276 goto done;
2277 }
2278
2279 atomic_set(&hdev->cmd_cnt, 1);
2280 set_bit(HCI_INIT, &hdev->flags);
2281
2282 if (hdev->setup && test_bit(HCI_SETUP, &hdev->dev_flags))
2283 ret = hdev->setup(hdev);
2284
2285 if (!ret) {
2286 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
2287 set_bit(HCI_RAW, &hdev->flags);
2288
2289 if (!test_bit(HCI_RAW, &hdev->flags) &&
2290 !test_bit(HCI_USER_CHANNEL, &hdev->dev_flags))
2291 ret = __hci_init(hdev);
2292 }
2293
2294 clear_bit(HCI_INIT, &hdev->flags);
2295
2296 if (!ret) {
2297 hci_dev_hold(hdev);
2298 set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
2299 set_bit(HCI_UP, &hdev->flags);
2300 hci_notify(hdev, HCI_DEV_UP);
2301 if (!test_bit(HCI_SETUP, &hdev->dev_flags) &&
2302 !test_bit(HCI_USER_CHANNEL, &hdev->dev_flags) &&
2303 hdev->dev_type == HCI_BREDR) {
2304 hci_dev_lock(hdev);
2305 mgmt_powered(hdev, 1);
2306 hci_dev_unlock(hdev);
2307 }
2308 } else {
2309 /* Init failed, cleanup */
2310 flush_work(&hdev->tx_work);
2311 flush_work(&hdev->cmd_work);
2312 flush_work(&hdev->rx_work);
2313
2314 skb_queue_purge(&hdev->cmd_q);
2315 skb_queue_purge(&hdev->rx_q);
2316
2317 if (hdev->flush)
2318 hdev->flush(hdev);
2319
2320 if (hdev->sent_cmd) {
2321 kfree_skb(hdev->sent_cmd);
2322 hdev->sent_cmd = NULL;
2323 }
2324
2325 hdev->close(hdev);
2326 hdev->flags = 0;
2327 }
2328
2329done:
2330 hci_req_unlock(hdev);
2331 return ret;
2332}
2333
2334/* ---- HCI ioctl helpers ---- */
2335
2336int hci_dev_open(__u16 dev)
2337{
2338 struct hci_dev *hdev;
2339 int err;
2340
2341 hdev = hci_dev_get(dev);
2342 if (!hdev)
2343 return -ENODEV;
2344
2345 /* We need to ensure that no other power on/off work is pending
2346 * before proceeding to call hci_dev_do_open. This is
2347 * particularly important if the setup procedure has not yet
2348 * completed.
2349 */
2350 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
2351 cancel_delayed_work(&hdev->power_off);
2352
2353 /* After this call it is guaranteed that the setup procedure
2354 * has finished. This means that error conditions like RFKILL
2355 * or no valid public or static random address apply.
2356 */
2357 flush_workqueue(hdev->req_workqueue);
2358
2359 err = hci_dev_do_open(hdev);
2360
2361 hci_dev_put(hdev);
2362
2363 return err;
2364}
2365
2366static int hci_dev_do_close(struct hci_dev *hdev)
2367{
2368 BT_DBG("%s %p", hdev->name, hdev);
2369
2370 cancel_delayed_work(&hdev->power_off);
2371
2372 hci_req_cancel(hdev, ENODEV);
2373 hci_req_lock(hdev);
2374
2375 if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
2376 del_timer_sync(&hdev->cmd_timer);
2377 hci_req_unlock(hdev);
2378 return 0;
2379 }
2380
2381 /* Flush RX and TX works */
2382 flush_work(&hdev->tx_work);
2383 flush_work(&hdev->rx_work);
2384
2385 if (hdev->discov_timeout > 0) {
2386 cancel_delayed_work(&hdev->discov_off);
2387 hdev->discov_timeout = 0;
2388 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
2389 clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags);
2390 }
2391
2392 if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
2393 cancel_delayed_work(&hdev->service_cache);
2394
2395 cancel_delayed_work_sync(&hdev->le_scan_disable);
2396
2397 if (test_bit(HCI_MGMT, &hdev->dev_flags))
2398 cancel_delayed_work_sync(&hdev->rpa_expired);
2399
2400 hci_dev_lock(hdev);
2401 hci_inquiry_cache_flush(hdev);
2402 hci_conn_hash_flush(hdev);
2403 hci_pend_le_conns_clear(hdev);
2404 hci_dev_unlock(hdev);
2405
2406 hci_notify(hdev, HCI_DEV_DOWN);
2407
2408 if (hdev->flush)
2409 hdev->flush(hdev);
2410
2411 /* Reset device */
2412 skb_queue_purge(&hdev->cmd_q);
2413 atomic_set(&hdev->cmd_cnt, 1);
2414 if (!test_bit(HCI_RAW, &hdev->flags) &&
2415 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags) &&
2416 test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks)) {
2417 set_bit(HCI_INIT, &hdev->flags);
2418 __hci_req_sync(hdev, hci_reset_req, 0, HCI_CMD_TIMEOUT);
2419 clear_bit(HCI_INIT, &hdev->flags);
2420 }
2421
2422 /* flush cmd work */
2423 flush_work(&hdev->cmd_work);
2424
2425 /* Drop queues */
2426 skb_queue_purge(&hdev->rx_q);
2427 skb_queue_purge(&hdev->cmd_q);
2428 skb_queue_purge(&hdev->raw_q);
2429
2430 /* Drop last sent command */
2431 if (hdev->sent_cmd) {
2432 del_timer_sync(&hdev->cmd_timer);
2433 kfree_skb(hdev->sent_cmd);
2434 hdev->sent_cmd = NULL;
2435 }
2436
2437 kfree_skb(hdev->recv_evt);
2438 hdev->recv_evt = NULL;
2439
2440 /* After this point our queues are empty
2441 * and no tasks are scheduled. */
2442 hdev->close(hdev);
2443
2444 /* Clear flags */
2445 hdev->flags = 0;
2446 hdev->dev_flags &= ~HCI_PERSISTENT_MASK;
2447
2448 if (!test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
2449 if (hdev->dev_type == HCI_BREDR) {
2450 hci_dev_lock(hdev);
2451 mgmt_powered(hdev, 0);
2452 hci_dev_unlock(hdev);
2453 }
2454 }
2455
2456 /* Controller radio is available but is currently powered down */
2457 hdev->amp_status = AMP_STATUS_POWERED_DOWN;
2458
2459 memset(hdev->eir, 0, sizeof(hdev->eir));
2460 memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
2461 bacpy(&hdev->random_addr, BDADDR_ANY);
2462
2463 hci_req_unlock(hdev);
2464
2465 hci_dev_put(hdev);
2466 return 0;
2467}
2468
2469int hci_dev_close(__u16 dev)
2470{
2471 struct hci_dev *hdev;
2472 int err;
2473
2474 hdev = hci_dev_get(dev);
2475 if (!hdev)
2476 return -ENODEV;
2477
2478 if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
2479 err = -EBUSY;
2480 goto done;
2481 }
2482
2483 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
2484 cancel_delayed_work(&hdev->power_off);
2485
2486 err = hci_dev_do_close(hdev);
2487
2488done:
2489 hci_dev_put(hdev);
2490 return err;
2491}
2492
2493int hci_dev_reset(__u16 dev)
2494{
2495 struct hci_dev *hdev;
2496 int ret = 0;
2497
2498 hdev = hci_dev_get(dev);
2499 if (!hdev)
2500 return -ENODEV;
2501
2502 hci_req_lock(hdev);
2503
2504 if (!test_bit(HCI_UP, &hdev->flags)) {
2505 ret = -ENETDOWN;
2506 goto done;
2507 }
2508
2509 if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
2510 ret = -EBUSY;
2511 goto done;
2512 }
2513
2514 /* Drop queues */
2515 skb_queue_purge(&hdev->rx_q);
2516 skb_queue_purge(&hdev->cmd_q);
2517
2518 hci_dev_lock(hdev);
2519 hci_inquiry_cache_flush(hdev);
2520 hci_conn_hash_flush(hdev);
2521 hci_dev_unlock(hdev);
2522
2523 if (hdev->flush)
2524 hdev->flush(hdev);
2525
2526 atomic_set(&hdev->cmd_cnt, 1);
2527 hdev->acl_cnt = 0; hdev->sco_cnt = 0; hdev->le_cnt = 0;
2528
2529 if (!test_bit(HCI_RAW, &hdev->flags))
2530 ret = __hci_req_sync(hdev, hci_reset_req, 0, HCI_INIT_TIMEOUT);
2531
2532done:
2533 hci_req_unlock(hdev);
2534 hci_dev_put(hdev);
2535 return ret;
2536}
2537
2538int hci_dev_reset_stat(__u16 dev)
2539{
2540 struct hci_dev *hdev;
2541 int ret = 0;
2542
2543 hdev = hci_dev_get(dev);
2544 if (!hdev)
2545 return -ENODEV;
2546
2547 if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
2548 ret = -EBUSY;
2549 goto done;
2550 }
2551
2552 memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
2553
2554done:
2555 hci_dev_put(hdev);
2556 return ret;
2557}
2558
2559int hci_dev_cmd(unsigned int cmd, void __user *arg)
2560{
2561 struct hci_dev *hdev;
2562 struct hci_dev_req dr;
2563 int err = 0;
2564
2565 if (copy_from_user(&dr, arg, sizeof(dr)))
2566 return -EFAULT;
2567
2568 hdev = hci_dev_get(dr.dev_id);
2569 if (!hdev)
2570 return -ENODEV;
2571
2572 if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
2573 err = -EBUSY;
2574 goto done;
2575 }
2576
2577 if (hdev->dev_type != HCI_BREDR) {
2578 err = -EOPNOTSUPP;
2579 goto done;
2580 }
2581
2582 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) {
2583 err = -EOPNOTSUPP;
2584 goto done;
2585 }
2586
2587 switch (cmd) {
2588 case HCISETAUTH:
2589 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
2590 HCI_INIT_TIMEOUT);
2591 break;
2592
2593 case HCISETENCRYPT:
2594 if (!lmp_encrypt_capable(hdev)) {
2595 err = -EOPNOTSUPP;
2596 break;
2597 }
2598
2599 if (!test_bit(HCI_AUTH, &hdev->flags)) {
2600 /* Auth must be enabled first */
2601 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
2602 HCI_INIT_TIMEOUT);
2603 if (err)
2604 break;
2605 }
2606
2607 err = hci_req_sync(hdev, hci_encrypt_req, dr.dev_opt,
2608 HCI_INIT_TIMEOUT);
2609 break;
2610
2611 case HCISETSCAN:
2612 err = hci_req_sync(hdev, hci_scan_req, dr.dev_opt,
2613 HCI_INIT_TIMEOUT);
2614 break;
2615
2616 case HCISETLINKPOL:
2617 err = hci_req_sync(hdev, hci_linkpol_req, dr.dev_opt,
2618 HCI_INIT_TIMEOUT);
2619 break;
2620
2621 case HCISETLINKMODE:
2622 hdev->link_mode = ((__u16) dr.dev_opt) &
2623 (HCI_LM_MASTER | HCI_LM_ACCEPT);
2624 break;
2625
2626 case HCISETPTYPE:
2627 hdev->pkt_type = (__u16) dr.dev_opt;
2628 break;
2629
2630 case HCISETACLMTU:
2631 hdev->acl_mtu = *((__u16 *) &dr.dev_opt + 1);
2632 hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
2633 break;
2634
2635 case HCISETSCOMTU:
2636 hdev->sco_mtu = *((__u16 *) &dr.dev_opt + 1);
2637 hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
2638 break;
2639
2640 default:
2641 err = -EINVAL;
2642 break;
2643 }
2644
2645done:
2646 hci_dev_put(hdev);
2647 return err;
2648}
2649
2650int hci_get_dev_list(void __user *arg)
2651{
2652 struct hci_dev *hdev;
2653 struct hci_dev_list_req *dl;
2654 struct hci_dev_req *dr;
2655 int n = 0, size, err;
2656 __u16 dev_num;
2657
2658 if (get_user(dev_num, (__u16 __user *) arg))
2659 return -EFAULT;
2660
2661 if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
2662 return -EINVAL;
2663
2664 size = sizeof(*dl) + dev_num * sizeof(*dr);
2665
2666 dl = kzalloc(size, GFP_KERNEL);
2667 if (!dl)
2668 return -ENOMEM;
2669
2670 dr = dl->dev_req;
2671
2672 read_lock(&hci_dev_list_lock);
2673 list_for_each_entry(hdev, &hci_dev_list, list) {
2674 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
2675 cancel_delayed_work(&hdev->power_off);
2676
2677 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2678 set_bit(HCI_PAIRABLE, &hdev->dev_flags);
2679
2680 (dr + n)->dev_id = hdev->id;
2681 (dr + n)->dev_opt = hdev->flags;
2682
2683 if (++n >= dev_num)
2684 break;
2685 }
2686 read_unlock(&hci_dev_list_lock);
2687
2688 dl->dev_num = n;
2689 size = sizeof(*dl) + n * sizeof(*dr);
2690
2691 err = copy_to_user(arg, dl, size);
2692 kfree(dl);
2693
2694 return err ? -EFAULT : 0;
2695}
2696
2697int hci_get_dev_info(void __user *arg)
2698{
2699 struct hci_dev *hdev;
2700 struct hci_dev_info di;
2701 int err = 0;
2702
2703 if (copy_from_user(&di, arg, sizeof(di)))
2704 return -EFAULT;
2705
2706 hdev = hci_dev_get(di.dev_id);
2707 if (!hdev)
2708 return -ENODEV;
2709
2710 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
2711 cancel_delayed_work_sync(&hdev->power_off);
2712
2713 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2714 set_bit(HCI_PAIRABLE, &hdev->dev_flags);
2715
2716 strcpy(di.name, hdev->name);
2717 di.bdaddr = hdev->bdaddr;
2718 di.type = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4);
2719 di.flags = hdev->flags;
2720 di.pkt_type = hdev->pkt_type;
2721 if (lmp_bredr_capable(hdev)) {
2722 di.acl_mtu = hdev->acl_mtu;
2723 di.acl_pkts = hdev->acl_pkts;
2724 di.sco_mtu = hdev->sco_mtu;
2725 di.sco_pkts = hdev->sco_pkts;
2726 } else {
2727 di.acl_mtu = hdev->le_mtu;
2728 di.acl_pkts = hdev->le_pkts;
2729 di.sco_mtu = 0;
2730 di.sco_pkts = 0;
2731 }
2732 di.link_policy = hdev->link_policy;
2733 di.link_mode = hdev->link_mode;
2734
2735 memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
2736 memcpy(&di.features, &hdev->features, sizeof(di.features));
2737
2738 if (copy_to_user(arg, &di, sizeof(di)))
2739 err = -EFAULT;
2740
2741 hci_dev_put(hdev);
2742
2743 return err;
2744}
2745
2746/* ---- Interface to HCI drivers ---- */
2747
2748static int hci_rfkill_set_block(void *data, bool blocked)
2749{
2750 struct hci_dev *hdev = data;
2751
2752 BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
2753
2754 if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags))
2755 return -EBUSY;
2756
2757 if (blocked) {
2758 set_bit(HCI_RFKILLED, &hdev->dev_flags);
2759 if (!test_bit(HCI_SETUP, &hdev->dev_flags))
2760 hci_dev_do_close(hdev);
2761 } else {
2762 clear_bit(HCI_RFKILLED, &hdev->dev_flags);
2763 }
2764
2765 return 0;
2766}
2767
2768static const struct rfkill_ops hci_rfkill_ops = {
2769 .set_block = hci_rfkill_set_block,
2770};
2771
2772static void hci_power_on(struct work_struct *work)
2773{
2774 struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
2775 int err;
2776
2777 BT_DBG("%s", hdev->name);
2778
2779 err = hci_dev_do_open(hdev);
2780 if (err < 0) {
2781 mgmt_set_powered_failed(hdev, err);
2782 return;
2783 }
2784
2785 /* During the HCI setup phase, a few error conditions are
2786 * ignored and they need to be checked now. If they are still
2787 * valid, it is important to turn the device back off.
2788 */
2789 if (test_bit(HCI_RFKILLED, &hdev->dev_flags) ||
2790 (hdev->dev_type == HCI_BREDR &&
2791 !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
2792 !bacmp(&hdev->static_addr, BDADDR_ANY))) {
2793 clear_bit(HCI_AUTO_OFF, &hdev->dev_flags);
2794 hci_dev_do_close(hdev);
2795 } else if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
2796 queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
2797 HCI_AUTO_OFF_TIMEOUT);
2798 }
2799
2800 if (test_and_clear_bit(HCI_SETUP, &hdev->dev_flags))
2801 mgmt_index_added(hdev);
2802}
2803
2804static void hci_power_off(struct work_struct *work)
2805{
2806 struct hci_dev *hdev = container_of(work, struct hci_dev,
2807 power_off.work);
2808
2809 BT_DBG("%s", hdev->name);
2810
2811 hci_dev_do_close(hdev);
2812}
2813
2814static void hci_discov_off(struct work_struct *work)
2815{
2816 struct hci_dev *hdev;
2817
2818 hdev = container_of(work, struct hci_dev, discov_off.work);
2819
2820 BT_DBG("%s", hdev->name);
2821
2822 mgmt_discoverable_timeout(hdev);
2823}
2824
2825void hci_uuids_clear(struct hci_dev *hdev)
2826{
2827 struct bt_uuid *uuid, *tmp;
2828
2829 list_for_each_entry_safe(uuid, tmp, &hdev->uuids, list) {
2830 list_del(&uuid->list);
2831 kfree(uuid);
2832 }
2833}
2834
2835void hci_link_keys_clear(struct hci_dev *hdev)
2836{
2837 struct list_head *p, *n;
2838
2839 list_for_each_safe(p, n, &hdev->link_keys) {
2840 struct link_key *key;
2841
2842 key = list_entry(p, struct link_key, list);
2843
2844 list_del(p);
2845 kfree(key);
2846 }
2847}
2848
2849void hci_smp_ltks_clear(struct hci_dev *hdev)
2850{
2851 struct smp_ltk *k, *tmp;
2852
2853 list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
2854 list_del(&k->list);
2855 kfree(k);
2856 }
2857}
2858
2859void hci_smp_irks_clear(struct hci_dev *hdev)
2860{
2861 struct smp_irk *k, *tmp;
2862
2863 list_for_each_entry_safe(k, tmp, &hdev->identity_resolving_keys, list) {
2864 list_del(&k->list);
2865 kfree(k);
2866 }
2867}
2868
2869struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
2870{
2871 struct link_key *k;
2872
2873 list_for_each_entry(k, &hdev->link_keys, list)
2874 if (bacmp(bdaddr, &k->bdaddr) == 0)
2875 return k;
2876
2877 return NULL;
2878}
2879
2880static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
2881 u8 key_type, u8 old_key_type)
2882{
2883 /* Legacy key */
2884 if (key_type < 0x03)
2885 return true;
2886
2887 /* Debug keys are insecure so don't store them persistently */
2888 if (key_type == HCI_LK_DEBUG_COMBINATION)
2889 return false;
2890
2891 /* Changed combination key and there's no previous one */
2892 if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
2893 return false;
2894
2895 /* Security mode 3 case */
2896 if (!conn)
2897 return true;
2898
2899 /* Neither local nor remote side had no-bonding as requirement */
2900 if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
2901 return true;
2902
2903 /* Local side had dedicated bonding as requirement */
2904 if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
2905 return true;
2906
2907 /* Remote side had dedicated bonding as requirement */
2908 if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
2909 return true;
2910
2911 /* If none of the above criteria match, then don't store the key
2912 * persistently */
2913 return false;
2914}
2915
2916static bool ltk_type_master(u8 type)
2917{
2918 if (type == HCI_SMP_STK || type == HCI_SMP_LTK)
2919 return true;
2920
2921 return false;
2922}
2923
2924struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand,
2925 bool master)
2926{
2927 struct smp_ltk *k;
2928
2929 list_for_each_entry(k, &hdev->long_term_keys, list) {
2930 if (k->ediv != ediv || k->rand != rand)
2931 continue;
2932
2933 if (ltk_type_master(k->type) != master)
2934 continue;
2935
2936 return k;
2937 }
2938
2939 return NULL;
2940}
2941
2942struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
2943 u8 addr_type, bool master)
2944{
2945 struct smp_ltk *k;
2946
2947 list_for_each_entry(k, &hdev->long_term_keys, list)
2948 if (addr_type == k->bdaddr_type &&
2949 bacmp(bdaddr, &k->bdaddr) == 0 &&
2950 ltk_type_master(k->type) == master)
2951 return k;
2952
2953 return NULL;
2954}
2955
2956struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa)
2957{
2958 struct smp_irk *irk;
2959
2960 list_for_each_entry(irk, &hdev->identity_resolving_keys, list) {
2961 if (!bacmp(&irk->rpa, rpa))
2962 return irk;
2963 }
2964
2965 list_for_each_entry(irk, &hdev->identity_resolving_keys, list) {
2966 if (smp_irk_matches(hdev->tfm_aes, irk->val, rpa)) {
2967 bacpy(&irk->rpa, rpa);
2968 return irk;
2969 }
2970 }
2971
2972 return NULL;
2973}
2974
2975struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
2976 u8 addr_type)
2977{
2978 struct smp_irk *irk;
2979
2980 /* Identity Address must be public or static random */
2981 if (addr_type == ADDR_LE_DEV_RANDOM && (bdaddr->b[5] & 0xc0) != 0xc0)
2982 return NULL;
2983
2984 list_for_each_entry(irk, &hdev->identity_resolving_keys, list) {
2985 if (addr_type == irk->addr_type &&
2986 bacmp(bdaddr, &irk->bdaddr) == 0)
2987 return irk;
2988 }
2989
2990 return NULL;
2991}
2992
2993int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
2994 bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)
2995{
2996 struct link_key *key, *old_key;
2997 u8 old_key_type;
2998 bool persistent;
2999
3000 old_key = hci_find_link_key(hdev, bdaddr);
3001 if (old_key) {
3002 old_key_type = old_key->type;
3003 key = old_key;
3004 } else {
3005 old_key_type = conn ? conn->key_type : 0xff;
3006 key = kzalloc(sizeof(*key), GFP_KERNEL);
3007 if (!key)
3008 return -ENOMEM;
3009 list_add(&key->list, &hdev->link_keys);
3010 }
3011
3012 BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type);
3013
3014 /* Some buggy controller combinations generate a changed
3015 * combination key for legacy pairing even when there's no
3016 * previous key */
3017 if (type == HCI_LK_CHANGED_COMBINATION &&
3018 (!conn || conn->remote_auth == 0xff) && old_key_type == 0xff) {
3019 type = HCI_LK_COMBINATION;
3020 if (conn)
3021 conn->key_type = type;
3022 }
3023
3024 bacpy(&key->bdaddr, bdaddr);
3025 memcpy(key->val, val, HCI_LINK_KEY_SIZE);
3026 key->pin_len = pin_len;
3027
3028 if (type == HCI_LK_CHANGED_COMBINATION)
3029 key->type = old_key_type;
3030 else
3031 key->type = type;
3032
3033 if (!new_key)
3034 return 0;
3035
3036 persistent = hci_persistent_key(hdev, conn, type, old_key_type);
3037
3038 mgmt_new_link_key(hdev, key, persistent);
3039
3040 if (conn)
3041 conn->flush_key = !persistent;
3042
3043 return 0;
3044}
3045
3046struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
3047 u8 addr_type, u8 type, u8 authenticated,
3048 u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand)
3049{
3050 struct smp_ltk *key, *old_key;
3051 bool master = ltk_type_master(type);
3052
3053 old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type, master);
3054 if (old_key)
3055 key = old_key;
3056 else {
3057 key = kzalloc(sizeof(*key), GFP_KERNEL);
3058 if (!key)
3059 return NULL;
3060 list_add(&key->list, &hdev->long_term_keys);
3061 }
3062
3063 bacpy(&key->bdaddr, bdaddr);
3064 key->bdaddr_type = addr_type;
3065 memcpy(key->val, tk, sizeof(key->val));
3066 key->authenticated = authenticated;
3067 key->ediv = ediv;
3068 key->rand = rand;
3069 key->enc_size = enc_size;
3070 key->type = type;
3071
3072 return key;
3073}
3074
3075struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
3076 u8 addr_type, u8 val[16], bdaddr_t *rpa)
3077{
3078 struct smp_irk *irk;
3079
3080 irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type);
3081 if (!irk) {
3082 irk = kzalloc(sizeof(*irk), GFP_KERNEL);
3083 if (!irk)
3084 return NULL;
3085
3086 bacpy(&irk->bdaddr, bdaddr);
3087 irk->addr_type = addr_type;
3088
3089 list_add(&irk->list, &hdev->identity_resolving_keys);
3090 }
3091
3092 memcpy(irk->val, val, 16);
3093 bacpy(&irk->rpa, rpa);
3094
3095 return irk;
3096}
3097
3098int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
3099{
3100 struct link_key *key;
3101
3102 key = hci_find_link_key(hdev, bdaddr);
3103 if (!key)
3104 return -ENOENT;
3105
3106 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
3107
3108 list_del(&key->list);
3109 kfree(key);
3110
3111 return 0;
3112}
3113
3114int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type)
3115{
3116 struct smp_ltk *k, *tmp;
3117 int removed = 0;
3118
3119 list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
3120 if (bacmp(bdaddr, &k->bdaddr) || k->bdaddr_type != bdaddr_type)
3121 continue;
3122
3123 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
3124
3125 list_del(&k->list);
3126 kfree(k);
3127 removed++;
3128 }
3129
3130 return removed ? 0 : -ENOENT;
3131}
3132
3133void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type)
3134{
3135 struct smp_irk *k, *tmp;
3136
3137 list_for_each_entry_safe(k, tmp, &hdev->identity_resolving_keys, list) {
3138 if (bacmp(bdaddr, &k->bdaddr) || k->addr_type != addr_type)
3139 continue;
3140
3141 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
3142
3143 list_del(&k->list);
3144 kfree(k);
3145 }
3146}
3147
3148/* HCI command timer function */
3149static void hci_cmd_timeout(unsigned long arg)
3150{
3151 struct hci_dev *hdev = (void *) arg;
3152
3153 if (hdev->sent_cmd) {
3154 struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data;
3155 u16 opcode = __le16_to_cpu(sent->opcode);
3156
3157 BT_ERR("%s command 0x%4.4x tx timeout", hdev->name, opcode);
3158 } else {
3159 BT_ERR("%s command tx timeout", hdev->name);
3160 }
3161
3162 atomic_set(&hdev->cmd_cnt, 1);
3163 queue_work(hdev->workqueue, &hdev->cmd_work);
3164}
3165
3166struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
3167 bdaddr_t *bdaddr)
3168{
3169 struct oob_data *data;
3170
3171 list_for_each_entry(data, &hdev->remote_oob_data, list)
3172 if (bacmp(bdaddr, &data->bdaddr) == 0)
3173 return data;
3174
3175 return NULL;
3176}
3177
3178int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr)
3179{
3180 struct oob_data *data;
3181
3182 data = hci_find_remote_oob_data(hdev, bdaddr);
3183 if (!data)
3184 return -ENOENT;
3185
3186 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
3187
3188 list_del(&data->list);
3189 kfree(data);
3190
3191 return 0;
3192}
3193
3194void hci_remote_oob_data_clear(struct hci_dev *hdev)
3195{
3196 struct oob_data *data, *n;
3197
3198 list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
3199 list_del(&data->list);
3200 kfree(data);
3201 }
3202}
3203
3204int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
3205 u8 *hash, u8 *randomizer)
3206{
3207 struct oob_data *data;
3208
3209 data = hci_find_remote_oob_data(hdev, bdaddr);
3210 if (!data) {
3211 data = kmalloc(sizeof(*data), GFP_KERNEL);
3212 if (!data)
3213 return -ENOMEM;
3214
3215 bacpy(&data->bdaddr, bdaddr);
3216 list_add(&data->list, &hdev->remote_oob_data);
3217 }
3218
3219 memcpy(data->hash192, hash, sizeof(data->hash192));
3220 memcpy(data->randomizer192, randomizer, sizeof(data->randomizer192));
3221
3222 memset(data->hash256, 0, sizeof(data->hash256));
3223 memset(data->randomizer256, 0, sizeof(data->randomizer256));
3224
3225 BT_DBG("%s for %pMR", hdev->name, bdaddr);
3226
3227 return 0;
3228}
3229
3230int hci_add_remote_oob_ext_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
3231 u8 *hash192, u8 *randomizer192,
3232 u8 *hash256, u8 *randomizer256)
3233{
3234 struct oob_data *data;
3235
3236 data = hci_find_remote_oob_data(hdev, bdaddr);
3237 if (!data) {
3238 data = kmalloc(sizeof(*data), GFP_KERNEL);
3239 if (!data)
3240 return -ENOMEM;
3241
3242 bacpy(&data->bdaddr, bdaddr);
3243 list_add(&data->list, &hdev->remote_oob_data);
3244 }
3245
3246 memcpy(data->hash192, hash192, sizeof(data->hash192));
3247 memcpy(data->randomizer192, randomizer192, sizeof(data->randomizer192));
3248
3249 memcpy(data->hash256, hash256, sizeof(data->hash256));
3250 memcpy(data->randomizer256, randomizer256, sizeof(data->randomizer256));
3251
3252 BT_DBG("%s for %pMR", hdev->name, bdaddr);
3253
3254 return 0;
3255}
3256
3257struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev,
3258 bdaddr_t *bdaddr, u8 type)
3259{
3260 struct bdaddr_list *b;
3261
3262 list_for_each_entry(b, &hdev->blacklist, list) {
3263 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
3264 return b;
3265 }
3266
3267 return NULL;
3268}
3269
3270static void hci_blacklist_clear(struct hci_dev *hdev)
3271{
3272 struct list_head *p, *n;
3273
3274 list_for_each_safe(p, n, &hdev->blacklist) {
3275 struct bdaddr_list *b = list_entry(p, struct bdaddr_list, list);
3276
3277 list_del(p);
3278 kfree(b);
3279 }
3280}
3281
3282int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3283{
3284 struct bdaddr_list *entry;
3285
3286 if (!bacmp(bdaddr, BDADDR_ANY))
3287 return -EBADF;
3288
3289 if (hci_blacklist_lookup(hdev, bdaddr, type))
3290 return -EEXIST;
3291
3292 entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL);
3293 if (!entry)
3294 return -ENOMEM;
3295
3296 bacpy(&entry->bdaddr, bdaddr);
3297 entry->bdaddr_type = type;
3298
3299 list_add(&entry->list, &hdev->blacklist);
3300
3301 return mgmt_device_blocked(hdev, bdaddr, type);
3302}
3303
3304int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3305{
3306 struct bdaddr_list *entry;
3307
3308 if (!bacmp(bdaddr, BDADDR_ANY)) {
3309 hci_blacklist_clear(hdev);
3310 return 0;
3311 }
3312
3313 entry = hci_blacklist_lookup(hdev, bdaddr, type);
3314 if (!entry)
3315 return -ENOENT;
3316
3317 list_del(&entry->list);
3318 kfree(entry);
3319
3320 return mgmt_device_unblocked(hdev, bdaddr, type);
3321}
3322
3323struct bdaddr_list *hci_white_list_lookup(struct hci_dev *hdev,
3324 bdaddr_t *bdaddr, u8 type)
3325{
3326 struct bdaddr_list *b;
3327
3328 list_for_each_entry(b, &hdev->le_white_list, list) {
3329 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
3330 return b;
3331 }
3332
3333 return NULL;
3334}
3335
3336void hci_white_list_clear(struct hci_dev *hdev)
3337{
3338 struct list_head *p, *n;
3339
3340 list_for_each_safe(p, n, &hdev->le_white_list) {
3341 struct bdaddr_list *b = list_entry(p, struct bdaddr_list, list);
3342
3343 list_del(p);
3344 kfree(b);
3345 }
3346}
3347
3348int hci_white_list_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3349{
3350 struct bdaddr_list *entry;
3351
3352 if (!bacmp(bdaddr, BDADDR_ANY))
3353 return -EBADF;
3354
3355 entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL);
3356 if (!entry)
3357 return -ENOMEM;
3358
3359 bacpy(&entry->bdaddr, bdaddr);
3360 entry->bdaddr_type = type;
3361
3362 list_add(&entry->list, &hdev->le_white_list);
3363
3364 return 0;
3365}
3366
3367int hci_white_list_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3368{
3369 struct bdaddr_list *entry;
3370
3371 if (!bacmp(bdaddr, BDADDR_ANY))
3372 return -EBADF;
3373
3374 entry = hci_white_list_lookup(hdev, bdaddr, type);
3375 if (!entry)
3376 return -ENOENT;
3377
3378 list_del(&entry->list);
3379 kfree(entry);
3380
3381 return 0;
3382}
3383
3384/* This function requires the caller holds hdev->lock */
3385struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
3386 bdaddr_t *addr, u8 addr_type)
3387{
3388 struct hci_conn_params *params;
3389
3390 list_for_each_entry(params, &hdev->le_conn_params, list) {
3391 if (bacmp(¶ms->addr, addr) == 0 &&
3392 params->addr_type == addr_type) {
3393 return params;
3394 }
3395 }
3396
3397 return NULL;
3398}
3399
3400static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
3401{
3402 struct hci_conn *conn;
3403
3404 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, addr);
3405 if (!conn)
3406 return false;
3407
3408 if (conn->dst_type != type)
3409 return false;
3410
3411 if (conn->state != BT_CONNECTED)
3412 return false;
3413
3414 return true;
3415}
3416
3417static bool is_identity_address(bdaddr_t *addr, u8 addr_type)
3418{
3419 if (addr_type == ADDR_LE_DEV_PUBLIC)
3420 return true;
3421
3422 /* Check for Random Static address type */
3423 if ((addr->b[5] & 0xc0) == 0xc0)
3424 return true;
3425
3426 return false;
3427}
3428
3429/* This function requires the caller holds hdev->lock */
3430int hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
3431 u8 auto_connect, u16 conn_min_interval,
3432 u16 conn_max_interval)
3433{
3434 struct hci_conn_params *params;
3435
3436 if (!is_identity_address(addr, addr_type))
3437 return -EINVAL;
3438
3439 params = hci_conn_params_lookup(hdev, addr, addr_type);
3440 if (params)
3441 goto update;
3442
3443 params = kzalloc(sizeof(*params), GFP_KERNEL);
3444 if (!params) {
3445 BT_ERR("Out of memory");
3446 return -ENOMEM;
3447 }
3448
3449 bacpy(¶ms->addr, addr);
3450 params->addr_type = addr_type;
3451
3452 list_add(¶ms->list, &hdev->le_conn_params);
3453
3454update:
3455 params->conn_min_interval = conn_min_interval;
3456 params->conn_max_interval = conn_max_interval;
3457 params->auto_connect = auto_connect;
3458
3459 switch (auto_connect) {
3460 case HCI_AUTO_CONN_DISABLED:
3461 case HCI_AUTO_CONN_LINK_LOSS:
3462 hci_pend_le_conn_del(hdev, addr, addr_type);
3463 break;
3464 case HCI_AUTO_CONN_ALWAYS:
3465 if (!is_connected(hdev, addr, addr_type))
3466 hci_pend_le_conn_add(hdev, addr, addr_type);
3467 break;
3468 }
3469
3470 BT_DBG("addr %pMR (type %u) auto_connect %u conn_min_interval 0x%.4x "
3471 "conn_max_interval 0x%.4x", addr, addr_type, auto_connect,
3472 conn_min_interval, conn_max_interval);
3473
3474 return 0;
3475}
3476
3477/* This function requires the caller holds hdev->lock */
3478void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
3479{
3480 struct hci_conn_params *params;
3481
3482 params = hci_conn_params_lookup(hdev, addr, addr_type);
3483 if (!params)
3484 return;
3485
3486 hci_pend_le_conn_del(hdev, addr, addr_type);
3487
3488 list_del(¶ms->list);
3489 kfree(params);
3490
3491 BT_DBG("addr %pMR (type %u)", addr, addr_type);
3492}
3493
3494/* This function requires the caller holds hdev->lock */
3495void hci_conn_params_clear(struct hci_dev *hdev)
3496{
3497 struct hci_conn_params *params, *tmp;
3498
3499 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
3500 list_del(¶ms->list);
3501 kfree(params);
3502 }
3503
3504 BT_DBG("All LE connection parameters were removed");
3505}
3506
3507/* This function requires the caller holds hdev->lock */
3508struct bdaddr_list *hci_pend_le_conn_lookup(struct hci_dev *hdev,
3509 bdaddr_t *addr, u8 addr_type)
3510{
3511 struct bdaddr_list *entry;
3512
3513 list_for_each_entry(entry, &hdev->pend_le_conns, list) {
3514 if (bacmp(&entry->bdaddr, addr) == 0 &&
3515 entry->bdaddr_type == addr_type)
3516 return entry;
3517 }
3518
3519 return NULL;
3520}
3521
3522/* This function requires the caller holds hdev->lock */
3523void hci_pend_le_conn_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
3524{
3525 struct bdaddr_list *entry;
3526
3527 entry = hci_pend_le_conn_lookup(hdev, addr, addr_type);
3528 if (entry)
3529 goto done;
3530
3531 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
3532 if (!entry) {
3533 BT_ERR("Out of memory");
3534 return;
3535 }
3536
3537 bacpy(&entry->bdaddr, addr);
3538 entry->bdaddr_type = addr_type;
3539
3540 list_add(&entry->list, &hdev->pend_le_conns);
3541
3542 BT_DBG("addr %pMR (type %u)", addr, addr_type);
3543
3544done:
3545 hci_update_background_scan(hdev);
3546}
3547
3548/* This function requires the caller holds hdev->lock */
3549void hci_pend_le_conn_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
3550{
3551 struct bdaddr_list *entry;
3552
3553 entry = hci_pend_le_conn_lookup(hdev, addr, addr_type);
3554 if (!entry)
3555 goto done;
3556
3557 list_del(&entry->list);
3558 kfree(entry);
3559
3560 BT_DBG("addr %pMR (type %u)", addr, addr_type);
3561
3562done:
3563 hci_update_background_scan(hdev);
3564}
3565
3566/* This function requires the caller holds hdev->lock */
3567void hci_pend_le_conns_clear(struct hci_dev *hdev)
3568{
3569 struct bdaddr_list *entry, *tmp;
3570
3571 list_for_each_entry_safe(entry, tmp, &hdev->pend_le_conns, list) {
3572 list_del(&entry->list);
3573 kfree(entry);
3574 }
3575
3576 BT_DBG("All LE pending connections cleared");
3577}
3578
3579static void inquiry_complete(struct hci_dev *hdev, u8 status)
3580{
3581 if (status) {
3582 BT_ERR("Failed to start inquiry: status %d", status);
3583
3584 hci_dev_lock(hdev);
3585 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3586 hci_dev_unlock(hdev);
3587 return;
3588 }
3589}
3590
3591static void le_scan_disable_work_complete(struct hci_dev *hdev, u8 status)
3592{
3593 /* General inquiry access code (GIAC) */
3594 u8 lap[3] = { 0x33, 0x8b, 0x9e };
3595 struct hci_request req;
3596 struct hci_cp_inquiry cp;
3597 int err;
3598
3599 if (status) {
3600 BT_ERR("Failed to disable LE scanning: status %d", status);
3601 return;
3602 }
3603
3604 switch (hdev->discovery.type) {
3605 case DISCOV_TYPE_LE:
3606 hci_dev_lock(hdev);
3607 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3608 hci_dev_unlock(hdev);
3609 break;
3610
3611 case DISCOV_TYPE_INTERLEAVED:
3612 hci_req_init(&req, hdev);
3613
3614 memset(&cp, 0, sizeof(cp));
3615 memcpy(&cp.lap, lap, sizeof(cp.lap));
3616 cp.length = DISCOV_INTERLEAVED_INQUIRY_LEN;
3617 hci_req_add(&req, HCI_OP_INQUIRY, sizeof(cp), &cp);
3618
3619 hci_dev_lock(hdev);
3620
3621 hci_inquiry_cache_flush(hdev);
3622
3623 err = hci_req_run(&req, inquiry_complete);
3624 if (err) {
3625 BT_ERR("Inquiry request failed: err %d", err);
3626 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3627 }
3628
3629 hci_dev_unlock(hdev);
3630 break;
3631 }
3632}
3633
3634static void le_scan_disable_work(struct work_struct *work)
3635{
3636 struct hci_dev *hdev = container_of(work, struct hci_dev,
3637 le_scan_disable.work);
3638 struct hci_request req;
3639 int err;
3640
3641 BT_DBG("%s", hdev->name);
3642
3643 hci_req_init(&req, hdev);
3644
3645 hci_req_add_le_scan_disable(&req);
3646
3647 err = hci_req_run(&req, le_scan_disable_work_complete);
3648 if (err)
3649 BT_ERR("Disable LE scanning request failed: err %d", err);
3650}
3651
3652static void set_random_addr(struct hci_request *req, bdaddr_t *rpa)
3653{
3654 struct hci_dev *hdev = req->hdev;
3655
3656 /* If we're advertising or initiating an LE connection we can't
3657 * go ahead and change the random address at this time. This is
3658 * because the eventual initiator address used for the
3659 * subsequently created connection will be undefined (some
3660 * controllers use the new address and others the one we had
3661 * when the operation started).
3662 *
3663 * In this kind of scenario skip the update and let the random
3664 * address be updated at the next cycle.
3665 */
3666 if (test_bit(HCI_ADVERTISING, &hdev->dev_flags) ||
3667 hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT)) {
3668 BT_DBG("Deferring random address update");
3669 return;
3670 }
3671
3672 hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, rpa);
3673}
3674
3675int hci_update_random_address(struct hci_request *req, bool require_privacy,
3676 u8 *own_addr_type)
3677{
3678 struct hci_dev *hdev = req->hdev;
3679 int err;
3680
3681 /* If privacy is enabled use a resolvable private address. If
3682 * current RPA has expired or there is something else than
3683 * the current RPA in use, then generate a new one.
3684 */
3685 if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) {
3686 int to;
3687
3688 *own_addr_type = ADDR_LE_DEV_RANDOM;
3689
3690 if (!test_and_clear_bit(HCI_RPA_EXPIRED, &hdev->dev_flags) &&
3691 !bacmp(&hdev->random_addr, &hdev->rpa))
3692 return 0;
3693
3694 err = smp_generate_rpa(hdev->tfm_aes, hdev->irk, &hdev->rpa);
3695 if (err < 0) {
3696 BT_ERR("%s failed to generate new RPA", hdev->name);
3697 return err;
3698 }
3699
3700 set_random_addr(req, &hdev->rpa);
3701
3702 to = msecs_to_jiffies(hdev->rpa_timeout * 1000);
3703 queue_delayed_work(hdev->workqueue, &hdev->rpa_expired, to);
3704
3705 return 0;
3706 }
3707
3708 /* In case of required privacy without resolvable private address,
3709 * use an unresolvable private address. This is useful for active
3710 * scanning and non-connectable advertising.
3711 */
3712 if (require_privacy) {
3713 bdaddr_t urpa;
3714
3715 get_random_bytes(&urpa, 6);
3716 urpa.b[5] &= 0x3f; /* Clear two most significant bits */
3717
3718 *own_addr_type = ADDR_LE_DEV_RANDOM;
3719 set_random_addr(req, &urpa);
3720 return 0;
3721 }
3722
3723 /* If forcing static address is in use or there is no public
3724 * address use the static address as random address (but skip
3725 * the HCI command if the current random address is already the
3726 * static one.
3727 */
3728 if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dev_flags) ||
3729 !bacmp(&hdev->bdaddr, BDADDR_ANY)) {
3730 *own_addr_type = ADDR_LE_DEV_RANDOM;
3731 if (bacmp(&hdev->static_addr, &hdev->random_addr))
3732 hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6,
3733 &hdev->static_addr);
3734 return 0;
3735 }
3736
3737 /* Neither privacy nor static address is being used so use a
3738 * public address.
3739 */
3740 *own_addr_type = ADDR_LE_DEV_PUBLIC;
3741
3742 return 0;
3743}
3744
3745/* Copy the Identity Address of the controller.
3746 *
3747 * If the controller has a public BD_ADDR, then by default use that one.
3748 * If this is a LE only controller without a public address, default to
3749 * the static random address.
3750 *
3751 * For debugging purposes it is possible to force controllers with a
3752 * public address to use the static random address instead.
3753 */
3754void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
3755 u8 *bdaddr_type)
3756{
3757 if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dev_flags) ||
3758 !bacmp(&hdev->bdaddr, BDADDR_ANY)) {
3759 bacpy(bdaddr, &hdev->static_addr);
3760 *bdaddr_type = ADDR_LE_DEV_RANDOM;
3761 } else {
3762 bacpy(bdaddr, &hdev->bdaddr);
3763 *bdaddr_type = ADDR_LE_DEV_PUBLIC;
3764 }
3765}
3766
3767/* Alloc HCI device */
3768struct hci_dev *hci_alloc_dev(void)
3769{
3770 struct hci_dev *hdev;
3771
3772 hdev = kzalloc(sizeof(struct hci_dev), GFP_KERNEL);
3773 if (!hdev)
3774 return NULL;
3775
3776 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
3777 hdev->esco_type = (ESCO_HV1);
3778 hdev->link_mode = (HCI_LM_ACCEPT);
3779 hdev->num_iac = 0x01; /* One IAC support is mandatory */
3780 hdev->io_capability = 0x03; /* No Input No Output */
3781 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
3782 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
3783
3784 hdev->sniff_max_interval = 800;
3785 hdev->sniff_min_interval = 80;
3786
3787 hdev->le_adv_channel_map = 0x07;
3788 hdev->le_scan_interval = 0x0060;
3789 hdev->le_scan_window = 0x0030;
3790 hdev->le_conn_min_interval = 0x0028;
3791 hdev->le_conn_max_interval = 0x0038;
3792
3793 hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT;
3794
3795 mutex_init(&hdev->lock);
3796 mutex_init(&hdev->req_lock);
3797
3798 INIT_LIST_HEAD(&hdev->mgmt_pending);
3799 INIT_LIST_HEAD(&hdev->blacklist);
3800 INIT_LIST_HEAD(&hdev->uuids);
3801 INIT_LIST_HEAD(&hdev->link_keys);
3802 INIT_LIST_HEAD(&hdev->long_term_keys);
3803 INIT_LIST_HEAD(&hdev->identity_resolving_keys);
3804 INIT_LIST_HEAD(&hdev->remote_oob_data);
3805 INIT_LIST_HEAD(&hdev->le_white_list);
3806 INIT_LIST_HEAD(&hdev->le_conn_params);
3807 INIT_LIST_HEAD(&hdev->pend_le_conns);
3808 INIT_LIST_HEAD(&hdev->conn_hash.list);
3809
3810 INIT_WORK(&hdev->rx_work, hci_rx_work);
3811 INIT_WORK(&hdev->cmd_work, hci_cmd_work);
3812 INIT_WORK(&hdev->tx_work, hci_tx_work);
3813 INIT_WORK(&hdev->power_on, hci_power_on);
3814
3815 INIT_DELAYED_WORK(&hdev->power_off, hci_power_off);
3816 INIT_DELAYED_WORK(&hdev->discov_off, hci_discov_off);
3817 INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work);
3818
3819 skb_queue_head_init(&hdev->rx_q);
3820 skb_queue_head_init(&hdev->cmd_q);
3821 skb_queue_head_init(&hdev->raw_q);
3822
3823 init_waitqueue_head(&hdev->req_wait_q);
3824
3825 setup_timer(&hdev->cmd_timer, hci_cmd_timeout, (unsigned long) hdev);
3826
3827 hci_init_sysfs(hdev);
3828 discovery_init(hdev);
3829
3830 return hdev;
3831}
3832EXPORT_SYMBOL(hci_alloc_dev);
3833
3834/* Free HCI device */
3835void hci_free_dev(struct hci_dev *hdev)
3836{
3837 /* will free via device release */
3838 put_device(&hdev->dev);
3839}
3840EXPORT_SYMBOL(hci_free_dev);
3841
3842/* Register HCI device */
3843int hci_register_dev(struct hci_dev *hdev)
3844{
3845 int id, error;
3846
3847 if (!hdev->open || !hdev->close)
3848 return -EINVAL;
3849
3850 /* Do not allow HCI_AMP devices to register at index 0,
3851 * so the index can be used as the AMP controller ID.
3852 */
3853 switch (hdev->dev_type) {
3854 case HCI_BREDR:
3855 id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL);
3856 break;
3857 case HCI_AMP:
3858 id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL);
3859 break;
3860 default:
3861 return -EINVAL;
3862 }
3863
3864 if (id < 0)
3865 return id;
3866
3867 sprintf(hdev->name, "hci%d", id);
3868 hdev->id = id;
3869
3870 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
3871
3872 hdev->workqueue = alloc_workqueue("%s", WQ_HIGHPRI | WQ_UNBOUND |
3873 WQ_MEM_RECLAIM, 1, hdev->name);
3874 if (!hdev->workqueue) {
3875 error = -ENOMEM;
3876 goto err;
3877 }
3878
3879 hdev->req_workqueue = alloc_workqueue("%s", WQ_HIGHPRI | WQ_UNBOUND |
3880 WQ_MEM_RECLAIM, 1, hdev->name);
3881 if (!hdev->req_workqueue) {
3882 destroy_workqueue(hdev->workqueue);
3883 error = -ENOMEM;
3884 goto err;
3885 }
3886
3887 if (!IS_ERR_OR_NULL(bt_debugfs))
3888 hdev->debugfs = debugfs_create_dir(hdev->name, bt_debugfs);
3889
3890 dev_set_name(&hdev->dev, "%s", hdev->name);
3891
3892 hdev->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0,
3893 CRYPTO_ALG_ASYNC);
3894 if (IS_ERR(hdev->tfm_aes)) {
3895 BT_ERR("Unable to create crypto context");
3896 error = PTR_ERR(hdev->tfm_aes);
3897 hdev->tfm_aes = NULL;
3898 goto err_wqueue;
3899 }
3900
3901 error = device_add(&hdev->dev);
3902 if (error < 0)
3903 goto err_tfm;
3904
3905 hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
3906 RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops,
3907 hdev);
3908 if (hdev->rfkill) {
3909 if (rfkill_register(hdev->rfkill) < 0) {
3910 rfkill_destroy(hdev->rfkill);
3911 hdev->rfkill = NULL;
3912 }
3913 }
3914
3915 if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
3916 set_bit(HCI_RFKILLED, &hdev->dev_flags);
3917
3918 set_bit(HCI_SETUP, &hdev->dev_flags);
3919 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
3920
3921 if (hdev->dev_type == HCI_BREDR) {
3922 /* Assume BR/EDR support until proven otherwise (such as
3923 * through reading supported features during init.
3924 */
3925 set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
3926 }
3927
3928 write_lock(&hci_dev_list_lock);
3929 list_add(&hdev->list, &hci_dev_list);
3930 write_unlock(&hci_dev_list_lock);
3931
3932 hci_notify(hdev, HCI_DEV_REG);
3933 hci_dev_hold(hdev);
3934
3935 queue_work(hdev->req_workqueue, &hdev->power_on);
3936
3937 return id;
3938
3939err_tfm:
3940 crypto_free_blkcipher(hdev->tfm_aes);
3941err_wqueue:
3942 destroy_workqueue(hdev->workqueue);
3943 destroy_workqueue(hdev->req_workqueue);
3944err:
3945 ida_simple_remove(&hci_index_ida, hdev->id);
3946
3947 return error;
3948}
3949EXPORT_SYMBOL(hci_register_dev);
3950
3951/* Unregister HCI device */
3952void hci_unregister_dev(struct hci_dev *hdev)
3953{
3954 int i, id;
3955
3956 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
3957
3958 set_bit(HCI_UNREGISTER, &hdev->dev_flags);
3959
3960 id = hdev->id;
3961
3962 write_lock(&hci_dev_list_lock);
3963 list_del(&hdev->list);
3964 write_unlock(&hci_dev_list_lock);
3965
3966 hci_dev_do_close(hdev);
3967
3968 for (i = 0; i < NUM_REASSEMBLY; i++)
3969 kfree_skb(hdev->reassembly[i]);
3970
3971 cancel_work_sync(&hdev->power_on);
3972
3973 if (!test_bit(HCI_INIT, &hdev->flags) &&
3974 !test_bit(HCI_SETUP, &hdev->dev_flags)) {
3975 hci_dev_lock(hdev);
3976 mgmt_index_removed(hdev);
3977 hci_dev_unlock(hdev);
3978 }
3979
3980 /* mgmt_index_removed should take care of emptying the
3981 * pending list */
3982 BUG_ON(!list_empty(&hdev->mgmt_pending));
3983
3984 hci_notify(hdev, HCI_DEV_UNREG);
3985
3986 if (hdev->rfkill) {
3987 rfkill_unregister(hdev->rfkill);
3988 rfkill_destroy(hdev->rfkill);
3989 }
3990
3991 if (hdev->tfm_aes)
3992 crypto_free_blkcipher(hdev->tfm_aes);
3993
3994 device_del(&hdev->dev);
3995
3996 debugfs_remove_recursive(hdev->debugfs);
3997
3998 destroy_workqueue(hdev->workqueue);
3999 destroy_workqueue(hdev->req_workqueue);
4000
4001 hci_dev_lock(hdev);
4002 hci_blacklist_clear(hdev);
4003 hci_uuids_clear(hdev);
4004 hci_link_keys_clear(hdev);
4005 hci_smp_ltks_clear(hdev);
4006 hci_smp_irks_clear(hdev);
4007 hci_remote_oob_data_clear(hdev);
4008 hci_white_list_clear(hdev);
4009 hci_conn_params_clear(hdev);
4010 hci_pend_le_conns_clear(hdev);
4011 hci_dev_unlock(hdev);
4012
4013 hci_dev_put(hdev);
4014
4015 ida_simple_remove(&hci_index_ida, id);
4016}
4017EXPORT_SYMBOL(hci_unregister_dev);
4018
4019/* Suspend HCI device */
4020int hci_suspend_dev(struct hci_dev *hdev)
4021{
4022 hci_notify(hdev, HCI_DEV_SUSPEND);
4023 return 0;
4024}
4025EXPORT_SYMBOL(hci_suspend_dev);
4026
4027/* Resume HCI device */
4028int hci_resume_dev(struct hci_dev *hdev)
4029{
4030 hci_notify(hdev, HCI_DEV_RESUME);
4031 return 0;
4032}
4033EXPORT_SYMBOL(hci_resume_dev);
4034
4035/* Receive frame from HCI drivers */
4036int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb)
4037{
4038 if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
4039 && !test_bit(HCI_INIT, &hdev->flags))) {
4040 kfree_skb(skb);
4041 return -ENXIO;
4042 }
4043
4044 /* Incoming skb */
4045 bt_cb(skb)->incoming = 1;
4046
4047 /* Time stamp */
4048 __net_timestamp(skb);
4049
4050 skb_queue_tail(&hdev->rx_q, skb);
4051 queue_work(hdev->workqueue, &hdev->rx_work);
4052
4053 return 0;
4054}
4055EXPORT_SYMBOL(hci_recv_frame);
4056
4057static int hci_reassembly(struct hci_dev *hdev, int type, void *data,
4058 int count, __u8 index)
4059{
4060 int len = 0;
4061 int hlen = 0;
4062 int remain = count;
4063 struct sk_buff *skb;
4064 struct bt_skb_cb *scb;
4065
4066 if ((type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT) ||
4067 index >= NUM_REASSEMBLY)
4068 return -EILSEQ;
4069
4070 skb = hdev->reassembly[index];
4071
4072 if (!skb) {
4073 switch (type) {
4074 case HCI_ACLDATA_PKT:
4075 len = HCI_MAX_FRAME_SIZE;
4076 hlen = HCI_ACL_HDR_SIZE;
4077 break;
4078 case HCI_EVENT_PKT:
4079 len = HCI_MAX_EVENT_SIZE;
4080 hlen = HCI_EVENT_HDR_SIZE;
4081 break;
4082 case HCI_SCODATA_PKT:
4083 len = HCI_MAX_SCO_SIZE;
4084 hlen = HCI_SCO_HDR_SIZE;
4085 break;
4086 }
4087
4088 skb = bt_skb_alloc(len, GFP_ATOMIC);
4089 if (!skb)
4090 return -ENOMEM;
4091
4092 scb = (void *) skb->cb;
4093 scb->expect = hlen;
4094 scb->pkt_type = type;
4095
4096 hdev->reassembly[index] = skb;
4097 }
4098
4099 while (count) {
4100 scb = (void *) skb->cb;
4101 len = min_t(uint, scb->expect, count);
4102
4103 memcpy(skb_put(skb, len), data, len);
4104
4105 count -= len;
4106 data += len;
4107 scb->expect -= len;
4108 remain = count;
4109
4110 switch (type) {
4111 case HCI_EVENT_PKT:
4112 if (skb->len == HCI_EVENT_HDR_SIZE) {
4113 struct hci_event_hdr *h = hci_event_hdr(skb);
4114 scb->expect = h->plen;
4115
4116 if (skb_tailroom(skb) < scb->expect) {
4117 kfree_skb(skb);
4118 hdev->reassembly[index] = NULL;
4119 return -ENOMEM;
4120 }
4121 }
4122 break;
4123
4124 case HCI_ACLDATA_PKT:
4125 if (skb->len == HCI_ACL_HDR_SIZE) {
4126 struct hci_acl_hdr *h = hci_acl_hdr(skb);
4127 scb->expect = __le16_to_cpu(h->dlen);
4128
4129 if (skb_tailroom(skb) < scb->expect) {
4130 kfree_skb(skb);
4131 hdev->reassembly[index] = NULL;
4132 return -ENOMEM;
4133 }
4134 }
4135 break;
4136
4137 case HCI_SCODATA_PKT:
4138 if (skb->len == HCI_SCO_HDR_SIZE) {
4139 struct hci_sco_hdr *h = hci_sco_hdr(skb);
4140 scb->expect = h->dlen;
4141
4142 if (skb_tailroom(skb) < scb->expect) {
4143 kfree_skb(skb);
4144 hdev->reassembly[index] = NULL;
4145 return -ENOMEM;
4146 }
4147 }
4148 break;
4149 }
4150
4151 if (scb->expect == 0) {
4152 /* Complete frame */
4153
4154 bt_cb(skb)->pkt_type = type;
4155 hci_recv_frame(hdev, skb);
4156
4157 hdev->reassembly[index] = NULL;
4158 return remain;
4159 }
4160 }
4161
4162 return remain;
4163}
4164
4165int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
4166{
4167 int rem = 0;
4168
4169 if (type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT)
4170 return -EILSEQ;
4171
4172 while (count) {
4173 rem = hci_reassembly(hdev, type, data, count, type - 1);
4174 if (rem < 0)
4175 return rem;
4176
4177 data += (count - rem);
4178 count = rem;
4179 }
4180
4181 return rem;
4182}
4183EXPORT_SYMBOL(hci_recv_fragment);
4184
4185#define STREAM_REASSEMBLY 0
4186
4187int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count)
4188{
4189 int type;
4190 int rem = 0;
4191
4192 while (count) {
4193 struct sk_buff *skb = hdev->reassembly[STREAM_REASSEMBLY];
4194
4195 if (!skb) {
4196 struct { char type; } *pkt;
4197
4198 /* Start of the frame */
4199 pkt = data;
4200 type = pkt->type;
4201
4202 data++;
4203 count--;
4204 } else
4205 type = bt_cb(skb)->pkt_type;
4206
4207 rem = hci_reassembly(hdev, type, data, count,
4208 STREAM_REASSEMBLY);
4209 if (rem < 0)
4210 return rem;
4211
4212 data += (count - rem);
4213 count = rem;
4214 }
4215
4216 return rem;
4217}
4218EXPORT_SYMBOL(hci_recv_stream_fragment);
4219
4220/* ---- Interface to upper protocols ---- */
4221
4222int hci_register_cb(struct hci_cb *cb)
4223{
4224 BT_DBG("%p name %s", cb, cb->name);
4225
4226 write_lock(&hci_cb_list_lock);
4227 list_add(&cb->list, &hci_cb_list);
4228 write_unlock(&hci_cb_list_lock);
4229
4230 return 0;
4231}
4232EXPORT_SYMBOL(hci_register_cb);
4233
4234int hci_unregister_cb(struct hci_cb *cb)
4235{
4236 BT_DBG("%p name %s", cb, cb->name);
4237
4238 write_lock(&hci_cb_list_lock);
4239 list_del(&cb->list);
4240 write_unlock(&hci_cb_list_lock);
4241
4242 return 0;
4243}
4244EXPORT_SYMBOL(hci_unregister_cb);
4245
4246static void hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
4247{
4248 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
4249
4250 /* Time stamp */
4251 __net_timestamp(skb);
4252
4253 /* Send copy to monitor */
4254 hci_send_to_monitor(hdev, skb);
4255
4256 if (atomic_read(&hdev->promisc)) {
4257 /* Send copy to the sockets */
4258 hci_send_to_sock(hdev, skb);
4259 }
4260
4261 /* Get rid of skb owner, prior to sending to the driver. */
4262 skb_orphan(skb);
4263
4264 if (hdev->send(hdev, skb) < 0)
4265 BT_ERR("%s sending frame failed", hdev->name);
4266}
4267
4268void hci_req_init(struct hci_request *req, struct hci_dev *hdev)
4269{
4270 skb_queue_head_init(&req->cmd_q);
4271 req->hdev = hdev;
4272 req->err = 0;
4273}
4274
4275int hci_req_run(struct hci_request *req, hci_req_complete_t complete)
4276{
4277 struct hci_dev *hdev = req->hdev;
4278 struct sk_buff *skb;
4279 unsigned long flags;
4280
4281 BT_DBG("length %u", skb_queue_len(&req->cmd_q));
4282
4283 /* If an error occured during request building, remove all HCI
4284 * commands queued on the HCI request queue.
4285 */
4286 if (req->err) {
4287 skb_queue_purge(&req->cmd_q);
4288 return req->err;
4289 }
4290
4291 /* Do not allow empty requests */
4292 if (skb_queue_empty(&req->cmd_q))
4293 return -ENODATA;
4294
4295 skb = skb_peek_tail(&req->cmd_q);
4296 bt_cb(skb)->req.complete = complete;
4297
4298 spin_lock_irqsave(&hdev->cmd_q.lock, flags);
4299 skb_queue_splice_tail(&req->cmd_q, &hdev->cmd_q);
4300 spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
4301
4302 queue_work(hdev->workqueue, &hdev->cmd_work);
4303
4304 return 0;
4305}
4306
4307static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode,
4308 u32 plen, const void *param)
4309{
4310 int len = HCI_COMMAND_HDR_SIZE + plen;
4311 struct hci_command_hdr *hdr;
4312 struct sk_buff *skb;
4313
4314 skb = bt_skb_alloc(len, GFP_ATOMIC);
4315 if (!skb)
4316 return NULL;
4317
4318 hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE);
4319 hdr->opcode = cpu_to_le16(opcode);
4320 hdr->plen = plen;
4321
4322 if (plen)
4323 memcpy(skb_put(skb, plen), param, plen);
4324
4325 BT_DBG("skb len %d", skb->len);
4326
4327 bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
4328
4329 return skb;
4330}
4331
4332/* Send HCI command */
4333int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
4334 const void *param)
4335{
4336 struct sk_buff *skb;
4337
4338 BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
4339
4340 skb = hci_prepare_cmd(hdev, opcode, plen, param);
4341 if (!skb) {
4342 BT_ERR("%s no memory for command", hdev->name);
4343 return -ENOMEM;
4344 }
4345
4346 /* Stand-alone HCI commands must be flaged as
4347 * single-command requests.
4348 */
4349 bt_cb(skb)->req.start = true;
4350
4351 skb_queue_tail(&hdev->cmd_q, skb);
4352 queue_work(hdev->workqueue, &hdev->cmd_work);
4353
4354 return 0;
4355}
4356
4357/* Queue a command to an asynchronous HCI request */
4358void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
4359 const void *param, u8 event)
4360{
4361 struct hci_dev *hdev = req->hdev;
4362 struct sk_buff *skb;
4363
4364 BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
4365
4366 /* If an error occured during request building, there is no point in
4367 * queueing the HCI command. We can simply return.
4368 */
4369 if (req->err)
4370 return;
4371
4372 skb = hci_prepare_cmd(hdev, opcode, plen, param);
4373 if (!skb) {
4374 BT_ERR("%s no memory for command (opcode 0x%4.4x)",
4375 hdev->name, opcode);
4376 req->err = -ENOMEM;
4377 return;
4378 }
4379
4380 if (skb_queue_empty(&req->cmd_q))
4381 bt_cb(skb)->req.start = true;
4382
4383 bt_cb(skb)->req.event = event;
4384
4385 skb_queue_tail(&req->cmd_q, skb);
4386}
4387
4388void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
4389 const void *param)
4390{
4391 hci_req_add_ev(req, opcode, plen, param, 0);
4392}
4393
4394/* Get data from the previously sent command */
4395void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
4396{
4397 struct hci_command_hdr *hdr;
4398
4399 if (!hdev->sent_cmd)
4400 return NULL;
4401
4402 hdr = (void *) hdev->sent_cmd->data;
4403
4404 if (hdr->opcode != cpu_to_le16(opcode))
4405 return NULL;
4406
4407 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
4408
4409 return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
4410}
4411
4412/* Send ACL data */
4413static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
4414{
4415 struct hci_acl_hdr *hdr;
4416 int len = skb->len;
4417
4418 skb_push(skb, HCI_ACL_HDR_SIZE);
4419 skb_reset_transport_header(skb);
4420 hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
4421 hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
4422 hdr->dlen = cpu_to_le16(len);
4423}
4424
4425static void hci_queue_acl(struct hci_chan *chan, struct sk_buff_head *queue,
4426 struct sk_buff *skb, __u16 flags)
4427{
4428 struct hci_conn *conn = chan->conn;
4429 struct hci_dev *hdev = conn->hdev;
4430 struct sk_buff *list;
4431
4432 skb->len = skb_headlen(skb);
4433 skb->data_len = 0;
4434
4435 bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
4436
4437 switch (hdev->dev_type) {
4438 case HCI_BREDR:
4439 hci_add_acl_hdr(skb, conn->handle, flags);
4440 break;
4441 case HCI_AMP:
4442 hci_add_acl_hdr(skb, chan->handle, flags);
4443 break;
4444 default:
4445 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
4446 return;
4447 }
4448
4449 list = skb_shinfo(skb)->frag_list;
4450 if (!list) {
4451 /* Non fragmented */
4452 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
4453
4454 skb_queue_tail(queue, skb);
4455 } else {
4456 /* Fragmented */
4457 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
4458
4459 skb_shinfo(skb)->frag_list = NULL;
4460
4461 /* Queue all fragments atomically */
4462 spin_lock(&queue->lock);
4463
4464 __skb_queue_tail(queue, skb);
4465
4466 flags &= ~ACL_START;
4467 flags |= ACL_CONT;
4468 do {
4469 skb = list; list = list->next;
4470
4471 bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
4472 hci_add_acl_hdr(skb, conn->handle, flags);
4473
4474 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
4475
4476 __skb_queue_tail(queue, skb);
4477 } while (list);
4478
4479 spin_unlock(&queue->lock);
4480 }
4481}
4482
4483void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags)
4484{
4485 struct hci_dev *hdev = chan->conn->hdev;
4486
4487 BT_DBG("%s chan %p flags 0x%4.4x", hdev->name, chan, flags);
4488
4489 hci_queue_acl(chan, &chan->data_q, skb, flags);
4490
4491 queue_work(hdev->workqueue, &hdev->tx_work);
4492}
4493
4494/* Send SCO data */
4495void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
4496{
4497 struct hci_dev *hdev = conn->hdev;
4498 struct hci_sco_hdr hdr;
4499
4500 BT_DBG("%s len %d", hdev->name, skb->len);
4501
4502 hdr.handle = cpu_to_le16(conn->handle);
4503 hdr.dlen = skb->len;
4504
4505 skb_push(skb, HCI_SCO_HDR_SIZE);
4506 skb_reset_transport_header(skb);
4507 memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
4508
4509 bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
4510
4511 skb_queue_tail(&conn->data_q, skb);
4512 queue_work(hdev->workqueue, &hdev->tx_work);
4513}
4514
4515/* ---- HCI TX task (outgoing data) ---- */
4516
4517/* HCI Connection scheduler */
4518static struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type,
4519 int *quote)
4520{
4521 struct hci_conn_hash *h = &hdev->conn_hash;
4522 struct hci_conn *conn = NULL, *c;
4523 unsigned int num = 0, min = ~0;
4524
4525 /* We don't have to lock device here. Connections are always
4526 * added and removed with TX task disabled. */
4527
4528 rcu_read_lock();
4529
4530 list_for_each_entry_rcu(c, &h->list, list) {
4531 if (c->type != type || skb_queue_empty(&c->data_q))
4532 continue;
4533
4534 if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
4535 continue;
4536
4537 num++;
4538
4539 if (c->sent < min) {
4540 min = c->sent;
4541 conn = c;
4542 }
4543
4544 if (hci_conn_num(hdev, type) == num)
4545 break;
4546 }
4547
4548 rcu_read_unlock();
4549
4550 if (conn) {
4551 int cnt, q;
4552
4553 switch (conn->type) {
4554 case ACL_LINK:
4555 cnt = hdev->acl_cnt;
4556 break;
4557 case SCO_LINK:
4558 case ESCO_LINK:
4559 cnt = hdev->sco_cnt;
4560 break;
4561 case LE_LINK:
4562 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
4563 break;
4564 default:
4565 cnt = 0;
4566 BT_ERR("Unknown link type");
4567 }
4568
4569 q = cnt / num;
4570 *quote = q ? q : 1;
4571 } else
4572 *quote = 0;
4573
4574 BT_DBG("conn %p quote %d", conn, *quote);
4575 return conn;
4576}
4577
4578static void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
4579{
4580 struct hci_conn_hash *h = &hdev->conn_hash;
4581 struct hci_conn *c;
4582
4583 BT_ERR("%s link tx timeout", hdev->name);
4584
4585 rcu_read_lock();
4586
4587 /* Kill stalled connections */
4588 list_for_each_entry_rcu(c, &h->list, list) {
4589 if (c->type == type && c->sent) {
4590 BT_ERR("%s killing stalled connection %pMR",
4591 hdev->name, &c->dst);
4592 hci_disconnect(c, HCI_ERROR_REMOTE_USER_TERM);
4593 }
4594 }
4595
4596 rcu_read_unlock();
4597}
4598
4599static struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type,
4600 int *quote)
4601{
4602 struct hci_conn_hash *h = &hdev->conn_hash;
4603 struct hci_chan *chan = NULL;
4604 unsigned int num = 0, min = ~0, cur_prio = 0;
4605 struct hci_conn *conn;
4606 int cnt, q, conn_num = 0;
4607
4608 BT_DBG("%s", hdev->name);
4609
4610 rcu_read_lock();
4611
4612 list_for_each_entry_rcu(conn, &h->list, list) {
4613 struct hci_chan *tmp;
4614
4615 if (conn->type != type)
4616 continue;
4617
4618 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
4619 continue;
4620
4621 conn_num++;
4622
4623 list_for_each_entry_rcu(tmp, &conn->chan_list, list) {
4624 struct sk_buff *skb;
4625
4626 if (skb_queue_empty(&tmp->data_q))
4627 continue;
4628
4629 skb = skb_peek(&tmp->data_q);
4630 if (skb->priority < cur_prio)
4631 continue;
4632
4633 if (skb->priority > cur_prio) {
4634 num = 0;
4635 min = ~0;
4636 cur_prio = skb->priority;
4637 }
4638
4639 num++;
4640
4641 if (conn->sent < min) {
4642 min = conn->sent;
4643 chan = tmp;
4644 }
4645 }
4646
4647 if (hci_conn_num(hdev, type) == conn_num)
4648 break;
4649 }
4650
4651 rcu_read_unlock();
4652
4653 if (!chan)
4654 return NULL;
4655
4656 switch (chan->conn->type) {
4657 case ACL_LINK:
4658 cnt = hdev->acl_cnt;
4659 break;
4660 case AMP_LINK:
4661 cnt = hdev->block_cnt;
4662 break;
4663 case SCO_LINK:
4664 case ESCO_LINK:
4665 cnt = hdev->sco_cnt;
4666 break;
4667 case LE_LINK:
4668 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
4669 break;
4670 default:
4671 cnt = 0;
4672 BT_ERR("Unknown link type");
4673 }
4674
4675 q = cnt / num;
4676 *quote = q ? q : 1;
4677 BT_DBG("chan %p quote %d", chan, *quote);
4678 return chan;
4679}
4680
4681static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
4682{
4683 struct hci_conn_hash *h = &hdev->conn_hash;
4684 struct hci_conn *conn;
4685 int num = 0;
4686
4687 BT_DBG("%s", hdev->name);
4688
4689 rcu_read_lock();
4690
4691 list_for_each_entry_rcu(conn, &h->list, list) {
4692 struct hci_chan *chan;
4693
4694 if (conn->type != type)
4695 continue;
4696
4697 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
4698 continue;
4699
4700 num++;
4701
4702 list_for_each_entry_rcu(chan, &conn->chan_list, list) {
4703 struct sk_buff *skb;
4704
4705 if (chan->sent) {
4706 chan->sent = 0;
4707 continue;
4708 }
4709
4710 if (skb_queue_empty(&chan->data_q))
4711 continue;
4712
4713 skb = skb_peek(&chan->data_q);
4714 if (skb->priority >= HCI_PRIO_MAX - 1)
4715 continue;
4716
4717 skb->priority = HCI_PRIO_MAX - 1;
4718
4719 BT_DBG("chan %p skb %p promoted to %d", chan, skb,
4720 skb->priority);
4721 }
4722
4723 if (hci_conn_num(hdev, type) == num)
4724 break;
4725 }
4726
4727 rcu_read_unlock();
4728
4729}
4730
4731static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
4732{
4733 /* Calculate count of blocks used by this packet */
4734 return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
4735}
4736
4737static void __check_timeout(struct hci_dev *hdev, unsigned int cnt)
4738{
4739 if (!test_bit(HCI_RAW, &hdev->flags)) {
4740 /* ACL tx timeout must be longer than maximum
4741 * link supervision timeout (40.9 seconds) */
4742 if (!cnt && time_after(jiffies, hdev->acl_last_tx +
4743 HCI_ACL_TX_TIMEOUT))
4744 hci_link_tx_to(hdev, ACL_LINK);
4745 }
4746}
4747
4748static void hci_sched_acl_pkt(struct hci_dev *hdev)
4749{
4750 unsigned int cnt = hdev->acl_cnt;
4751 struct hci_chan *chan;
4752 struct sk_buff *skb;
4753 int quote;
4754
4755 __check_timeout(hdev, cnt);
4756
4757 while (hdev->acl_cnt &&
4758 (chan = hci_chan_sent(hdev, ACL_LINK, "e))) {
4759 u32 priority = (skb_peek(&chan->data_q))->priority;
4760 while (quote-- && (skb = skb_peek(&chan->data_q))) {
4761 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
4762 skb->len, skb->priority);
4763
4764 /* Stop if priority has changed */
4765 if (skb->priority < priority)
4766 break;
4767
4768 skb = skb_dequeue(&chan->data_q);
4769
4770 hci_conn_enter_active_mode(chan->conn,
4771 bt_cb(skb)->force_active);
4772
4773 hci_send_frame(hdev, skb);
4774 hdev->acl_last_tx = jiffies;
4775
4776 hdev->acl_cnt--;
4777 chan->sent++;
4778 chan->conn->sent++;
4779 }
4780 }
4781
4782 if (cnt != hdev->acl_cnt)
4783 hci_prio_recalculate(hdev, ACL_LINK);
4784}
4785
4786static void hci_sched_acl_blk(struct hci_dev *hdev)
4787{
4788 unsigned int cnt = hdev->block_cnt;
4789 struct hci_chan *chan;
4790 struct sk_buff *skb;
4791 int quote;
4792 u8 type;
4793
4794 __check_timeout(hdev, cnt);
4795
4796 BT_DBG("%s", hdev->name);
4797
4798 if (hdev->dev_type == HCI_AMP)
4799 type = AMP_LINK;
4800 else
4801 type = ACL_LINK;
4802
4803 while (hdev->block_cnt > 0 &&
4804 (chan = hci_chan_sent(hdev, type, "e))) {
4805 u32 priority = (skb_peek(&chan->data_q))->priority;
4806 while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
4807 int blocks;
4808
4809 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
4810 skb->len, skb->priority);
4811
4812 /* Stop if priority has changed */
4813 if (skb->priority < priority)
4814 break;
4815
4816 skb = skb_dequeue(&chan->data_q);
4817
4818 blocks = __get_blocks(hdev, skb);
4819 if (blocks > hdev->block_cnt)
4820 return;
4821
4822 hci_conn_enter_active_mode(chan->conn,
4823 bt_cb(skb)->force_active);
4824
4825 hci_send_frame(hdev, skb);
4826 hdev->acl_last_tx = jiffies;
4827
4828 hdev->block_cnt -= blocks;
4829 quote -= blocks;
4830
4831 chan->sent += blocks;
4832 chan->conn->sent += blocks;
4833 }
4834 }
4835
4836 if (cnt != hdev->block_cnt)
4837 hci_prio_recalculate(hdev, type);
4838}
4839
4840static void hci_sched_acl(struct hci_dev *hdev)
4841{
4842 BT_DBG("%s", hdev->name);
4843
4844 /* No ACL link over BR/EDR controller */
4845 if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_BREDR)
4846 return;
4847
4848 /* No AMP link over AMP controller */
4849 if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP)
4850 return;
4851
4852 switch (hdev->flow_ctl_mode) {
4853 case HCI_FLOW_CTL_MODE_PACKET_BASED:
4854 hci_sched_acl_pkt(hdev);
4855 break;
4856
4857 case HCI_FLOW_CTL_MODE_BLOCK_BASED:
4858 hci_sched_acl_blk(hdev);
4859 break;
4860 }
4861}
4862
4863/* Schedule SCO */
4864static void hci_sched_sco(struct hci_dev *hdev)
4865{
4866 struct hci_conn *conn;
4867 struct sk_buff *skb;
4868 int quote;
4869
4870 BT_DBG("%s", hdev->name);
4871
4872 if (!hci_conn_num(hdev, SCO_LINK))
4873 return;
4874
4875 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, "e))) {
4876 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
4877 BT_DBG("skb %p len %d", skb, skb->len);
4878 hci_send_frame(hdev, skb);
4879
4880 conn->sent++;
4881 if (conn->sent == ~0)
4882 conn->sent = 0;
4883 }
4884 }
4885}
4886
4887static void hci_sched_esco(struct hci_dev *hdev)
4888{
4889 struct hci_conn *conn;
4890 struct sk_buff *skb;
4891 int quote;
4892
4893 BT_DBG("%s", hdev->name);
4894
4895 if (!hci_conn_num(hdev, ESCO_LINK))
4896 return;
4897
4898 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK,
4899 "e))) {
4900 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
4901 BT_DBG("skb %p len %d", skb, skb->len);
4902 hci_send_frame(hdev, skb);
4903
4904 conn->sent++;
4905 if (conn->sent == ~0)
4906 conn->sent = 0;
4907 }
4908 }
4909}
4910
4911static void hci_sched_le(struct hci_dev *hdev)
4912{
4913 struct hci_chan *chan;
4914 struct sk_buff *skb;
4915 int quote, cnt, tmp;
4916
4917 BT_DBG("%s", hdev->name);
4918
4919 if (!hci_conn_num(hdev, LE_LINK))
4920 return;
4921
4922 if (!test_bit(HCI_RAW, &hdev->flags)) {
4923 /* LE tx timeout must be longer than maximum
4924 * link supervision timeout (40.9 seconds) */
4925 if (!hdev->le_cnt && hdev->le_pkts &&
4926 time_after(jiffies, hdev->le_last_tx + HZ * 45))
4927 hci_link_tx_to(hdev, LE_LINK);
4928 }
4929
4930 cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
4931 tmp = cnt;
4932 while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, "e))) {
4933 u32 priority = (skb_peek(&chan->data_q))->priority;
4934 while (quote-- && (skb = skb_peek(&chan->data_q))) {
4935 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
4936 skb->len, skb->priority);
4937
4938 /* Stop if priority has changed */
4939 if (skb->priority < priority)
4940 break;
4941
4942 skb = skb_dequeue(&chan->data_q);
4943
4944 hci_send_frame(hdev, skb);
4945 hdev->le_last_tx = jiffies;
4946
4947 cnt--;
4948 chan->sent++;
4949 chan->conn->sent++;
4950 }
4951 }
4952
4953 if (hdev->le_pkts)
4954 hdev->le_cnt = cnt;
4955 else
4956 hdev->acl_cnt = cnt;
4957
4958 if (cnt != tmp)
4959 hci_prio_recalculate(hdev, LE_LINK);
4960}
4961
4962static void hci_tx_work(struct work_struct *work)
4963{
4964 struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work);
4965 struct sk_buff *skb;
4966
4967 BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt,
4968 hdev->sco_cnt, hdev->le_cnt);
4969
4970 if (!test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
4971 /* Schedule queues and send stuff to HCI driver */
4972 hci_sched_acl(hdev);
4973 hci_sched_sco(hdev);
4974 hci_sched_esco(hdev);
4975 hci_sched_le(hdev);
4976 }
4977
4978 /* Send next queued raw (unknown type) packet */
4979 while ((skb = skb_dequeue(&hdev->raw_q)))
4980 hci_send_frame(hdev, skb);
4981}
4982
4983/* ----- HCI RX task (incoming data processing) ----- */
4984
4985/* ACL data packet */
4986static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
4987{
4988 struct hci_acl_hdr *hdr = (void *) skb->data;
4989 struct hci_conn *conn;
4990 __u16 handle, flags;
4991
4992 skb_pull(skb, HCI_ACL_HDR_SIZE);
4993
4994 handle = __le16_to_cpu(hdr->handle);
4995 flags = hci_flags(handle);
4996 handle = hci_handle(handle);
4997
4998 BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len,
4999 handle, flags);
5000
5001 hdev->stat.acl_rx++;
5002
5003 hci_dev_lock(hdev);
5004 conn = hci_conn_hash_lookup_handle(hdev, handle);
5005 hci_dev_unlock(hdev);
5006
5007 if (conn) {
5008 hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
5009
5010 /* Send to upper protocol */
5011 l2cap_recv_acldata(conn, skb, flags);
5012 return;
5013 } else {
5014 BT_ERR("%s ACL packet for unknown connection handle %d",
5015 hdev->name, handle);
5016 }
5017
5018 kfree_skb(skb);
5019}
5020
5021/* SCO data packet */
5022static void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
5023{
5024 struct hci_sco_hdr *hdr = (void *) skb->data;
5025 struct hci_conn *conn;
5026 __u16 handle;
5027
5028 skb_pull(skb, HCI_SCO_HDR_SIZE);
5029
5030 handle = __le16_to_cpu(hdr->handle);
5031
5032 BT_DBG("%s len %d handle 0x%4.4x", hdev->name, skb->len, handle);
5033
5034 hdev->stat.sco_rx++;
5035
5036 hci_dev_lock(hdev);
5037 conn = hci_conn_hash_lookup_handle(hdev, handle);
5038 hci_dev_unlock(hdev);
5039
5040 if (conn) {
5041 /* Send to upper protocol */
5042 sco_recv_scodata(conn, skb);
5043 return;
5044 } else {
5045 BT_ERR("%s SCO packet for unknown connection handle %d",
5046 hdev->name, handle);
5047 }
5048
5049 kfree_skb(skb);
5050}
5051
5052static bool hci_req_is_complete(struct hci_dev *hdev)
5053{
5054 struct sk_buff *skb;
5055
5056 skb = skb_peek(&hdev->cmd_q);
5057 if (!skb)
5058 return true;
5059
5060 return bt_cb(skb)->req.start;
5061}
5062
5063static void hci_resend_last(struct hci_dev *hdev)
5064{
5065 struct hci_command_hdr *sent;
5066 struct sk_buff *skb;
5067 u16 opcode;
5068
5069 if (!hdev->sent_cmd)
5070 return;
5071
5072 sent = (void *) hdev->sent_cmd->data;
5073 opcode = __le16_to_cpu(sent->opcode);
5074 if (opcode == HCI_OP_RESET)
5075 return;
5076
5077 skb = skb_clone(hdev->sent_cmd, GFP_KERNEL);
5078 if (!skb)
5079 return;
5080
5081 skb_queue_head(&hdev->cmd_q, skb);
5082 queue_work(hdev->workqueue, &hdev->cmd_work);
5083}
5084
5085void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status)
5086{
5087 hci_req_complete_t req_complete = NULL;
5088 struct sk_buff *skb;
5089 unsigned long flags;
5090
5091 BT_DBG("opcode 0x%04x status 0x%02x", opcode, status);
5092
5093 /* If the completed command doesn't match the last one that was
5094 * sent we need to do special handling of it.
5095 */
5096 if (!hci_sent_cmd_data(hdev, opcode)) {
5097 /* Some CSR based controllers generate a spontaneous
5098 * reset complete event during init and any pending
5099 * command will never be completed. In such a case we
5100 * need to resend whatever was the last sent
5101 * command.
5102 */
5103 if (test_bit(HCI_INIT, &hdev->flags) && opcode == HCI_OP_RESET)
5104 hci_resend_last(hdev);
5105
5106 return;
5107 }
5108
5109 /* If the command succeeded and there's still more commands in
5110 * this request the request is not yet complete.
5111 */
5112 if (!status && !hci_req_is_complete(hdev))
5113 return;
5114
5115 /* If this was the last command in a request the complete
5116 * callback would be found in hdev->sent_cmd instead of the
5117 * command queue (hdev->cmd_q).
5118 */
5119 if (hdev->sent_cmd) {
5120 req_complete = bt_cb(hdev->sent_cmd)->req.complete;
5121
5122 if (req_complete) {
5123 /* We must set the complete callback to NULL to
5124 * avoid calling the callback more than once if
5125 * this function gets called again.
5126 */
5127 bt_cb(hdev->sent_cmd)->req.complete = NULL;
5128
5129 goto call_complete;
5130 }
5131 }
5132
5133 /* Remove all pending commands belonging to this request */
5134 spin_lock_irqsave(&hdev->cmd_q.lock, flags);
5135 while ((skb = __skb_dequeue(&hdev->cmd_q))) {
5136 if (bt_cb(skb)->req.start) {
5137 __skb_queue_head(&hdev->cmd_q, skb);
5138 break;
5139 }
5140
5141 req_complete = bt_cb(skb)->req.complete;
5142 kfree_skb(skb);
5143 }
5144 spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
5145
5146call_complete:
5147 if (req_complete)
5148 req_complete(hdev, status);
5149}
5150
5151static void hci_rx_work(struct work_struct *work)
5152{
5153 struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work);
5154 struct sk_buff *skb;
5155
5156 BT_DBG("%s", hdev->name);
5157
5158 while ((skb = skb_dequeue(&hdev->rx_q))) {
5159 /* Send copy to monitor */
5160 hci_send_to_monitor(hdev, skb);
5161
5162 if (atomic_read(&hdev->promisc)) {
5163 /* Send copy to the sockets */
5164 hci_send_to_sock(hdev, skb);
5165 }
5166
5167 if (test_bit(HCI_RAW, &hdev->flags) ||
5168 test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) {
5169 kfree_skb(skb);
5170 continue;
5171 }
5172
5173 if (test_bit(HCI_INIT, &hdev->flags)) {
5174 /* Don't process data packets in this states. */
5175 switch (bt_cb(skb)->pkt_type) {
5176 case HCI_ACLDATA_PKT:
5177 case HCI_SCODATA_PKT:
5178 kfree_skb(skb);
5179 continue;
5180 }
5181 }
5182
5183 /* Process frame */
5184 switch (bt_cb(skb)->pkt_type) {
5185 case HCI_EVENT_PKT:
5186 BT_DBG("%s Event packet", hdev->name);
5187 hci_event_packet(hdev, skb);
5188 break;
5189
5190 case HCI_ACLDATA_PKT:
5191 BT_DBG("%s ACL data packet", hdev->name);
5192 hci_acldata_packet(hdev, skb);
5193 break;
5194
5195 case HCI_SCODATA_PKT:
5196 BT_DBG("%s SCO data packet", hdev->name);
5197 hci_scodata_packet(hdev, skb);
5198 break;
5199
5200 default:
5201 kfree_skb(skb);
5202 break;
5203 }
5204 }
5205}
5206
5207static void hci_cmd_work(struct work_struct *work)
5208{
5209 struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work);
5210 struct sk_buff *skb;
5211
5212 BT_DBG("%s cmd_cnt %d cmd queued %d", hdev->name,
5213 atomic_read(&hdev->cmd_cnt), skb_queue_len(&hdev->cmd_q));
5214
5215 /* Send queued commands */
5216 if (atomic_read(&hdev->cmd_cnt)) {
5217 skb = skb_dequeue(&hdev->cmd_q);
5218 if (!skb)
5219 return;
5220
5221 kfree_skb(hdev->sent_cmd);
5222
5223 hdev->sent_cmd = skb_clone(skb, GFP_KERNEL);
5224 if (hdev->sent_cmd) {
5225 atomic_dec(&hdev->cmd_cnt);
5226 hci_send_frame(hdev, skb);
5227 if (test_bit(HCI_RESET, &hdev->flags))
5228 del_timer(&hdev->cmd_timer);
5229 else
5230 mod_timer(&hdev->cmd_timer,
5231 jiffies + HCI_CMD_TIMEOUT);
5232 } else {
5233 skb_queue_head(&hdev->cmd_q, skb);
5234 queue_work(hdev->workqueue, &hdev->cmd_work);
5235 }
5236 }
5237}
5238
5239void hci_req_add_le_scan_disable(struct hci_request *req)
5240{
5241 struct hci_cp_le_set_scan_enable cp;
5242
5243 memset(&cp, 0, sizeof(cp));
5244 cp.enable = LE_SCAN_DISABLE;
5245 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
5246}
5247
5248void hci_req_add_le_passive_scan(struct hci_request *req)
5249{
5250 struct hci_cp_le_set_scan_param param_cp;
5251 struct hci_cp_le_set_scan_enable enable_cp;
5252 struct hci_dev *hdev = req->hdev;
5253 u8 own_addr_type;
5254
5255 /* Set require_privacy to true to avoid identification from
5256 * unknown peer devices. Since this is passive scanning, no
5257 * SCAN_REQ using the local identity should be sent. Mandating
5258 * privacy is just an extra precaution.
5259 */
5260 if (hci_update_random_address(req, true, &own_addr_type))
5261 return;
5262
5263 memset(¶m_cp, 0, sizeof(param_cp));
5264 param_cp.type = LE_SCAN_PASSIVE;
5265 param_cp.interval = cpu_to_le16(hdev->le_scan_interval);
5266 param_cp.window = cpu_to_le16(hdev->le_scan_window);
5267 param_cp.own_address_type = own_addr_type;
5268 hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
5269 ¶m_cp);
5270
5271 memset(&enable_cp, 0, sizeof(enable_cp));
5272 enable_cp.enable = LE_SCAN_ENABLE;
5273 enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
5274 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
5275 &enable_cp);
5276}
5277
5278static void update_background_scan_complete(struct hci_dev *hdev, u8 status)
5279{
5280 if (status)
5281 BT_DBG("HCI request failed to update background scanning: "
5282 "status 0x%2.2x", status);
5283}
5284
5285/* This function controls the background scanning based on hdev->pend_le_conns
5286 * list. If there are pending LE connection we start the background scanning,
5287 * otherwise we stop it.
5288 *
5289 * This function requires the caller holds hdev->lock.
5290 */
5291void hci_update_background_scan(struct hci_dev *hdev)
5292{
5293 struct hci_request req;
5294 struct hci_conn *conn;
5295 int err;
5296
5297 hci_req_init(&req, hdev);
5298
5299 if (list_empty(&hdev->pend_le_conns)) {
5300 /* If there is no pending LE connections, we should stop
5301 * the background scanning.
5302 */
5303
5304 /* If controller is not scanning we are done. */
5305 if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags))
5306 return;
5307
5308 hci_req_add_le_scan_disable(&req);
5309
5310 BT_DBG("%s stopping background scanning", hdev->name);
5311 } else {
5312 /* If there is at least one pending LE connection, we should
5313 * keep the background scan running.
5314 */
5315
5316 /* If controller is connecting, we should not start scanning
5317 * since some controllers are not able to scan and connect at
5318 * the same time.
5319 */
5320 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
5321 if (conn)
5322 return;
5323
5324 /* If controller is currently scanning, we stop it to ensure we
5325 * don't miss any advertising (due to duplicates filter).
5326 */
5327 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags))
5328 hci_req_add_le_scan_disable(&req);
5329
5330 hci_req_add_le_passive_scan(&req);
5331
5332 BT_DBG("%s starting background scanning", hdev->name);
5333 }
5334
5335 err = hci_req_run(&req, update_background_scan_complete);
5336 if (err)
5337 BT_ERR("Failed to run HCI request: err %d", err);
5338}