net: ipv4: fix a memleak in ip_setup_cork
[platform/kernel/linux-rpi.git] / net / bluetooth / hci_sync.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * BlueZ - Bluetooth protocol stack for Linux
4  *
5  * Copyright (C) 2021 Intel Corporation
6  * Copyright 2023 NXP
7  */
8
9 #include <linux/property.h>
10
11 #include <net/bluetooth/bluetooth.h>
12 #include <net/bluetooth/hci_core.h>
13 #include <net/bluetooth/mgmt.h>
14
15 #include "hci_request.h"
16 #include "hci_codec.h"
17 #include "hci_debugfs.h"
18 #include "smp.h"
19 #include "eir.h"
20 #include "msft.h"
21 #include "aosp.h"
22 #include "leds.h"
23
24 static void hci_cmd_sync_complete(struct hci_dev *hdev, u8 result, u16 opcode,
25                                   struct sk_buff *skb)
26 {
27         bt_dev_dbg(hdev, "result 0x%2.2x", result);
28
29         if (hdev->req_status != HCI_REQ_PEND)
30                 return;
31
32         hdev->req_result = result;
33         hdev->req_status = HCI_REQ_DONE;
34
35         if (skb) {
36                 struct sock *sk = hci_skb_sk(skb);
37
38                 /* Drop sk reference if set */
39                 if (sk)
40                         sock_put(sk);
41
42                 hdev->req_skb = skb_get(skb);
43         }
44
45         wake_up_interruptible(&hdev->req_wait_q);
46 }
47
48 static struct sk_buff *hci_cmd_sync_alloc(struct hci_dev *hdev, u16 opcode,
49                                           u32 plen, const void *param,
50                                           struct sock *sk)
51 {
52         int len = HCI_COMMAND_HDR_SIZE + plen;
53         struct hci_command_hdr *hdr;
54         struct sk_buff *skb;
55
56         skb = bt_skb_alloc(len, GFP_ATOMIC);
57         if (!skb)
58                 return NULL;
59
60         hdr = skb_put(skb, HCI_COMMAND_HDR_SIZE);
61         hdr->opcode = cpu_to_le16(opcode);
62         hdr->plen   = plen;
63
64         if (plen)
65                 skb_put_data(skb, param, plen);
66
67         bt_dev_dbg(hdev, "skb len %d", skb->len);
68
69         hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
70         hci_skb_opcode(skb) = opcode;
71
72         /* Grab a reference if command needs to be associated with a sock (e.g.
73          * likely mgmt socket that initiated the command).
74          */
75         if (sk) {
76                 hci_skb_sk(skb) = sk;
77                 sock_hold(sk);
78         }
79
80         return skb;
81 }
82
83 static void hci_cmd_sync_add(struct hci_request *req, u16 opcode, u32 plen,
84                              const void *param, u8 event, struct sock *sk)
85 {
86         struct hci_dev *hdev = req->hdev;
87         struct sk_buff *skb;
88
89         bt_dev_dbg(hdev, "opcode 0x%4.4x plen %d", opcode, plen);
90
91         /* If an error occurred during request building, there is no point in
92          * queueing the HCI command. We can simply return.
93          */
94         if (req->err)
95                 return;
96
97         skb = hci_cmd_sync_alloc(hdev, opcode, plen, param, sk);
98         if (!skb) {
99                 bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)",
100                            opcode);
101                 req->err = -ENOMEM;
102                 return;
103         }
104
105         if (skb_queue_empty(&req->cmd_q))
106                 bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
107
108         hci_skb_event(skb) = event;
109
110         skb_queue_tail(&req->cmd_q, skb);
111 }
112
113 static int hci_cmd_sync_run(struct hci_request *req)
114 {
115         struct hci_dev *hdev = req->hdev;
116         struct sk_buff *skb;
117         unsigned long flags;
118
119         bt_dev_dbg(hdev, "length %u", skb_queue_len(&req->cmd_q));
120
121         /* If an error occurred during request building, remove all HCI
122          * commands queued on the HCI request queue.
123          */
124         if (req->err) {
125                 skb_queue_purge(&req->cmd_q);
126                 return req->err;
127         }
128
129         /* Do not allow empty requests */
130         if (skb_queue_empty(&req->cmd_q))
131                 return -ENODATA;
132
133         skb = skb_peek_tail(&req->cmd_q);
134         bt_cb(skb)->hci.req_complete_skb = hci_cmd_sync_complete;
135         bt_cb(skb)->hci.req_flags |= HCI_REQ_SKB;
136
137         spin_lock_irqsave(&hdev->cmd_q.lock, flags);
138         skb_queue_splice_tail(&req->cmd_q, &hdev->cmd_q);
139         spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
140
141         queue_work(hdev->workqueue, &hdev->cmd_work);
142
143         return 0;
144 }
145
146 /* This function requires the caller holds hdev->req_lock. */
147 struct sk_buff *__hci_cmd_sync_sk(struct hci_dev *hdev, u16 opcode, u32 plen,
148                                   const void *param, u8 event, u32 timeout,
149                                   struct sock *sk)
150 {
151         struct hci_request req;
152         struct sk_buff *skb;
153         int err = 0;
154
155         bt_dev_dbg(hdev, "Opcode 0x%4.4x", opcode);
156
157         hci_req_init(&req, hdev);
158
159         hci_cmd_sync_add(&req, opcode, plen, param, event, sk);
160
161         hdev->req_status = HCI_REQ_PEND;
162
163         err = hci_cmd_sync_run(&req);
164         if (err < 0)
165                 return ERR_PTR(err);
166
167         err = wait_event_interruptible_timeout(hdev->req_wait_q,
168                                                hdev->req_status != HCI_REQ_PEND,
169                                                timeout);
170
171         if (err == -ERESTARTSYS)
172                 return ERR_PTR(-EINTR);
173
174         switch (hdev->req_status) {
175         case HCI_REQ_DONE:
176                 err = -bt_to_errno(hdev->req_result);
177                 break;
178
179         case HCI_REQ_CANCELED:
180                 err = -hdev->req_result;
181                 break;
182
183         default:
184                 err = -ETIMEDOUT;
185                 break;
186         }
187
188         hdev->req_status = 0;
189         hdev->req_result = 0;
190         skb = hdev->req_skb;
191         hdev->req_skb = NULL;
192
193         bt_dev_dbg(hdev, "end: err %d", err);
194
195         if (err < 0) {
196                 kfree_skb(skb);
197                 return ERR_PTR(err);
198         }
199
200         return skb;
201 }
202 EXPORT_SYMBOL(__hci_cmd_sync_sk);
203
204 /* This function requires the caller holds hdev->req_lock. */
205 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
206                                const void *param, u32 timeout)
207 {
208         return __hci_cmd_sync_sk(hdev, opcode, plen, param, 0, timeout, NULL);
209 }
210 EXPORT_SYMBOL(__hci_cmd_sync);
211
212 /* Send HCI command and wait for command complete event */
213 struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
214                              const void *param, u32 timeout)
215 {
216         struct sk_buff *skb;
217
218         if (!test_bit(HCI_UP, &hdev->flags))
219                 return ERR_PTR(-ENETDOWN);
220
221         bt_dev_dbg(hdev, "opcode 0x%4.4x plen %d", opcode, plen);
222
223         hci_req_sync_lock(hdev);
224         skb = __hci_cmd_sync(hdev, opcode, plen, param, timeout);
225         hci_req_sync_unlock(hdev);
226
227         return skb;
228 }
229 EXPORT_SYMBOL(hci_cmd_sync);
230
231 /* This function requires the caller holds hdev->req_lock. */
232 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
233                                   const void *param, u8 event, u32 timeout)
234 {
235         return __hci_cmd_sync_sk(hdev, opcode, plen, param, event, timeout,
236                                  NULL);
237 }
238 EXPORT_SYMBOL(__hci_cmd_sync_ev);
239
240 /* This function requires the caller holds hdev->req_lock. */
241 int __hci_cmd_sync_status_sk(struct hci_dev *hdev, u16 opcode, u32 plen,
242                              const void *param, u8 event, u32 timeout,
243                              struct sock *sk)
244 {
245         struct sk_buff *skb;
246         u8 status;
247
248         skb = __hci_cmd_sync_sk(hdev, opcode, plen, param, event, timeout, sk);
249         if (IS_ERR(skb)) {
250                 if (!event)
251                         bt_dev_err(hdev, "Opcode 0x%4.4x failed: %ld", opcode,
252                                    PTR_ERR(skb));
253                 return PTR_ERR(skb);
254         }
255
256         /* If command return a status event skb will be set to NULL as there are
257          * no parameters, in case of failure IS_ERR(skb) would have be set to
258          * the actual error would be found with PTR_ERR(skb).
259          */
260         if (!skb)
261                 return 0;
262
263         status = skb->data[0];
264
265         kfree_skb(skb);
266
267         return status;
268 }
269 EXPORT_SYMBOL(__hci_cmd_sync_status_sk);
270
271 int __hci_cmd_sync_status(struct hci_dev *hdev, u16 opcode, u32 plen,
272                           const void *param, u32 timeout)
273 {
274         return __hci_cmd_sync_status_sk(hdev, opcode, plen, param, 0, timeout,
275                                         NULL);
276 }
277 EXPORT_SYMBOL(__hci_cmd_sync_status);
278
279 static void hci_cmd_sync_work(struct work_struct *work)
280 {
281         struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_sync_work);
282
283         bt_dev_dbg(hdev, "");
284
285         /* Dequeue all entries and run them */
286         while (1) {
287                 struct hci_cmd_sync_work_entry *entry;
288
289                 mutex_lock(&hdev->cmd_sync_work_lock);
290                 entry = list_first_entry_or_null(&hdev->cmd_sync_work_list,
291                                                  struct hci_cmd_sync_work_entry,
292                                                  list);
293                 if (entry)
294                         list_del(&entry->list);
295                 mutex_unlock(&hdev->cmd_sync_work_lock);
296
297                 if (!entry)
298                         break;
299
300                 bt_dev_dbg(hdev, "entry %p", entry);
301
302                 if (entry->func) {
303                         int err;
304
305                         hci_req_sync_lock(hdev);
306                         err = entry->func(hdev, entry->data);
307                         if (entry->destroy)
308                                 entry->destroy(hdev, entry->data, err);
309                         hci_req_sync_unlock(hdev);
310                 }
311
312                 kfree(entry);
313         }
314 }
315
316 static void hci_cmd_sync_cancel_work(struct work_struct *work)
317 {
318         struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_sync_cancel_work);
319
320         cancel_delayed_work_sync(&hdev->cmd_timer);
321         cancel_delayed_work_sync(&hdev->ncmd_timer);
322         atomic_set(&hdev->cmd_cnt, 1);
323
324         wake_up_interruptible(&hdev->req_wait_q);
325 }
326
327 static int hci_scan_disable_sync(struct hci_dev *hdev);
328 static int scan_disable_sync(struct hci_dev *hdev, void *data)
329 {
330         return hci_scan_disable_sync(hdev);
331 }
332
333 static int hci_inquiry_sync(struct hci_dev *hdev, u8 length);
334 static int interleaved_inquiry_sync(struct hci_dev *hdev, void *data)
335 {
336         return hci_inquiry_sync(hdev, DISCOV_INTERLEAVED_INQUIRY_LEN);
337 }
338
339 static void le_scan_disable(struct work_struct *work)
340 {
341         struct hci_dev *hdev = container_of(work, struct hci_dev,
342                                             le_scan_disable.work);
343         int status;
344
345         bt_dev_dbg(hdev, "");
346         hci_dev_lock(hdev);
347
348         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
349                 goto _return;
350
351         cancel_delayed_work(&hdev->le_scan_restart);
352
353         status = hci_cmd_sync_queue(hdev, scan_disable_sync, NULL, NULL);
354         if (status) {
355                 bt_dev_err(hdev, "failed to disable LE scan: %d", status);
356                 goto _return;
357         }
358
359         hdev->discovery.scan_start = 0;
360
361         /* If we were running LE only scan, change discovery state. If
362          * we were running both LE and BR/EDR inquiry simultaneously,
363          * and BR/EDR inquiry is already finished, stop discovery,
364          * otherwise BR/EDR inquiry will stop discovery when finished.
365          * If we will resolve remote device name, do not change
366          * discovery state.
367          */
368
369         if (hdev->discovery.type == DISCOV_TYPE_LE)
370                 goto discov_stopped;
371
372         if (hdev->discovery.type != DISCOV_TYPE_INTERLEAVED)
373                 goto _return;
374
375         if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks)) {
376                 if (!test_bit(HCI_INQUIRY, &hdev->flags) &&
377                     hdev->discovery.state != DISCOVERY_RESOLVING)
378                         goto discov_stopped;
379
380                 goto _return;
381         }
382
383         status = hci_cmd_sync_queue(hdev, interleaved_inquiry_sync, NULL, NULL);
384         if (status) {
385                 bt_dev_err(hdev, "inquiry failed: status %d", status);
386                 goto discov_stopped;
387         }
388
389         goto _return;
390
391 discov_stopped:
392         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
393
394 _return:
395         hci_dev_unlock(hdev);
396 }
397
398 static int hci_le_set_scan_enable_sync(struct hci_dev *hdev, u8 val,
399                                        u8 filter_dup);
400 static int hci_le_scan_restart_sync(struct hci_dev *hdev)
401 {
402         /* If controller is not scanning we are done. */
403         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
404                 return 0;
405
406         if (hdev->scanning_paused) {
407                 bt_dev_dbg(hdev, "Scanning is paused for suspend");
408                 return 0;
409         }
410
411         hci_le_set_scan_enable_sync(hdev, LE_SCAN_DISABLE, 0x00);
412         return hci_le_set_scan_enable_sync(hdev, LE_SCAN_ENABLE,
413                                            LE_SCAN_FILTER_DUP_ENABLE);
414 }
415
416 static void le_scan_restart(struct work_struct *work)
417 {
418         struct hci_dev *hdev = container_of(work, struct hci_dev,
419                                             le_scan_restart.work);
420         unsigned long timeout, duration, scan_start, now;
421         int status;
422
423         bt_dev_dbg(hdev, "");
424
425         status = hci_le_scan_restart_sync(hdev);
426         if (status) {
427                 bt_dev_err(hdev, "failed to restart LE scan: status %d",
428                            status);
429                 return;
430         }
431
432         hci_dev_lock(hdev);
433
434         if (!test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) ||
435             !hdev->discovery.scan_start)
436                 goto unlock;
437
438         /* When the scan was started, hdev->le_scan_disable has been queued
439          * after duration from scan_start. During scan restart this job
440          * has been canceled, and we need to queue it again after proper
441          * timeout, to make sure that scan does not run indefinitely.
442          */
443         duration = hdev->discovery.scan_duration;
444         scan_start = hdev->discovery.scan_start;
445         now = jiffies;
446         if (now - scan_start <= duration) {
447                 int elapsed;
448
449                 if (now >= scan_start)
450                         elapsed = now - scan_start;
451                 else
452                         elapsed = ULONG_MAX - scan_start + now;
453
454                 timeout = duration - elapsed;
455         } else {
456                 timeout = 0;
457         }
458
459         queue_delayed_work(hdev->req_workqueue,
460                            &hdev->le_scan_disable, timeout);
461
462 unlock:
463         hci_dev_unlock(hdev);
464 }
465
466 static int reenable_adv_sync(struct hci_dev *hdev, void *data)
467 {
468         bt_dev_dbg(hdev, "");
469
470         if (!hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
471             list_empty(&hdev->adv_instances))
472                 return 0;
473
474         if (hdev->cur_adv_instance) {
475                 return hci_schedule_adv_instance_sync(hdev,
476                                                       hdev->cur_adv_instance,
477                                                       true);
478         } else {
479                 if (ext_adv_capable(hdev)) {
480                         hci_start_ext_adv_sync(hdev, 0x00);
481                 } else {
482                         hci_update_adv_data_sync(hdev, 0x00);
483                         hci_update_scan_rsp_data_sync(hdev, 0x00);
484                         hci_enable_advertising_sync(hdev);
485                 }
486         }
487
488         return 0;
489 }
490
491 static void reenable_adv(struct work_struct *work)
492 {
493         struct hci_dev *hdev = container_of(work, struct hci_dev,
494                                             reenable_adv_work);
495         int status;
496
497         bt_dev_dbg(hdev, "");
498
499         hci_dev_lock(hdev);
500
501         status = hci_cmd_sync_queue(hdev, reenable_adv_sync, NULL, NULL);
502         if (status)
503                 bt_dev_err(hdev, "failed to reenable ADV: %d", status);
504
505         hci_dev_unlock(hdev);
506 }
507
508 static void cancel_adv_timeout(struct hci_dev *hdev)
509 {
510         if (hdev->adv_instance_timeout) {
511                 hdev->adv_instance_timeout = 0;
512                 cancel_delayed_work(&hdev->adv_instance_expire);
513         }
514 }
515
516 /* For a single instance:
517  * - force == true: The instance will be removed even when its remaining
518  *   lifetime is not zero.
519  * - force == false: the instance will be deactivated but kept stored unless
520  *   the remaining lifetime is zero.
521  *
522  * For instance == 0x00:
523  * - force == true: All instances will be removed regardless of their timeout
524  *   setting.
525  * - force == false: Only instances that have a timeout will be removed.
526  */
527 int hci_clear_adv_instance_sync(struct hci_dev *hdev, struct sock *sk,
528                                 u8 instance, bool force)
529 {
530         struct adv_info *adv_instance, *n, *next_instance = NULL;
531         int err;
532         u8 rem_inst;
533
534         /* Cancel any timeout concerning the removed instance(s). */
535         if (!instance || hdev->cur_adv_instance == instance)
536                 cancel_adv_timeout(hdev);
537
538         /* Get the next instance to advertise BEFORE we remove
539          * the current one. This can be the same instance again
540          * if there is only one instance.
541          */
542         if (instance && hdev->cur_adv_instance == instance)
543                 next_instance = hci_get_next_instance(hdev, instance);
544
545         if (instance == 0x00) {
546                 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances,
547                                          list) {
548                         if (!(force || adv_instance->timeout))
549                                 continue;
550
551                         rem_inst = adv_instance->instance;
552                         err = hci_remove_adv_instance(hdev, rem_inst);
553                         if (!err)
554                                 mgmt_advertising_removed(sk, hdev, rem_inst);
555                 }
556         } else {
557                 adv_instance = hci_find_adv_instance(hdev, instance);
558
559                 if (force || (adv_instance && adv_instance->timeout &&
560                               !adv_instance->remaining_time)) {
561                         /* Don't advertise a removed instance. */
562                         if (next_instance &&
563                             next_instance->instance == instance)
564                                 next_instance = NULL;
565
566                         err = hci_remove_adv_instance(hdev, instance);
567                         if (!err)
568                                 mgmt_advertising_removed(sk, hdev, instance);
569                 }
570         }
571
572         if (!hdev_is_powered(hdev) || hci_dev_test_flag(hdev, HCI_ADVERTISING))
573                 return 0;
574
575         if (next_instance && !ext_adv_capable(hdev))
576                 return hci_schedule_adv_instance_sync(hdev,
577                                                       next_instance->instance,
578                                                       false);
579
580         return 0;
581 }
582
583 static int adv_timeout_expire_sync(struct hci_dev *hdev, void *data)
584 {
585         u8 instance = *(u8 *)data;
586
587         kfree(data);
588
589         hci_clear_adv_instance_sync(hdev, NULL, instance, false);
590
591         if (list_empty(&hdev->adv_instances))
592                 return hci_disable_advertising_sync(hdev);
593
594         return 0;
595 }
596
597 static void adv_timeout_expire(struct work_struct *work)
598 {
599         u8 *inst_ptr;
600         struct hci_dev *hdev = container_of(work, struct hci_dev,
601                                             adv_instance_expire.work);
602
603         bt_dev_dbg(hdev, "");
604
605         hci_dev_lock(hdev);
606
607         hdev->adv_instance_timeout = 0;
608
609         if (hdev->cur_adv_instance == 0x00)
610                 goto unlock;
611
612         inst_ptr = kmalloc(1, GFP_KERNEL);
613         if (!inst_ptr)
614                 goto unlock;
615
616         *inst_ptr = hdev->cur_adv_instance;
617         hci_cmd_sync_queue(hdev, adv_timeout_expire_sync, inst_ptr, NULL);
618
619 unlock:
620         hci_dev_unlock(hdev);
621 }
622
623 void hci_cmd_sync_init(struct hci_dev *hdev)
624 {
625         INIT_WORK(&hdev->cmd_sync_work, hci_cmd_sync_work);
626         INIT_LIST_HEAD(&hdev->cmd_sync_work_list);
627         mutex_init(&hdev->cmd_sync_work_lock);
628         mutex_init(&hdev->unregister_lock);
629
630         INIT_WORK(&hdev->cmd_sync_cancel_work, hci_cmd_sync_cancel_work);
631         INIT_WORK(&hdev->reenable_adv_work, reenable_adv);
632         INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable);
633         INIT_DELAYED_WORK(&hdev->le_scan_restart, le_scan_restart);
634         INIT_DELAYED_WORK(&hdev->adv_instance_expire, adv_timeout_expire);
635 }
636
637 void hci_cmd_sync_clear(struct hci_dev *hdev)
638 {
639         struct hci_cmd_sync_work_entry *entry, *tmp;
640
641         cancel_work_sync(&hdev->cmd_sync_work);
642         cancel_work_sync(&hdev->reenable_adv_work);
643
644         mutex_lock(&hdev->cmd_sync_work_lock);
645         list_for_each_entry_safe(entry, tmp, &hdev->cmd_sync_work_list, list) {
646                 if (entry->destroy)
647                         entry->destroy(hdev, entry->data, -ECANCELED);
648
649                 list_del(&entry->list);
650                 kfree(entry);
651         }
652         mutex_unlock(&hdev->cmd_sync_work_lock);
653 }
654
655 void __hci_cmd_sync_cancel(struct hci_dev *hdev, int err)
656 {
657         bt_dev_dbg(hdev, "err 0x%2.2x", err);
658
659         if (hdev->req_status == HCI_REQ_PEND) {
660                 hdev->req_result = err;
661                 hdev->req_status = HCI_REQ_CANCELED;
662
663                 cancel_delayed_work_sync(&hdev->cmd_timer);
664                 cancel_delayed_work_sync(&hdev->ncmd_timer);
665                 atomic_set(&hdev->cmd_cnt, 1);
666
667                 wake_up_interruptible(&hdev->req_wait_q);
668         }
669 }
670
671 void hci_cmd_sync_cancel(struct hci_dev *hdev, int err)
672 {
673         bt_dev_dbg(hdev, "err 0x%2.2x", err);
674
675         if (hdev->req_status == HCI_REQ_PEND) {
676                 hdev->req_result = err;
677                 hdev->req_status = HCI_REQ_CANCELED;
678
679                 queue_work(hdev->workqueue, &hdev->cmd_sync_cancel_work);
680         }
681 }
682 EXPORT_SYMBOL(hci_cmd_sync_cancel);
683
684 /* Submit HCI command to be run in as cmd_sync_work:
685  *
686  * - hdev must _not_ be unregistered
687  */
688 int hci_cmd_sync_submit(struct hci_dev *hdev, hci_cmd_sync_work_func_t func,
689                         void *data, hci_cmd_sync_work_destroy_t destroy)
690 {
691         struct hci_cmd_sync_work_entry *entry;
692         int err = 0;
693
694         mutex_lock(&hdev->unregister_lock);
695         if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
696                 err = -ENODEV;
697                 goto unlock;
698         }
699
700         entry = kmalloc(sizeof(*entry), GFP_KERNEL);
701         if (!entry) {
702                 err = -ENOMEM;
703                 goto unlock;
704         }
705         entry->func = func;
706         entry->data = data;
707         entry->destroy = destroy;
708
709         mutex_lock(&hdev->cmd_sync_work_lock);
710         list_add_tail(&entry->list, &hdev->cmd_sync_work_list);
711         mutex_unlock(&hdev->cmd_sync_work_lock);
712
713         queue_work(hdev->req_workqueue, &hdev->cmd_sync_work);
714
715 unlock:
716         mutex_unlock(&hdev->unregister_lock);
717         return err;
718 }
719 EXPORT_SYMBOL(hci_cmd_sync_submit);
720
721 /* Queue HCI command:
722  *
723  * - hdev must be running
724  */
725 int hci_cmd_sync_queue(struct hci_dev *hdev, hci_cmd_sync_work_func_t func,
726                        void *data, hci_cmd_sync_work_destroy_t destroy)
727 {
728         /* Only queue command if hdev is running which means it had been opened
729          * and is either on init phase or is already up.
730          */
731         if (!test_bit(HCI_RUNNING, &hdev->flags))
732                 return -ENETDOWN;
733
734         return hci_cmd_sync_submit(hdev, func, data, destroy);
735 }
736 EXPORT_SYMBOL(hci_cmd_sync_queue);
737
738 int hci_update_eir_sync(struct hci_dev *hdev)
739 {
740         struct hci_cp_write_eir cp;
741
742         bt_dev_dbg(hdev, "");
743
744         if (!hdev_is_powered(hdev))
745                 return 0;
746
747         if (!lmp_ext_inq_capable(hdev))
748                 return 0;
749
750         if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
751                 return 0;
752
753         if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE))
754                 return 0;
755
756         memset(&cp, 0, sizeof(cp));
757
758         eir_create(hdev, cp.data);
759
760         if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
761                 return 0;
762
763         memcpy(hdev->eir, cp.data, sizeof(cp.data));
764
765         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp,
766                                      HCI_CMD_TIMEOUT);
767 }
768
769 static u8 get_service_classes(struct hci_dev *hdev)
770 {
771         struct bt_uuid *uuid;
772         u8 val = 0;
773
774         list_for_each_entry(uuid, &hdev->uuids, list)
775                 val |= uuid->svc_hint;
776
777         return val;
778 }
779
780 int hci_update_class_sync(struct hci_dev *hdev)
781 {
782         u8 cod[3];
783
784         bt_dev_dbg(hdev, "");
785
786         if (!hdev_is_powered(hdev))
787                 return 0;
788
789         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
790                 return 0;
791
792         if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE))
793                 return 0;
794
795         cod[0] = hdev->minor_class;
796         cod[1] = hdev->major_class;
797         cod[2] = get_service_classes(hdev);
798
799         if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
800                 cod[1] |= 0x20;
801
802         if (memcmp(cod, hdev->dev_class, 3) == 0)
803                 return 0;
804
805         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_CLASS_OF_DEV,
806                                      sizeof(cod), cod, HCI_CMD_TIMEOUT);
807 }
808
809 static bool is_advertising_allowed(struct hci_dev *hdev, bool connectable)
810 {
811         /* If there is no connection we are OK to advertise. */
812         if (hci_conn_num(hdev, LE_LINK) == 0)
813                 return true;
814
815         /* Check le_states if there is any connection in peripheral role. */
816         if (hdev->conn_hash.le_num_peripheral > 0) {
817                 /* Peripheral connection state and non connectable mode
818                  * bit 20.
819                  */
820                 if (!connectable && !(hdev->le_states[2] & 0x10))
821                         return false;
822
823                 /* Peripheral connection state and connectable mode bit 38
824                  * and scannable bit 21.
825                  */
826                 if (connectable && (!(hdev->le_states[4] & 0x40) ||
827                                     !(hdev->le_states[2] & 0x20)))
828                         return false;
829         }
830
831         /* Check le_states if there is any connection in central role. */
832         if (hci_conn_num(hdev, LE_LINK) != hdev->conn_hash.le_num_peripheral) {
833                 /* Central connection state and non connectable mode bit 18. */
834                 if (!connectable && !(hdev->le_states[2] & 0x02))
835                         return false;
836
837                 /* Central connection state and connectable mode bit 35 and
838                  * scannable 19.
839                  */
840                 if (connectable && (!(hdev->le_states[4] & 0x08) ||
841                                     !(hdev->le_states[2] & 0x08)))
842                         return false;
843         }
844
845         return true;
846 }
847
848 static bool adv_use_rpa(struct hci_dev *hdev, uint32_t flags)
849 {
850         /* If privacy is not enabled don't use RPA */
851         if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
852                 return false;
853
854         /* If basic privacy mode is enabled use RPA */
855         if (!hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY))
856                 return true;
857
858         /* If limited privacy mode is enabled don't use RPA if we're
859          * both discoverable and bondable.
860          */
861         if ((flags & MGMT_ADV_FLAG_DISCOV) &&
862             hci_dev_test_flag(hdev, HCI_BONDABLE))
863                 return false;
864
865         /* We're neither bondable nor discoverable in the limited
866          * privacy mode, therefore use RPA.
867          */
868         return true;
869 }
870
871 static int hci_set_random_addr_sync(struct hci_dev *hdev, bdaddr_t *rpa)
872 {
873         /* If we're advertising or initiating an LE connection we can't
874          * go ahead and change the random address at this time. This is
875          * because the eventual initiator address used for the
876          * subsequently created connection will be undefined (some
877          * controllers use the new address and others the one we had
878          * when the operation started).
879          *
880          * In this kind of scenario skip the update and let the random
881          * address be updated at the next cycle.
882          */
883         if (hci_dev_test_flag(hdev, HCI_LE_ADV) ||
884             hci_lookup_le_connect(hdev)) {
885                 bt_dev_dbg(hdev, "Deferring random address update");
886                 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
887                 return 0;
888         }
889
890         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_RANDOM_ADDR,
891                                      6, rpa, HCI_CMD_TIMEOUT);
892 }
893
894 int hci_update_random_address_sync(struct hci_dev *hdev, bool require_privacy,
895                                    bool rpa, u8 *own_addr_type)
896 {
897         int err;
898
899         /* If privacy is enabled use a resolvable private address. If
900          * current RPA has expired or there is something else than
901          * the current RPA in use, then generate a new one.
902          */
903         if (rpa) {
904                 /* If Controller supports LL Privacy use own address type is
905                  * 0x03
906                  */
907                 if (use_ll_privacy(hdev))
908                         *own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED;
909                 else
910                         *own_addr_type = ADDR_LE_DEV_RANDOM;
911
912                 /* Check if RPA is valid */
913                 if (rpa_valid(hdev))
914                         return 0;
915
916                 err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa);
917                 if (err < 0) {
918                         bt_dev_err(hdev, "failed to generate new RPA");
919                         return err;
920                 }
921
922                 err = hci_set_random_addr_sync(hdev, &hdev->rpa);
923                 if (err)
924                         return err;
925
926                 return 0;
927         }
928
929         /* In case of required privacy without resolvable private address,
930          * use an non-resolvable private address. This is useful for active
931          * scanning and non-connectable advertising.
932          */
933         if (require_privacy) {
934                 bdaddr_t nrpa;
935
936                 while (true) {
937                         /* The non-resolvable private address is generated
938                          * from random six bytes with the two most significant
939                          * bits cleared.
940                          */
941                         get_random_bytes(&nrpa, 6);
942                         nrpa.b[5] &= 0x3f;
943
944                         /* The non-resolvable private address shall not be
945                          * equal to the public address.
946                          */
947                         if (bacmp(&hdev->bdaddr, &nrpa))
948                                 break;
949                 }
950
951                 *own_addr_type = ADDR_LE_DEV_RANDOM;
952
953                 return hci_set_random_addr_sync(hdev, &nrpa);
954         }
955
956         /* If forcing static address is in use or there is no public
957          * address use the static address as random address (but skip
958          * the HCI command if the current random address is already the
959          * static one.
960          *
961          * In case BR/EDR has been disabled on a dual-mode controller
962          * and a static address has been configured, then use that
963          * address instead of the public BR/EDR address.
964          */
965         if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
966             !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
967             (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
968              bacmp(&hdev->static_addr, BDADDR_ANY))) {
969                 *own_addr_type = ADDR_LE_DEV_RANDOM;
970                 if (bacmp(&hdev->static_addr, &hdev->random_addr))
971                         return hci_set_random_addr_sync(hdev,
972                                                         &hdev->static_addr);
973                 return 0;
974         }
975
976         /* Neither privacy nor static address is being used so use a
977          * public address.
978          */
979         *own_addr_type = ADDR_LE_DEV_PUBLIC;
980
981         return 0;
982 }
983
984 static int hci_disable_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
985 {
986         struct hci_cp_le_set_ext_adv_enable *cp;
987         struct hci_cp_ext_adv_set *set;
988         u8 data[sizeof(*cp) + sizeof(*set) * 1];
989         u8 size;
990
991         /* If request specifies an instance that doesn't exist, fail */
992         if (instance > 0) {
993                 struct adv_info *adv;
994
995                 adv = hci_find_adv_instance(hdev, instance);
996                 if (!adv)
997                         return -EINVAL;
998
999                 /* If not enabled there is nothing to do */
1000                 if (!adv->enabled)
1001                         return 0;
1002         }
1003
1004         memset(data, 0, sizeof(data));
1005
1006         cp = (void *)data;
1007         set = (void *)cp->data;
1008
1009         /* Instance 0x00 indicates all advertising instances will be disabled */
1010         cp->num_of_sets = !!instance;
1011         cp->enable = 0x00;
1012
1013         set->handle = instance;
1014
1015         size = sizeof(*cp) + sizeof(*set) * cp->num_of_sets;
1016
1017         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE,
1018                                      size, data, HCI_CMD_TIMEOUT);
1019 }
1020
1021 static int hci_set_adv_set_random_addr_sync(struct hci_dev *hdev, u8 instance,
1022                                             bdaddr_t *random_addr)
1023 {
1024         struct hci_cp_le_set_adv_set_rand_addr cp;
1025         int err;
1026
1027         if (!instance) {
1028                 /* Instance 0x00 doesn't have an adv_info, instead it uses
1029                  * hdev->random_addr to track its address so whenever it needs
1030                  * to be updated this also set the random address since
1031                  * hdev->random_addr is shared with scan state machine.
1032                  */
1033                 err = hci_set_random_addr_sync(hdev, random_addr);
1034                 if (err)
1035                         return err;
1036         }
1037
1038         memset(&cp, 0, sizeof(cp));
1039
1040         cp.handle = instance;
1041         bacpy(&cp.bdaddr, random_addr);
1042
1043         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
1044                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1045 }
1046
1047 int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
1048 {
1049         struct hci_cp_le_set_ext_adv_params cp;
1050         bool connectable;
1051         u32 flags;
1052         bdaddr_t random_addr;
1053         u8 own_addr_type;
1054         int err;
1055         struct adv_info *adv;
1056         bool secondary_adv;
1057
1058         if (instance > 0) {
1059                 adv = hci_find_adv_instance(hdev, instance);
1060                 if (!adv)
1061                         return -EINVAL;
1062         } else {
1063                 adv = NULL;
1064         }
1065
1066         /* Updating parameters of an active instance will return a
1067          * Command Disallowed error, so we must first disable the
1068          * instance if it is active.
1069          */
1070         if (adv && !adv->pending) {
1071                 err = hci_disable_ext_adv_instance_sync(hdev, instance);
1072                 if (err)
1073                         return err;
1074         }
1075
1076         flags = hci_adv_instance_flags(hdev, instance);
1077
1078         /* If the "connectable" instance flag was not set, then choose between
1079          * ADV_IND and ADV_NONCONN_IND based on the global connectable setting.
1080          */
1081         connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) ||
1082                       mgmt_get_connectable(hdev);
1083
1084         if (!is_advertising_allowed(hdev, connectable))
1085                 return -EPERM;
1086
1087         /* Set require_privacy to true only when non-connectable
1088          * advertising is used. In that case it is fine to use a
1089          * non-resolvable private address.
1090          */
1091         err = hci_get_random_address(hdev, !connectable,
1092                                      adv_use_rpa(hdev, flags), adv,
1093                                      &own_addr_type, &random_addr);
1094         if (err < 0)
1095                 return err;
1096
1097         memset(&cp, 0, sizeof(cp));
1098
1099         if (adv) {
1100                 hci_cpu_to_le24(adv->min_interval, cp.min_interval);
1101                 hci_cpu_to_le24(adv->max_interval, cp.max_interval);
1102                 cp.tx_power = adv->tx_power;
1103         } else {
1104                 hci_cpu_to_le24(hdev->le_adv_min_interval, cp.min_interval);
1105                 hci_cpu_to_le24(hdev->le_adv_max_interval, cp.max_interval);
1106                 cp.tx_power = HCI_ADV_TX_POWER_NO_PREFERENCE;
1107         }
1108
1109         secondary_adv = (flags & MGMT_ADV_FLAG_SEC_MASK);
1110
1111         if (connectable) {
1112                 if (secondary_adv)
1113                         cp.evt_properties = cpu_to_le16(LE_EXT_ADV_CONN_IND);
1114                 else
1115                         cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_IND);
1116         } else if (hci_adv_instance_is_scannable(hdev, instance) ||
1117                    (flags & MGMT_ADV_PARAM_SCAN_RSP)) {
1118                 if (secondary_adv)
1119                         cp.evt_properties = cpu_to_le16(LE_EXT_ADV_SCAN_IND);
1120                 else
1121                         cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_SCAN_IND);
1122         } else {
1123                 if (secondary_adv)
1124                         cp.evt_properties = cpu_to_le16(LE_EXT_ADV_NON_CONN_IND);
1125                 else
1126                         cp.evt_properties = cpu_to_le16(LE_LEGACY_NONCONN_IND);
1127         }
1128
1129         /* If Own_Address_Type equals 0x02 or 0x03, the Peer_Address parameter
1130          * contains the peer’s Identity Address and the Peer_Address_Type
1131          * parameter contains the peer’s Identity Type (i.e., 0x00 or 0x01).
1132          * These parameters are used to locate the corresponding local IRK in
1133          * the resolving list; this IRK is used to generate their own address
1134          * used in the advertisement.
1135          */
1136         if (own_addr_type == ADDR_LE_DEV_RANDOM_RESOLVED)
1137                 hci_copy_identity_address(hdev, &cp.peer_addr,
1138                                           &cp.peer_addr_type);
1139
1140         cp.own_addr_type = own_addr_type;
1141         cp.channel_map = hdev->le_adv_channel_map;
1142         cp.handle = instance;
1143
1144         if (flags & MGMT_ADV_FLAG_SEC_2M) {
1145                 cp.primary_phy = HCI_ADV_PHY_1M;
1146                 cp.secondary_phy = HCI_ADV_PHY_2M;
1147         } else if (flags & MGMT_ADV_FLAG_SEC_CODED) {
1148                 cp.primary_phy = HCI_ADV_PHY_CODED;
1149                 cp.secondary_phy = HCI_ADV_PHY_CODED;
1150         } else {
1151                 /* In all other cases use 1M */
1152                 cp.primary_phy = HCI_ADV_PHY_1M;
1153                 cp.secondary_phy = HCI_ADV_PHY_1M;
1154         }
1155
1156         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
1157                                     sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1158         if (err)
1159                 return err;
1160
1161         if ((own_addr_type == ADDR_LE_DEV_RANDOM ||
1162              own_addr_type == ADDR_LE_DEV_RANDOM_RESOLVED) &&
1163             bacmp(&random_addr, BDADDR_ANY)) {
1164                 /* Check if random address need to be updated */
1165                 if (adv) {
1166                         if (!bacmp(&random_addr, &adv->random_addr))
1167                                 return 0;
1168                 } else {
1169                         if (!bacmp(&random_addr, &hdev->random_addr))
1170                                 return 0;
1171                 }
1172
1173                 return hci_set_adv_set_random_addr_sync(hdev, instance,
1174                                                         &random_addr);
1175         }
1176
1177         return 0;
1178 }
1179
1180 static int hci_set_ext_scan_rsp_data_sync(struct hci_dev *hdev, u8 instance)
1181 {
1182         struct {
1183                 struct hci_cp_le_set_ext_scan_rsp_data cp;
1184                 u8 data[HCI_MAX_EXT_AD_LENGTH];
1185         } pdu;
1186         u8 len;
1187         struct adv_info *adv = NULL;
1188         int err;
1189
1190         memset(&pdu, 0, sizeof(pdu));
1191
1192         if (instance) {
1193                 adv = hci_find_adv_instance(hdev, instance);
1194                 if (!adv || !adv->scan_rsp_changed)
1195                         return 0;
1196         }
1197
1198         len = eir_create_scan_rsp(hdev, instance, pdu.data);
1199
1200         pdu.cp.handle = instance;
1201         pdu.cp.length = len;
1202         pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1203         pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
1204
1205         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_SCAN_RSP_DATA,
1206                                     sizeof(pdu.cp) + len, &pdu.cp,
1207                                     HCI_CMD_TIMEOUT);
1208         if (err)
1209                 return err;
1210
1211         if (adv) {
1212                 adv->scan_rsp_changed = false;
1213         } else {
1214                 memcpy(hdev->scan_rsp_data, pdu.data, len);
1215                 hdev->scan_rsp_data_len = len;
1216         }
1217
1218         return 0;
1219 }
1220
1221 static int __hci_set_scan_rsp_data_sync(struct hci_dev *hdev, u8 instance)
1222 {
1223         struct hci_cp_le_set_scan_rsp_data cp;
1224         u8 len;
1225
1226         memset(&cp, 0, sizeof(cp));
1227
1228         len = eir_create_scan_rsp(hdev, instance, cp.data);
1229
1230         if (hdev->scan_rsp_data_len == len &&
1231             !memcmp(cp.data, hdev->scan_rsp_data, len))
1232                 return 0;
1233
1234         memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
1235         hdev->scan_rsp_data_len = len;
1236
1237         cp.length = len;
1238
1239         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_SCAN_RSP_DATA,
1240                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1241 }
1242
1243 int hci_update_scan_rsp_data_sync(struct hci_dev *hdev, u8 instance)
1244 {
1245         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1246                 return 0;
1247
1248         if (ext_adv_capable(hdev))
1249                 return hci_set_ext_scan_rsp_data_sync(hdev, instance);
1250
1251         return __hci_set_scan_rsp_data_sync(hdev, instance);
1252 }
1253
1254 int hci_enable_ext_advertising_sync(struct hci_dev *hdev, u8 instance)
1255 {
1256         struct hci_cp_le_set_ext_adv_enable *cp;
1257         struct hci_cp_ext_adv_set *set;
1258         u8 data[sizeof(*cp) + sizeof(*set) * 1];
1259         struct adv_info *adv;
1260
1261         if (instance > 0) {
1262                 adv = hci_find_adv_instance(hdev, instance);
1263                 if (!adv)
1264                         return -EINVAL;
1265                 /* If already enabled there is nothing to do */
1266                 if (adv->enabled)
1267                         return 0;
1268         } else {
1269                 adv = NULL;
1270         }
1271
1272         cp = (void *)data;
1273         set = (void *)cp->data;
1274
1275         memset(cp, 0, sizeof(*cp));
1276
1277         cp->enable = 0x01;
1278         cp->num_of_sets = 0x01;
1279
1280         memset(set, 0, sizeof(*set));
1281
1282         set->handle = instance;
1283
1284         /* Set duration per instance since controller is responsible for
1285          * scheduling it.
1286          */
1287         if (adv && adv->timeout) {
1288                 u16 duration = adv->timeout * MSEC_PER_SEC;
1289
1290                 /* Time = N * 10 ms */
1291                 set->duration = cpu_to_le16(duration / 10);
1292         }
1293
1294         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE,
1295                                      sizeof(*cp) +
1296                                      sizeof(*set) * cp->num_of_sets,
1297                                      data, HCI_CMD_TIMEOUT);
1298 }
1299
1300 int hci_start_ext_adv_sync(struct hci_dev *hdev, u8 instance)
1301 {
1302         int err;
1303
1304         err = hci_setup_ext_adv_instance_sync(hdev, instance);
1305         if (err)
1306                 return err;
1307
1308         err = hci_set_ext_scan_rsp_data_sync(hdev, instance);
1309         if (err)
1310                 return err;
1311
1312         return hci_enable_ext_advertising_sync(hdev, instance);
1313 }
1314
1315 static int hci_disable_per_advertising_sync(struct hci_dev *hdev, u8 instance)
1316 {
1317         struct hci_cp_le_set_per_adv_enable cp;
1318         struct adv_info *adv = NULL;
1319
1320         /* If periodic advertising already disabled there is nothing to do. */
1321         adv = hci_find_adv_instance(hdev, instance);
1322         if (!adv || !adv->periodic || !adv->enabled)
1323                 return 0;
1324
1325         memset(&cp, 0, sizeof(cp));
1326
1327         cp.enable = 0x00;
1328         cp.handle = instance;
1329
1330         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_PER_ADV_ENABLE,
1331                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1332 }
1333
1334 static int hci_set_per_adv_params_sync(struct hci_dev *hdev, u8 instance,
1335                                        u16 min_interval, u16 max_interval)
1336 {
1337         struct hci_cp_le_set_per_adv_params cp;
1338
1339         memset(&cp, 0, sizeof(cp));
1340
1341         if (!min_interval)
1342                 min_interval = DISCOV_LE_PER_ADV_INT_MIN;
1343
1344         if (!max_interval)
1345                 max_interval = DISCOV_LE_PER_ADV_INT_MAX;
1346
1347         cp.handle = instance;
1348         cp.min_interval = cpu_to_le16(min_interval);
1349         cp.max_interval = cpu_to_le16(max_interval);
1350         cp.periodic_properties = 0x0000;
1351
1352         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_PER_ADV_PARAMS,
1353                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1354 }
1355
1356 static int hci_set_per_adv_data_sync(struct hci_dev *hdev, u8 instance)
1357 {
1358         struct {
1359                 struct hci_cp_le_set_per_adv_data cp;
1360                 u8 data[HCI_MAX_PER_AD_LENGTH];
1361         } pdu;
1362         u8 len;
1363
1364         memset(&pdu, 0, sizeof(pdu));
1365
1366         if (instance) {
1367                 struct adv_info *adv = hci_find_adv_instance(hdev, instance);
1368
1369                 if (!adv || !adv->periodic)
1370                         return 0;
1371         }
1372
1373         len = eir_create_per_adv_data(hdev, instance, pdu.data);
1374
1375         pdu.cp.length = len;
1376         pdu.cp.handle = instance;
1377         pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1378
1379         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_PER_ADV_DATA,
1380                                      sizeof(pdu.cp) + len, &pdu,
1381                                      HCI_CMD_TIMEOUT);
1382 }
1383
1384 static int hci_enable_per_advertising_sync(struct hci_dev *hdev, u8 instance)
1385 {
1386         struct hci_cp_le_set_per_adv_enable cp;
1387         struct adv_info *adv = NULL;
1388
1389         /* If periodic advertising already enabled there is nothing to do. */
1390         adv = hci_find_adv_instance(hdev, instance);
1391         if (adv && adv->periodic && adv->enabled)
1392                 return 0;
1393
1394         memset(&cp, 0, sizeof(cp));
1395
1396         cp.enable = 0x01;
1397         cp.handle = instance;
1398
1399         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_PER_ADV_ENABLE,
1400                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1401 }
1402
1403 /* Checks if periodic advertising data contains a Basic Announcement and if it
1404  * does generates a Broadcast ID and add Broadcast Announcement.
1405  */
1406 static int hci_adv_bcast_annoucement(struct hci_dev *hdev, struct adv_info *adv)
1407 {
1408         u8 bid[3];
1409         u8 ad[4 + 3];
1410
1411         /* Skip if NULL adv as instance 0x00 is used for general purpose
1412          * advertising so it cannot used for the likes of Broadcast Announcement
1413          * as it can be overwritten at any point.
1414          */
1415         if (!adv)
1416                 return 0;
1417
1418         /* Check if PA data doesn't contains a Basic Audio Announcement then
1419          * there is nothing to do.
1420          */
1421         if (!eir_get_service_data(adv->per_adv_data, adv->per_adv_data_len,
1422                                   0x1851, NULL))
1423                 return 0;
1424
1425         /* Check if advertising data already has a Broadcast Announcement since
1426          * the process may want to control the Broadcast ID directly and in that
1427          * case the kernel shall no interfere.
1428          */
1429         if (eir_get_service_data(adv->adv_data, adv->adv_data_len, 0x1852,
1430                                  NULL))
1431                 return 0;
1432
1433         /* Generate Broadcast ID */
1434         get_random_bytes(bid, sizeof(bid));
1435         eir_append_service_data(ad, 0, 0x1852, bid, sizeof(bid));
1436         hci_set_adv_instance_data(hdev, adv->instance, sizeof(ad), ad, 0, NULL);
1437
1438         return hci_update_adv_data_sync(hdev, adv->instance);
1439 }
1440
1441 int hci_start_per_adv_sync(struct hci_dev *hdev, u8 instance, u8 data_len,
1442                            u8 *data, u32 flags, u16 min_interval,
1443                            u16 max_interval, u16 sync_interval)
1444 {
1445         struct adv_info *adv = NULL;
1446         int err;
1447         bool added = false;
1448
1449         hci_disable_per_advertising_sync(hdev, instance);
1450
1451         if (instance) {
1452                 adv = hci_find_adv_instance(hdev, instance);
1453                 /* Create an instance if that could not be found */
1454                 if (!adv) {
1455                         adv = hci_add_per_instance(hdev, instance, flags,
1456                                                    data_len, data,
1457                                                    sync_interval,
1458                                                    sync_interval);
1459                         if (IS_ERR(adv))
1460                                 return PTR_ERR(adv);
1461                         adv->pending = false;
1462                         added = true;
1463                 }
1464         }
1465
1466         /* Start advertising */
1467         err = hci_start_ext_adv_sync(hdev, instance);
1468         if (err < 0)
1469                 goto fail;
1470
1471         err = hci_adv_bcast_annoucement(hdev, adv);
1472         if (err < 0)
1473                 goto fail;
1474
1475         err = hci_set_per_adv_params_sync(hdev, instance, min_interval,
1476                                           max_interval);
1477         if (err < 0)
1478                 goto fail;
1479
1480         err = hci_set_per_adv_data_sync(hdev, instance);
1481         if (err < 0)
1482                 goto fail;
1483
1484         err = hci_enable_per_advertising_sync(hdev, instance);
1485         if (err < 0)
1486                 goto fail;
1487
1488         return 0;
1489
1490 fail:
1491         if (added)
1492                 hci_remove_adv_instance(hdev, instance);
1493
1494         return err;
1495 }
1496
1497 static int hci_start_adv_sync(struct hci_dev *hdev, u8 instance)
1498 {
1499         int err;
1500
1501         if (ext_adv_capable(hdev))
1502                 return hci_start_ext_adv_sync(hdev, instance);
1503
1504         err = hci_update_adv_data_sync(hdev, instance);
1505         if (err)
1506                 return err;
1507
1508         err = hci_update_scan_rsp_data_sync(hdev, instance);
1509         if (err)
1510                 return err;
1511
1512         return hci_enable_advertising_sync(hdev);
1513 }
1514
1515 int hci_enable_advertising_sync(struct hci_dev *hdev)
1516 {
1517         struct adv_info *adv_instance;
1518         struct hci_cp_le_set_adv_param cp;
1519         u8 own_addr_type, enable = 0x01;
1520         bool connectable;
1521         u16 adv_min_interval, adv_max_interval;
1522         u32 flags;
1523         u8 status;
1524
1525         if (ext_adv_capable(hdev))
1526                 return hci_enable_ext_advertising_sync(hdev,
1527                                                        hdev->cur_adv_instance);
1528
1529         flags = hci_adv_instance_flags(hdev, hdev->cur_adv_instance);
1530         adv_instance = hci_find_adv_instance(hdev, hdev->cur_adv_instance);
1531
1532         /* If the "connectable" instance flag was not set, then choose between
1533          * ADV_IND and ADV_NONCONN_IND based on the global connectable setting.
1534          */
1535         connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) ||
1536                       mgmt_get_connectable(hdev);
1537
1538         if (!is_advertising_allowed(hdev, connectable))
1539                 return -EINVAL;
1540
1541         status = hci_disable_advertising_sync(hdev);
1542         if (status)
1543                 return status;
1544
1545         /* Clear the HCI_LE_ADV bit temporarily so that the
1546          * hci_update_random_address knows that it's safe to go ahead
1547          * and write a new random address. The flag will be set back on
1548          * as soon as the SET_ADV_ENABLE HCI command completes.
1549          */
1550         hci_dev_clear_flag(hdev, HCI_LE_ADV);
1551
1552         /* Set require_privacy to true only when non-connectable
1553          * advertising is used. In that case it is fine to use a
1554          * non-resolvable private address.
1555          */
1556         status = hci_update_random_address_sync(hdev, !connectable,
1557                                                 adv_use_rpa(hdev, flags),
1558                                                 &own_addr_type);
1559         if (status)
1560                 return status;
1561
1562         memset(&cp, 0, sizeof(cp));
1563
1564         if (adv_instance) {
1565                 adv_min_interval = adv_instance->min_interval;
1566                 adv_max_interval = adv_instance->max_interval;
1567         } else {
1568                 adv_min_interval = hdev->le_adv_min_interval;
1569                 adv_max_interval = hdev->le_adv_max_interval;
1570         }
1571
1572         if (connectable) {
1573                 cp.type = LE_ADV_IND;
1574         } else {
1575                 if (hci_adv_instance_is_scannable(hdev, hdev->cur_adv_instance))
1576                         cp.type = LE_ADV_SCAN_IND;
1577                 else
1578                         cp.type = LE_ADV_NONCONN_IND;
1579
1580                 if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE) ||
1581                     hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) {
1582                         adv_min_interval = DISCOV_LE_FAST_ADV_INT_MIN;
1583                         adv_max_interval = DISCOV_LE_FAST_ADV_INT_MAX;
1584                 }
1585         }
1586
1587         cp.min_interval = cpu_to_le16(adv_min_interval);
1588         cp.max_interval = cpu_to_le16(adv_max_interval);
1589         cp.own_address_type = own_addr_type;
1590         cp.channel_map = hdev->le_adv_channel_map;
1591
1592         status = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_PARAM,
1593                                        sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1594         if (status)
1595                 return status;
1596
1597         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_ENABLE,
1598                                      sizeof(enable), &enable, HCI_CMD_TIMEOUT);
1599 }
1600
1601 static int enable_advertising_sync(struct hci_dev *hdev, void *data)
1602 {
1603         return hci_enable_advertising_sync(hdev);
1604 }
1605
1606 int hci_enable_advertising(struct hci_dev *hdev)
1607 {
1608         if (!hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
1609             list_empty(&hdev->adv_instances))
1610                 return 0;
1611
1612         return hci_cmd_sync_queue(hdev, enable_advertising_sync, NULL, NULL);
1613 }
1614
1615 int hci_remove_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance,
1616                                      struct sock *sk)
1617 {
1618         int err;
1619
1620         if (!ext_adv_capable(hdev))
1621                 return 0;
1622
1623         err = hci_disable_ext_adv_instance_sync(hdev, instance);
1624         if (err)
1625                 return err;
1626
1627         /* If request specifies an instance that doesn't exist, fail */
1628         if (instance > 0 && !hci_find_adv_instance(hdev, instance))
1629                 return -EINVAL;
1630
1631         return __hci_cmd_sync_status_sk(hdev, HCI_OP_LE_REMOVE_ADV_SET,
1632                                         sizeof(instance), &instance, 0,
1633                                         HCI_CMD_TIMEOUT, sk);
1634 }
1635
1636 static int remove_ext_adv_sync(struct hci_dev *hdev, void *data)
1637 {
1638         struct adv_info *adv = data;
1639         u8 instance = 0;
1640
1641         if (adv)
1642                 instance = adv->instance;
1643
1644         return hci_remove_ext_adv_instance_sync(hdev, instance, NULL);
1645 }
1646
1647 int hci_remove_ext_adv_instance(struct hci_dev *hdev, u8 instance)
1648 {
1649         struct adv_info *adv = NULL;
1650
1651         if (instance) {
1652                 adv = hci_find_adv_instance(hdev, instance);
1653                 if (!adv)
1654                         return -EINVAL;
1655         }
1656
1657         return hci_cmd_sync_queue(hdev, remove_ext_adv_sync, adv, NULL);
1658 }
1659
1660 int hci_le_terminate_big_sync(struct hci_dev *hdev, u8 handle, u8 reason)
1661 {
1662         struct hci_cp_le_term_big cp;
1663
1664         memset(&cp, 0, sizeof(cp));
1665         cp.handle = handle;
1666         cp.reason = reason;
1667
1668         return __hci_cmd_sync_status(hdev, HCI_OP_LE_TERM_BIG,
1669                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1670 }
1671
1672 static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
1673 {
1674         struct {
1675                 struct hci_cp_le_set_ext_adv_data cp;
1676                 u8 data[HCI_MAX_EXT_AD_LENGTH];
1677         } pdu;
1678         u8 len;
1679         struct adv_info *adv = NULL;
1680         int err;
1681
1682         memset(&pdu, 0, sizeof(pdu));
1683
1684         if (instance) {
1685                 adv = hci_find_adv_instance(hdev, instance);
1686                 if (!adv || !adv->adv_data_changed)
1687                         return 0;
1688         }
1689
1690         len = eir_create_adv_data(hdev, instance, pdu.data);
1691
1692         pdu.cp.length = len;
1693         pdu.cp.handle = instance;
1694         pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1695         pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
1696
1697         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_DATA,
1698                                     sizeof(pdu.cp) + len, &pdu.cp,
1699                                     HCI_CMD_TIMEOUT);
1700         if (err)
1701                 return err;
1702
1703         /* Update data if the command succeed */
1704         if (adv) {
1705                 adv->adv_data_changed = false;
1706         } else {
1707                 memcpy(hdev->adv_data, pdu.data, len);
1708                 hdev->adv_data_len = len;
1709         }
1710
1711         return 0;
1712 }
1713
1714 static int hci_set_adv_data_sync(struct hci_dev *hdev, u8 instance)
1715 {
1716         struct hci_cp_le_set_adv_data cp;
1717         u8 len;
1718
1719         memset(&cp, 0, sizeof(cp));
1720
1721         len = eir_create_adv_data(hdev, instance, cp.data);
1722
1723         /* There's nothing to do if the data hasn't changed */
1724         if (hdev->adv_data_len == len &&
1725             memcmp(cp.data, hdev->adv_data, len) == 0)
1726                 return 0;
1727
1728         memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
1729         hdev->adv_data_len = len;
1730
1731         cp.length = len;
1732
1733         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_DATA,
1734                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1735 }
1736
1737 int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
1738 {
1739         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1740                 return 0;
1741
1742         if (ext_adv_capable(hdev))
1743                 return hci_set_ext_adv_data_sync(hdev, instance);
1744
1745         return hci_set_adv_data_sync(hdev, instance);
1746 }
1747
1748 int hci_schedule_adv_instance_sync(struct hci_dev *hdev, u8 instance,
1749                                    bool force)
1750 {
1751         struct adv_info *adv = NULL;
1752         u16 timeout;
1753
1754         if (hci_dev_test_flag(hdev, HCI_ADVERTISING) && !ext_adv_capable(hdev))
1755                 return -EPERM;
1756
1757         if (hdev->adv_instance_timeout)
1758                 return -EBUSY;
1759
1760         adv = hci_find_adv_instance(hdev, instance);
1761         if (!adv)
1762                 return -ENOENT;
1763
1764         /* A zero timeout means unlimited advertising. As long as there is
1765          * only one instance, duration should be ignored. We still set a timeout
1766          * in case further instances are being added later on.
1767          *
1768          * If the remaining lifetime of the instance is more than the duration
1769          * then the timeout corresponds to the duration, otherwise it will be
1770          * reduced to the remaining instance lifetime.
1771          */
1772         if (adv->timeout == 0 || adv->duration <= adv->remaining_time)
1773                 timeout = adv->duration;
1774         else
1775                 timeout = adv->remaining_time;
1776
1777         /* The remaining time is being reduced unless the instance is being
1778          * advertised without time limit.
1779          */
1780         if (adv->timeout)
1781                 adv->remaining_time = adv->remaining_time - timeout;
1782
1783         /* Only use work for scheduling instances with legacy advertising */
1784         if (!ext_adv_capable(hdev)) {
1785                 hdev->adv_instance_timeout = timeout;
1786                 queue_delayed_work(hdev->req_workqueue,
1787                                    &hdev->adv_instance_expire,
1788                                    msecs_to_jiffies(timeout * 1000));
1789         }
1790
1791         /* If we're just re-scheduling the same instance again then do not
1792          * execute any HCI commands. This happens when a single instance is
1793          * being advertised.
1794          */
1795         if (!force && hdev->cur_adv_instance == instance &&
1796             hci_dev_test_flag(hdev, HCI_LE_ADV))
1797                 return 0;
1798
1799         hdev->cur_adv_instance = instance;
1800
1801         return hci_start_adv_sync(hdev, instance);
1802 }
1803
1804 static int hci_clear_adv_sets_sync(struct hci_dev *hdev, struct sock *sk)
1805 {
1806         int err;
1807
1808         if (!ext_adv_capable(hdev))
1809                 return 0;
1810
1811         /* Disable instance 0x00 to disable all instances */
1812         err = hci_disable_ext_adv_instance_sync(hdev, 0x00);
1813         if (err)
1814                 return err;
1815
1816         return __hci_cmd_sync_status_sk(hdev, HCI_OP_LE_CLEAR_ADV_SETS,
1817                                         0, NULL, 0, HCI_CMD_TIMEOUT, sk);
1818 }
1819
1820 static int hci_clear_adv_sync(struct hci_dev *hdev, struct sock *sk, bool force)
1821 {
1822         struct adv_info *adv, *n;
1823         int err = 0;
1824
1825         if (ext_adv_capable(hdev))
1826                 /* Remove all existing sets */
1827                 err = hci_clear_adv_sets_sync(hdev, sk);
1828         if (ext_adv_capable(hdev))
1829                 return err;
1830
1831         /* This is safe as long as there is no command send while the lock is
1832          * held.
1833          */
1834         hci_dev_lock(hdev);
1835
1836         /* Cleanup non-ext instances */
1837         list_for_each_entry_safe(adv, n, &hdev->adv_instances, list) {
1838                 u8 instance = adv->instance;
1839                 int err;
1840
1841                 if (!(force || adv->timeout))
1842                         continue;
1843
1844                 err = hci_remove_adv_instance(hdev, instance);
1845                 if (!err)
1846                         mgmt_advertising_removed(sk, hdev, instance);
1847         }
1848
1849         hci_dev_unlock(hdev);
1850
1851         return 0;
1852 }
1853
1854 static int hci_remove_adv_sync(struct hci_dev *hdev, u8 instance,
1855                                struct sock *sk)
1856 {
1857         int err = 0;
1858
1859         /* If we use extended advertising, instance has to be removed first. */
1860         if (ext_adv_capable(hdev))
1861                 err = hci_remove_ext_adv_instance_sync(hdev, instance, sk);
1862         if (ext_adv_capable(hdev))
1863                 return err;
1864
1865         /* This is safe as long as there is no command send while the lock is
1866          * held.
1867          */
1868         hci_dev_lock(hdev);
1869
1870         err = hci_remove_adv_instance(hdev, instance);
1871         if (!err)
1872                 mgmt_advertising_removed(sk, hdev, instance);
1873
1874         hci_dev_unlock(hdev);
1875
1876         return err;
1877 }
1878
1879 /* For a single instance:
1880  * - force == true: The instance will be removed even when its remaining
1881  *   lifetime is not zero.
1882  * - force == false: the instance will be deactivated but kept stored unless
1883  *   the remaining lifetime is zero.
1884  *
1885  * For instance == 0x00:
1886  * - force == true: All instances will be removed regardless of their timeout
1887  *   setting.
1888  * - force == false: Only instances that have a timeout will be removed.
1889  */
1890 int hci_remove_advertising_sync(struct hci_dev *hdev, struct sock *sk,
1891                                 u8 instance, bool force)
1892 {
1893         struct adv_info *next = NULL;
1894         int err;
1895
1896         /* Cancel any timeout concerning the removed instance(s). */
1897         if (!instance || hdev->cur_adv_instance == instance)
1898                 cancel_adv_timeout(hdev);
1899
1900         /* Get the next instance to advertise BEFORE we remove
1901          * the current one. This can be the same instance again
1902          * if there is only one instance.
1903          */
1904         if (hdev->cur_adv_instance == instance)
1905                 next = hci_get_next_instance(hdev, instance);
1906
1907         if (!instance) {
1908                 err = hci_clear_adv_sync(hdev, sk, force);
1909                 if (err)
1910                         return err;
1911         } else {
1912                 struct adv_info *adv = hci_find_adv_instance(hdev, instance);
1913
1914                 if (force || (adv && adv->timeout && !adv->remaining_time)) {
1915                         /* Don't advertise a removed instance. */
1916                         if (next && next->instance == instance)
1917                                 next = NULL;
1918
1919                         err = hci_remove_adv_sync(hdev, instance, sk);
1920                         if (err)
1921                                 return err;
1922                 }
1923         }
1924
1925         if (!hdev_is_powered(hdev) || hci_dev_test_flag(hdev, HCI_ADVERTISING))
1926                 return 0;
1927
1928         if (next && !ext_adv_capable(hdev))
1929                 hci_schedule_adv_instance_sync(hdev, next->instance, false);
1930
1931         return 0;
1932 }
1933
1934 int hci_read_rssi_sync(struct hci_dev *hdev, __le16 handle)
1935 {
1936         struct hci_cp_read_rssi cp;
1937
1938         cp.handle = handle;
1939         return __hci_cmd_sync_status(hdev, HCI_OP_READ_RSSI,
1940                                         sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1941 }
1942
1943 int hci_read_clock_sync(struct hci_dev *hdev, struct hci_cp_read_clock *cp)
1944 {
1945         return __hci_cmd_sync_status(hdev, HCI_OP_READ_CLOCK,
1946                                         sizeof(*cp), cp, HCI_CMD_TIMEOUT);
1947 }
1948
1949 int hci_read_tx_power_sync(struct hci_dev *hdev, __le16 handle, u8 type)
1950 {
1951         struct hci_cp_read_tx_power cp;
1952
1953         cp.handle = handle;
1954         cp.type = type;
1955         return __hci_cmd_sync_status(hdev, HCI_OP_READ_TX_POWER,
1956                                         sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1957 }
1958
1959 int hci_disable_advertising_sync(struct hci_dev *hdev)
1960 {
1961         u8 enable = 0x00;
1962         int err = 0;
1963
1964         /* If controller is not advertising we are done. */
1965         if (!hci_dev_test_flag(hdev, HCI_LE_ADV))
1966                 return 0;
1967
1968         if (ext_adv_capable(hdev))
1969                 err = hci_disable_ext_adv_instance_sync(hdev, 0x00);
1970         if (ext_adv_capable(hdev))
1971                 return err;
1972
1973         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_ENABLE,
1974                                      sizeof(enable), &enable, HCI_CMD_TIMEOUT);
1975 }
1976
1977 static int hci_le_set_ext_scan_enable_sync(struct hci_dev *hdev, u8 val,
1978                                            u8 filter_dup)
1979 {
1980         struct hci_cp_le_set_ext_scan_enable cp;
1981
1982         memset(&cp, 0, sizeof(cp));
1983         cp.enable = val;
1984
1985         if (hci_dev_test_flag(hdev, HCI_MESH))
1986                 cp.filter_dup = LE_SCAN_FILTER_DUP_DISABLE;
1987         else
1988                 cp.filter_dup = filter_dup;
1989
1990         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_SCAN_ENABLE,
1991                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
1992 }
1993
1994 static int hci_le_set_scan_enable_sync(struct hci_dev *hdev, u8 val,
1995                                        u8 filter_dup)
1996 {
1997         struct hci_cp_le_set_scan_enable cp;
1998
1999         if (use_ext_scan(hdev))
2000                 return hci_le_set_ext_scan_enable_sync(hdev, val, filter_dup);
2001
2002         memset(&cp, 0, sizeof(cp));
2003         cp.enable = val;
2004
2005         if (val && hci_dev_test_flag(hdev, HCI_MESH))
2006                 cp.filter_dup = LE_SCAN_FILTER_DUP_DISABLE;
2007         else
2008                 cp.filter_dup = filter_dup;
2009
2010         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_SCAN_ENABLE,
2011                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2012 }
2013
2014 static int hci_le_set_addr_resolution_enable_sync(struct hci_dev *hdev, u8 val)
2015 {
2016         if (!use_ll_privacy(hdev))
2017                 return 0;
2018
2019         /* If controller is not/already resolving we are done. */
2020         if (val == hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
2021                 return 0;
2022
2023         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE,
2024                                      sizeof(val), &val, HCI_CMD_TIMEOUT);
2025 }
2026
2027 static int hci_scan_disable_sync(struct hci_dev *hdev)
2028 {
2029         int err;
2030
2031         /* If controller is not scanning we are done. */
2032         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
2033                 return 0;
2034
2035         if (hdev->scanning_paused) {
2036                 bt_dev_dbg(hdev, "Scanning is paused for suspend");
2037                 return 0;
2038         }
2039
2040         err = hci_le_set_scan_enable_sync(hdev, LE_SCAN_DISABLE, 0x00);
2041         if (err) {
2042                 bt_dev_err(hdev, "Unable to disable scanning: %d", err);
2043                 return err;
2044         }
2045
2046         return err;
2047 }
2048
2049 static bool scan_use_rpa(struct hci_dev *hdev)
2050 {
2051         return hci_dev_test_flag(hdev, HCI_PRIVACY);
2052 }
2053
2054 static void hci_start_interleave_scan(struct hci_dev *hdev)
2055 {
2056         hdev->interleave_scan_state = INTERLEAVE_SCAN_NO_FILTER;
2057         queue_delayed_work(hdev->req_workqueue,
2058                            &hdev->interleave_scan, 0);
2059 }
2060
2061 static bool is_interleave_scanning(struct hci_dev *hdev)
2062 {
2063         return hdev->interleave_scan_state != INTERLEAVE_SCAN_NONE;
2064 }
2065
2066 static void cancel_interleave_scan(struct hci_dev *hdev)
2067 {
2068         bt_dev_dbg(hdev, "cancelling interleave scan");
2069
2070         cancel_delayed_work_sync(&hdev->interleave_scan);
2071
2072         hdev->interleave_scan_state = INTERLEAVE_SCAN_NONE;
2073 }
2074
2075 /* Return true if interleave_scan wasn't started until exiting this function,
2076  * otherwise, return false
2077  */
2078 static bool hci_update_interleaved_scan_sync(struct hci_dev *hdev)
2079 {
2080         /* Do interleaved scan only if all of the following are true:
2081          * - There is at least one ADV monitor
2082          * - At least one pending LE connection or one device to be scanned for
2083          * - Monitor offloading is not supported
2084          * If so, we should alternate between allowlist scan and one without
2085          * any filters to save power.
2086          */
2087         bool use_interleaving = hci_is_adv_monitoring(hdev) &&
2088                                 !(list_empty(&hdev->pend_le_conns) &&
2089                                   list_empty(&hdev->pend_le_reports)) &&
2090                                 hci_get_adv_monitor_offload_ext(hdev) ==
2091                                     HCI_ADV_MONITOR_EXT_NONE;
2092         bool is_interleaving = is_interleave_scanning(hdev);
2093
2094         if (use_interleaving && !is_interleaving) {
2095                 hci_start_interleave_scan(hdev);
2096                 bt_dev_dbg(hdev, "starting interleave scan");
2097                 return true;
2098         }
2099
2100         if (!use_interleaving && is_interleaving)
2101                 cancel_interleave_scan(hdev);
2102
2103         return false;
2104 }
2105
2106 /* Removes connection to resolve list if needed.*/
2107 static int hci_le_del_resolve_list_sync(struct hci_dev *hdev,
2108                                         bdaddr_t *bdaddr, u8 bdaddr_type)
2109 {
2110         struct hci_cp_le_del_from_resolv_list cp;
2111         struct bdaddr_list_with_irk *entry;
2112
2113         if (!use_ll_privacy(hdev))
2114                 return 0;
2115
2116         /* Check if the IRK has been programmed */
2117         entry = hci_bdaddr_list_lookup_with_irk(&hdev->le_resolv_list, bdaddr,
2118                                                 bdaddr_type);
2119         if (!entry)
2120                 return 0;
2121
2122         cp.bdaddr_type = bdaddr_type;
2123         bacpy(&cp.bdaddr, bdaddr);
2124
2125         return __hci_cmd_sync_status(hdev, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
2126                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2127 }
2128
2129 static int hci_le_del_accept_list_sync(struct hci_dev *hdev,
2130                                        bdaddr_t *bdaddr, u8 bdaddr_type)
2131 {
2132         struct hci_cp_le_del_from_accept_list cp;
2133         int err;
2134
2135         /* Check if device is on accept list before removing it */
2136         if (!hci_bdaddr_list_lookup(&hdev->le_accept_list, bdaddr, bdaddr_type))
2137                 return 0;
2138
2139         cp.bdaddr_type = bdaddr_type;
2140         bacpy(&cp.bdaddr, bdaddr);
2141
2142         /* Ignore errors when removing from resolving list as that is likely
2143          * that the device was never added.
2144          */
2145         hci_le_del_resolve_list_sync(hdev, &cp.bdaddr, cp.bdaddr_type);
2146
2147         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_DEL_FROM_ACCEPT_LIST,
2148                                     sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2149         if (err) {
2150                 bt_dev_err(hdev, "Unable to remove from allow list: %d", err);
2151                 return err;
2152         }
2153
2154         bt_dev_dbg(hdev, "Remove %pMR (0x%x) from allow list", &cp.bdaddr,
2155                    cp.bdaddr_type);
2156
2157         return 0;
2158 }
2159
2160 struct conn_params {
2161         bdaddr_t addr;
2162         u8 addr_type;
2163         hci_conn_flags_t flags;
2164         u8 privacy_mode;
2165 };
2166
2167 /* Adds connection to resolve list if needed.
2168  * Setting params to NULL programs local hdev->irk
2169  */
2170 static int hci_le_add_resolve_list_sync(struct hci_dev *hdev,
2171                                         struct conn_params *params)
2172 {
2173         struct hci_cp_le_add_to_resolv_list cp;
2174         struct smp_irk *irk;
2175         struct bdaddr_list_with_irk *entry;
2176         struct hci_conn_params *p;
2177
2178         if (!use_ll_privacy(hdev))
2179                 return 0;
2180
2181         /* Attempt to program local identity address, type and irk if params is
2182          * NULL.
2183          */
2184         if (!params) {
2185                 if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
2186                         return 0;
2187
2188                 hci_copy_identity_address(hdev, &cp.bdaddr, &cp.bdaddr_type);
2189                 memcpy(cp.peer_irk, hdev->irk, 16);
2190                 goto done;
2191         }
2192
2193         irk = hci_find_irk_by_addr(hdev, &params->addr, params->addr_type);
2194         if (!irk)
2195                 return 0;
2196
2197         /* Check if the IK has _not_ been programmed yet. */
2198         entry = hci_bdaddr_list_lookup_with_irk(&hdev->le_resolv_list,
2199                                                 &params->addr,
2200                                                 params->addr_type);
2201         if (entry)
2202                 return 0;
2203
2204         cp.bdaddr_type = params->addr_type;
2205         bacpy(&cp.bdaddr, &params->addr);
2206         memcpy(cp.peer_irk, irk->val, 16);
2207
2208         /* Default privacy mode is always Network */
2209         params->privacy_mode = HCI_NETWORK_PRIVACY;
2210
2211         rcu_read_lock();
2212         p = hci_pend_le_action_lookup(&hdev->pend_le_conns,
2213                                       &params->addr, params->addr_type);
2214         if (!p)
2215                 p = hci_pend_le_action_lookup(&hdev->pend_le_reports,
2216                                               &params->addr, params->addr_type);
2217         if (p)
2218                 WRITE_ONCE(p->privacy_mode, HCI_NETWORK_PRIVACY);
2219         rcu_read_unlock();
2220
2221 done:
2222         if (hci_dev_test_flag(hdev, HCI_PRIVACY))
2223                 memcpy(cp.local_irk, hdev->irk, 16);
2224         else
2225                 memset(cp.local_irk, 0, 16);
2226
2227         return __hci_cmd_sync_status(hdev, HCI_OP_LE_ADD_TO_RESOLV_LIST,
2228                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2229 }
2230
2231 /* Set Device Privacy Mode. */
2232 static int hci_le_set_privacy_mode_sync(struct hci_dev *hdev,
2233                                         struct conn_params *params)
2234 {
2235         struct hci_cp_le_set_privacy_mode cp;
2236         struct smp_irk *irk;
2237
2238         /* If device privacy mode has already been set there is nothing to do */
2239         if (params->privacy_mode == HCI_DEVICE_PRIVACY)
2240                 return 0;
2241
2242         /* Check if HCI_CONN_FLAG_DEVICE_PRIVACY has been set as it also
2243          * indicates that LL Privacy has been enabled and
2244          * HCI_OP_LE_SET_PRIVACY_MODE is supported.
2245          */
2246         if (!(params->flags & HCI_CONN_FLAG_DEVICE_PRIVACY))
2247                 return 0;
2248
2249         irk = hci_find_irk_by_addr(hdev, &params->addr, params->addr_type);
2250         if (!irk)
2251                 return 0;
2252
2253         memset(&cp, 0, sizeof(cp));
2254         cp.bdaddr_type = irk->addr_type;
2255         bacpy(&cp.bdaddr, &irk->bdaddr);
2256         cp.mode = HCI_DEVICE_PRIVACY;
2257
2258         /* Note: params->privacy_mode is not updated since it is a copy */
2259
2260         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_PRIVACY_MODE,
2261                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2262 }
2263
2264 /* Adds connection to allow list if needed, if the device uses RPA (has IRK)
2265  * this attempts to program the device in the resolving list as well and
2266  * properly set the privacy mode.
2267  */
2268 static int hci_le_add_accept_list_sync(struct hci_dev *hdev,
2269                                        struct conn_params *params,
2270                                        u8 *num_entries)
2271 {
2272         struct hci_cp_le_add_to_accept_list cp;
2273         int err;
2274
2275         /* During suspend, only wakeable devices can be in acceptlist */
2276         if (hdev->suspended &&
2277             !(params->flags & HCI_CONN_FLAG_REMOTE_WAKEUP))
2278                 return 0;
2279
2280         /* Select filter policy to accept all advertising */
2281         if (*num_entries >= hdev->le_accept_list_size)
2282                 return -ENOSPC;
2283
2284         /* Accept list can not be used with RPAs */
2285         if (!use_ll_privacy(hdev) &&
2286             hci_find_irk_by_addr(hdev, &params->addr, params->addr_type))
2287                 return -EINVAL;
2288
2289         /* Attempt to program the device in the resolving list first to avoid
2290          * having to rollback in case it fails since the resolving list is
2291          * dynamic it can probably be smaller than the accept list.
2292          */
2293         err = hci_le_add_resolve_list_sync(hdev, params);
2294         if (err) {
2295                 bt_dev_err(hdev, "Unable to add to resolve list: %d", err);
2296                 return err;
2297         }
2298
2299         /* Set Privacy Mode */
2300         err = hci_le_set_privacy_mode_sync(hdev, params);
2301         if (err) {
2302                 bt_dev_err(hdev, "Unable to set privacy mode: %d", err);
2303                 return err;
2304         }
2305
2306         /* Check if already in accept list */
2307         if (hci_bdaddr_list_lookup(&hdev->le_accept_list, &params->addr,
2308                                    params->addr_type))
2309                 return 0;
2310
2311         *num_entries += 1;
2312         cp.bdaddr_type = params->addr_type;
2313         bacpy(&cp.bdaddr, &params->addr);
2314
2315         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_ADD_TO_ACCEPT_LIST,
2316                                     sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2317         if (err) {
2318                 bt_dev_err(hdev, "Unable to add to allow list: %d", err);
2319                 /* Rollback the device from the resolving list */
2320                 hci_le_del_resolve_list_sync(hdev, &cp.bdaddr, cp.bdaddr_type);
2321                 return err;
2322         }
2323
2324         bt_dev_dbg(hdev, "Add %pMR (0x%x) to allow list", &cp.bdaddr,
2325                    cp.bdaddr_type);
2326
2327         return 0;
2328 }
2329
2330 /* This function disables/pause all advertising instances */
2331 static int hci_pause_advertising_sync(struct hci_dev *hdev)
2332 {
2333         int err;
2334         int old_state;
2335
2336         /* If already been paused there is nothing to do. */
2337         if (hdev->advertising_paused)
2338                 return 0;
2339
2340         bt_dev_dbg(hdev, "Pausing directed advertising");
2341
2342         /* Stop directed advertising */
2343         old_state = hci_dev_test_flag(hdev, HCI_ADVERTISING);
2344         if (old_state) {
2345                 /* When discoverable timeout triggers, then just make sure
2346                  * the limited discoverable flag is cleared. Even in the case
2347                  * of a timeout triggered from general discoverable, it is
2348                  * safe to unconditionally clear the flag.
2349                  */
2350                 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
2351                 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
2352                 hdev->discov_timeout = 0;
2353         }
2354
2355         bt_dev_dbg(hdev, "Pausing advertising instances");
2356
2357         /* Call to disable any advertisements active on the controller.
2358          * This will succeed even if no advertisements are configured.
2359          */
2360         err = hci_disable_advertising_sync(hdev);
2361         if (err)
2362                 return err;
2363
2364         /* If we are using software rotation, pause the loop */
2365         if (!ext_adv_capable(hdev))
2366                 cancel_adv_timeout(hdev);
2367
2368         hdev->advertising_paused = true;
2369         hdev->advertising_old_state = old_state;
2370
2371         return 0;
2372 }
2373
2374 /* This function enables all user advertising instances */
2375 static int hci_resume_advertising_sync(struct hci_dev *hdev)
2376 {
2377         struct adv_info *adv, *tmp;
2378         int err;
2379
2380         /* If advertising has not been paused there is nothing  to do. */
2381         if (!hdev->advertising_paused)
2382                 return 0;
2383
2384         /* Resume directed advertising */
2385         hdev->advertising_paused = false;
2386         if (hdev->advertising_old_state) {
2387                 hci_dev_set_flag(hdev, HCI_ADVERTISING);
2388                 hdev->advertising_old_state = 0;
2389         }
2390
2391         bt_dev_dbg(hdev, "Resuming advertising instances");
2392
2393         if (ext_adv_capable(hdev)) {
2394                 /* Call for each tracked instance to be re-enabled */
2395                 list_for_each_entry_safe(adv, tmp, &hdev->adv_instances, list) {
2396                         err = hci_enable_ext_advertising_sync(hdev,
2397                                                               adv->instance);
2398                         if (!err)
2399                                 continue;
2400
2401                         /* If the instance cannot be resumed remove it */
2402                         hci_remove_ext_adv_instance_sync(hdev, adv->instance,
2403                                                          NULL);
2404                 }
2405         } else {
2406                 /* Schedule for most recent instance to be restarted and begin
2407                  * the software rotation loop
2408                  */
2409                 err = hci_schedule_adv_instance_sync(hdev,
2410                                                      hdev->cur_adv_instance,
2411                                                      true);
2412         }
2413
2414         hdev->advertising_paused = false;
2415
2416         return err;
2417 }
2418
2419 static int hci_pause_addr_resolution(struct hci_dev *hdev)
2420 {
2421         int err;
2422
2423         if (!use_ll_privacy(hdev))
2424                 return 0;
2425
2426         if (!hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
2427                 return 0;
2428
2429         /* Cannot disable addr resolution if scanning is enabled or
2430          * when initiating an LE connection.
2431          */
2432         if (hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2433             hci_lookup_le_connect(hdev)) {
2434                 bt_dev_err(hdev, "Command not allowed when scan/LE connect");
2435                 return -EPERM;
2436         }
2437
2438         /* Cannot disable addr resolution if advertising is enabled. */
2439         err = hci_pause_advertising_sync(hdev);
2440         if (err) {
2441                 bt_dev_err(hdev, "Pause advertising failed: %d", err);
2442                 return err;
2443         }
2444
2445         err = hci_le_set_addr_resolution_enable_sync(hdev, 0x00);
2446         if (err)
2447                 bt_dev_err(hdev, "Unable to disable Address Resolution: %d",
2448                            err);
2449
2450         /* Return if address resolution is disabled and RPA is not used. */
2451         if (!err && scan_use_rpa(hdev))
2452                 return 0;
2453
2454         hci_resume_advertising_sync(hdev);
2455         return err;
2456 }
2457
2458 struct sk_buff *hci_read_local_oob_data_sync(struct hci_dev *hdev,
2459                                              bool extended, struct sock *sk)
2460 {
2461         u16 opcode = extended ? HCI_OP_READ_LOCAL_OOB_EXT_DATA :
2462                                         HCI_OP_READ_LOCAL_OOB_DATA;
2463
2464         return __hci_cmd_sync_sk(hdev, opcode, 0, NULL, 0, HCI_CMD_TIMEOUT, sk);
2465 }
2466
2467 static struct conn_params *conn_params_copy(struct list_head *list, size_t *n)
2468 {
2469         struct hci_conn_params *params;
2470         struct conn_params *p;
2471         size_t i;
2472
2473         rcu_read_lock();
2474
2475         i = 0;
2476         list_for_each_entry_rcu(params, list, action)
2477                 ++i;
2478         *n = i;
2479
2480         rcu_read_unlock();
2481
2482         p = kvcalloc(*n, sizeof(struct conn_params), GFP_KERNEL);
2483         if (!p)
2484                 return NULL;
2485
2486         rcu_read_lock();
2487
2488         i = 0;
2489         list_for_each_entry_rcu(params, list, action) {
2490                 /* Racing adds are handled in next scan update */
2491                 if (i >= *n)
2492                         break;
2493
2494                 /* No hdev->lock, but: addr, addr_type are immutable.
2495                  * privacy_mode is only written by us or in
2496                  * hci_cc_le_set_privacy_mode that we wait for.
2497                  * We should be idempotent so MGMT updating flags
2498                  * while we are processing is OK.
2499                  */
2500                 bacpy(&p[i].addr, &params->addr);
2501                 p[i].addr_type = params->addr_type;
2502                 p[i].flags = READ_ONCE(params->flags);
2503                 p[i].privacy_mode = READ_ONCE(params->privacy_mode);
2504                 ++i;
2505         }
2506
2507         rcu_read_unlock();
2508
2509         *n = i;
2510         return p;
2511 }
2512
2513 /* Device must not be scanning when updating the accept list.
2514  *
2515  * Update is done using the following sequence:
2516  *
2517  * use_ll_privacy((Disable Advertising) -> Disable Resolving List) ->
2518  * Remove Devices From Accept List ->
2519  * (has IRK && use_ll_privacy(Remove Devices From Resolving List))->
2520  * Add Devices to Accept List ->
2521  * (has IRK && use_ll_privacy(Remove Devices From Resolving List)) ->
2522  * use_ll_privacy(Enable Resolving List -> (Enable Advertising)) ->
2523  * Enable Scanning
2524  *
2525  * In case of failure advertising shall be restored to its original state and
2526  * return would disable accept list since either accept or resolving list could
2527  * not be programmed.
2528  *
2529  */
2530 static u8 hci_update_accept_list_sync(struct hci_dev *hdev)
2531 {
2532         struct conn_params *params;
2533         struct bdaddr_list *b, *t;
2534         u8 num_entries = 0;
2535         bool pend_conn, pend_report;
2536         u8 filter_policy;
2537         size_t i, n;
2538         int err;
2539
2540         /* Pause advertising if resolving list can be used as controllers
2541          * cannot accept resolving list modifications while advertising.
2542          */
2543         if (use_ll_privacy(hdev)) {
2544                 err = hci_pause_advertising_sync(hdev);
2545                 if (err) {
2546                         bt_dev_err(hdev, "pause advertising failed: %d", err);
2547                         return 0x00;
2548                 }
2549         }
2550
2551         /* Disable address resolution while reprogramming accept list since
2552          * devices that do have an IRK will be programmed in the resolving list
2553          * when LL Privacy is enabled.
2554          */
2555         err = hci_le_set_addr_resolution_enable_sync(hdev, 0x00);
2556         if (err) {
2557                 bt_dev_err(hdev, "Unable to disable LL privacy: %d", err);
2558                 goto done;
2559         }
2560
2561         /* Go through the current accept list programmed into the
2562          * controller one by one and check if that address is connected or is
2563          * still in the list of pending connections or list of devices to
2564          * report. If not present in either list, then remove it from
2565          * the controller.
2566          */
2567         list_for_each_entry_safe(b, t, &hdev->le_accept_list, list) {
2568                 if (hci_conn_hash_lookup_le(hdev, &b->bdaddr, b->bdaddr_type))
2569                         continue;
2570
2571                 /* Pointers not dereferenced, no locks needed */
2572                 pend_conn = hci_pend_le_action_lookup(&hdev->pend_le_conns,
2573                                                       &b->bdaddr,
2574                                                       b->bdaddr_type);
2575                 pend_report = hci_pend_le_action_lookup(&hdev->pend_le_reports,
2576                                                         &b->bdaddr,
2577                                                         b->bdaddr_type);
2578
2579                 /* If the device is not likely to connect or report,
2580                  * remove it from the acceptlist.
2581                  */
2582                 if (!pend_conn && !pend_report) {
2583                         hci_le_del_accept_list_sync(hdev, &b->bdaddr,
2584                                                     b->bdaddr_type);
2585                         continue;
2586                 }
2587
2588                 num_entries++;
2589         }
2590
2591         /* Since all no longer valid accept list entries have been
2592          * removed, walk through the list of pending connections
2593          * and ensure that any new device gets programmed into
2594          * the controller.
2595          *
2596          * If the list of the devices is larger than the list of
2597          * available accept list entries in the controller, then
2598          * just abort and return filer policy value to not use the
2599          * accept list.
2600          *
2601          * The list and params may be mutated while we wait for events,
2602          * so make a copy and iterate it.
2603          */
2604
2605         params = conn_params_copy(&hdev->pend_le_conns, &n);
2606         if (!params) {
2607                 err = -ENOMEM;
2608                 goto done;
2609         }
2610
2611         for (i = 0; i < n; ++i) {
2612                 err = hci_le_add_accept_list_sync(hdev, &params[i],
2613                                                   &num_entries);
2614                 if (err) {
2615                         kvfree(params);
2616                         goto done;
2617                 }
2618         }
2619
2620         kvfree(params);
2621
2622         /* After adding all new pending connections, walk through
2623          * the list of pending reports and also add these to the
2624          * accept list if there is still space. Abort if space runs out.
2625          */
2626
2627         params = conn_params_copy(&hdev->pend_le_reports, &n);
2628         if (!params) {
2629                 err = -ENOMEM;
2630                 goto done;
2631         }
2632
2633         for (i = 0; i < n; ++i) {
2634                 err = hci_le_add_accept_list_sync(hdev, &params[i],
2635                                                   &num_entries);
2636                 if (err) {
2637                         kvfree(params);
2638                         goto done;
2639                 }
2640         }
2641
2642         kvfree(params);
2643
2644         /* Use the allowlist unless the following conditions are all true:
2645          * - We are not currently suspending
2646          * - There are 1 or more ADV monitors registered and it's not offloaded
2647          * - Interleaved scanning is not currently using the allowlist
2648          */
2649         if (!idr_is_empty(&hdev->adv_monitors_idr) && !hdev->suspended &&
2650             hci_get_adv_monitor_offload_ext(hdev) == HCI_ADV_MONITOR_EXT_NONE &&
2651             hdev->interleave_scan_state != INTERLEAVE_SCAN_ALLOWLIST)
2652                 err = -EINVAL;
2653
2654 done:
2655         filter_policy = err ? 0x00 : 0x01;
2656
2657         /* Enable address resolution when LL Privacy is enabled. */
2658         err = hci_le_set_addr_resolution_enable_sync(hdev, 0x01);
2659         if (err)
2660                 bt_dev_err(hdev, "Unable to enable LL privacy: %d", err);
2661
2662         /* Resume advertising if it was paused */
2663         if (use_ll_privacy(hdev))
2664                 hci_resume_advertising_sync(hdev);
2665
2666         /* Select filter policy to use accept list */
2667         return filter_policy;
2668 }
2669
2670 static int hci_le_set_ext_scan_param_sync(struct hci_dev *hdev, u8 type,
2671                                           u16 interval, u16 window,
2672                                           u8 own_addr_type, u8 filter_policy)
2673 {
2674         struct hci_cp_le_set_ext_scan_params *cp;
2675         struct hci_cp_le_scan_phy_params *phy;
2676         u8 data[sizeof(*cp) + sizeof(*phy) * 2];
2677         u8 num_phy = 0;
2678
2679         cp = (void *)data;
2680         phy = (void *)cp->data;
2681
2682         memset(data, 0, sizeof(data));
2683
2684         cp->own_addr_type = own_addr_type;
2685         cp->filter_policy = filter_policy;
2686
2687         if (scan_1m(hdev) || scan_2m(hdev)) {
2688                 cp->scanning_phys |= LE_SCAN_PHY_1M;
2689
2690                 phy->type = type;
2691                 phy->interval = cpu_to_le16(interval);
2692                 phy->window = cpu_to_le16(window);
2693
2694                 num_phy++;
2695                 phy++;
2696         }
2697
2698         if (scan_coded(hdev)) {
2699                 cp->scanning_phys |= LE_SCAN_PHY_CODED;
2700
2701                 phy->type = type;
2702                 phy->interval = cpu_to_le16(interval);
2703                 phy->window = cpu_to_le16(window);
2704
2705                 num_phy++;
2706                 phy++;
2707         }
2708
2709         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_SCAN_PARAMS,
2710                                      sizeof(*cp) + sizeof(*phy) * num_phy,
2711                                      data, HCI_CMD_TIMEOUT);
2712 }
2713
2714 static int hci_le_set_scan_param_sync(struct hci_dev *hdev, u8 type,
2715                                       u16 interval, u16 window,
2716                                       u8 own_addr_type, u8 filter_policy)
2717 {
2718         struct hci_cp_le_set_scan_param cp;
2719
2720         if (use_ext_scan(hdev))
2721                 return hci_le_set_ext_scan_param_sync(hdev, type, interval,
2722                                                       window, own_addr_type,
2723                                                       filter_policy);
2724
2725         memset(&cp, 0, sizeof(cp));
2726         cp.type = type;
2727         cp.interval = cpu_to_le16(interval);
2728         cp.window = cpu_to_le16(window);
2729         cp.own_address_type = own_addr_type;
2730         cp.filter_policy = filter_policy;
2731
2732         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_SCAN_PARAM,
2733                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
2734 }
2735
2736 static int hci_start_scan_sync(struct hci_dev *hdev, u8 type, u16 interval,
2737                                u16 window, u8 own_addr_type, u8 filter_policy,
2738                                u8 filter_dup)
2739 {
2740         int err;
2741
2742         if (hdev->scanning_paused) {
2743                 bt_dev_dbg(hdev, "Scanning is paused for suspend");
2744                 return 0;
2745         }
2746
2747         err = hci_le_set_scan_param_sync(hdev, type, interval, window,
2748                                          own_addr_type, filter_policy);
2749         if (err)
2750                 return err;
2751
2752         return hci_le_set_scan_enable_sync(hdev, LE_SCAN_ENABLE, filter_dup);
2753 }
2754
2755 static int hci_passive_scan_sync(struct hci_dev *hdev)
2756 {
2757         u8 own_addr_type;
2758         u8 filter_policy;
2759         u16 window, interval;
2760         u8 filter_dups = LE_SCAN_FILTER_DUP_ENABLE;
2761         int err;
2762
2763         if (hdev->scanning_paused) {
2764                 bt_dev_dbg(hdev, "Scanning is paused for suspend");
2765                 return 0;
2766         }
2767
2768         err = hci_scan_disable_sync(hdev);
2769         if (err) {
2770                 bt_dev_err(hdev, "disable scanning failed: %d", err);
2771                 return err;
2772         }
2773
2774         /* Set require_privacy to false since no SCAN_REQ are send
2775          * during passive scanning. Not using an non-resolvable address
2776          * here is important so that peer devices using direct
2777          * advertising with our address will be correctly reported
2778          * by the controller.
2779          */
2780         if (hci_update_random_address_sync(hdev, false, scan_use_rpa(hdev),
2781                                            &own_addr_type))
2782                 return 0;
2783
2784         if (hdev->enable_advmon_interleave_scan &&
2785             hci_update_interleaved_scan_sync(hdev))
2786                 return 0;
2787
2788         bt_dev_dbg(hdev, "interleave state %d", hdev->interleave_scan_state);
2789
2790         /* Adding or removing entries from the accept list must
2791          * happen before enabling scanning. The controller does
2792          * not allow accept list modification while scanning.
2793          */
2794         filter_policy = hci_update_accept_list_sync(hdev);
2795
2796         /* When the controller is using random resolvable addresses and
2797          * with that having LE privacy enabled, then controllers with
2798          * Extended Scanner Filter Policies support can now enable support
2799          * for handling directed advertising.
2800          *
2801          * So instead of using filter polices 0x00 (no acceptlist)
2802          * and 0x01 (acceptlist enabled) use the new filter policies
2803          * 0x02 (no acceptlist) and 0x03 (acceptlist enabled).
2804          */
2805         if (hci_dev_test_flag(hdev, HCI_PRIVACY) &&
2806             (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY))
2807                 filter_policy |= 0x02;
2808
2809         if (hdev->suspended) {
2810                 window = hdev->le_scan_window_suspend;
2811                 interval = hdev->le_scan_int_suspend;
2812         } else if (hci_is_le_conn_scanning(hdev)) {
2813                 window = hdev->le_scan_window_connect;
2814                 interval = hdev->le_scan_int_connect;
2815         } else if (hci_is_adv_monitoring(hdev)) {
2816                 window = hdev->le_scan_window_adv_monitor;
2817                 interval = hdev->le_scan_int_adv_monitor;
2818         } else {
2819                 window = hdev->le_scan_window;
2820                 interval = hdev->le_scan_interval;
2821         }
2822
2823         /* Disable all filtering for Mesh */
2824         if (hci_dev_test_flag(hdev, HCI_MESH)) {
2825                 filter_policy = 0;
2826                 filter_dups = LE_SCAN_FILTER_DUP_DISABLE;
2827         }
2828
2829         bt_dev_dbg(hdev, "LE passive scan with acceptlist = %d", filter_policy);
2830
2831         return hci_start_scan_sync(hdev, LE_SCAN_PASSIVE, interval, window,
2832                                    own_addr_type, filter_policy, filter_dups);
2833 }
2834
2835 /* This function controls the passive scanning based on hdev->pend_le_conns
2836  * list. If there are pending LE connection we start the background scanning,
2837  * otherwise we stop it in the following sequence:
2838  *
2839  * If there are devices to scan:
2840  *
2841  * Disable Scanning -> Update Accept List ->
2842  * use_ll_privacy((Disable Advertising) -> Disable Resolving List ->
2843  * Update Resolving List -> Enable Resolving List -> (Enable Advertising)) ->
2844  * Enable Scanning
2845  *
2846  * Otherwise:
2847  *
2848  * Disable Scanning
2849  */
2850 int hci_update_passive_scan_sync(struct hci_dev *hdev)
2851 {
2852         int err;
2853
2854         if (!test_bit(HCI_UP, &hdev->flags) ||
2855             test_bit(HCI_INIT, &hdev->flags) ||
2856             hci_dev_test_flag(hdev, HCI_SETUP) ||
2857             hci_dev_test_flag(hdev, HCI_CONFIG) ||
2858             hci_dev_test_flag(hdev, HCI_AUTO_OFF) ||
2859             hci_dev_test_flag(hdev, HCI_UNREGISTER))
2860                 return 0;
2861
2862         /* No point in doing scanning if LE support hasn't been enabled */
2863         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
2864                 return 0;
2865
2866         /* If discovery is active don't interfere with it */
2867         if (hdev->discovery.state != DISCOVERY_STOPPED)
2868                 return 0;
2869
2870         /* Reset RSSI and UUID filters when starting background scanning
2871          * since these filters are meant for service discovery only.
2872          *
2873          * The Start Discovery and Start Service Discovery operations
2874          * ensure to set proper values for RSSI threshold and UUID
2875          * filter list. So it is safe to just reset them here.
2876          */
2877         hci_discovery_filter_clear(hdev);
2878
2879         bt_dev_dbg(hdev, "ADV monitoring is %s",
2880                    hci_is_adv_monitoring(hdev) ? "on" : "off");
2881
2882         if (!hci_dev_test_flag(hdev, HCI_MESH) &&
2883             list_empty(&hdev->pend_le_conns) &&
2884             list_empty(&hdev->pend_le_reports) &&
2885             !hci_is_adv_monitoring(hdev) &&
2886             !hci_dev_test_flag(hdev, HCI_PA_SYNC)) {
2887                 /* If there is no pending LE connections or devices
2888                  * to be scanned for or no ADV monitors, we should stop the
2889                  * background scanning.
2890                  */
2891
2892                 bt_dev_dbg(hdev, "stopping background scanning");
2893
2894                 err = hci_scan_disable_sync(hdev);
2895                 if (err)
2896                         bt_dev_err(hdev, "stop background scanning failed: %d",
2897                                    err);
2898         } else {
2899                 /* If there is at least one pending LE connection, we should
2900                  * keep the background scan running.
2901                  */
2902
2903                 /* If controller is connecting, we should not start scanning
2904                  * since some controllers are not able to scan and connect at
2905                  * the same time.
2906                  */
2907                 if (hci_lookup_le_connect(hdev))
2908                         return 0;
2909
2910                 bt_dev_dbg(hdev, "start background scanning");
2911
2912                 err = hci_passive_scan_sync(hdev);
2913                 if (err)
2914                         bt_dev_err(hdev, "start background scanning failed: %d",
2915                                    err);
2916         }
2917
2918         return err;
2919 }
2920
2921 static int update_scan_sync(struct hci_dev *hdev, void *data)
2922 {
2923         return hci_update_scan_sync(hdev);
2924 }
2925
2926 int hci_update_scan(struct hci_dev *hdev)
2927 {
2928         return hci_cmd_sync_queue(hdev, update_scan_sync, NULL, NULL);
2929 }
2930
2931 static int update_passive_scan_sync(struct hci_dev *hdev, void *data)
2932 {
2933         return hci_update_passive_scan_sync(hdev);
2934 }
2935
2936 int hci_update_passive_scan(struct hci_dev *hdev)
2937 {
2938         /* Only queue if it would have any effect */
2939         if (!test_bit(HCI_UP, &hdev->flags) ||
2940             test_bit(HCI_INIT, &hdev->flags) ||
2941             hci_dev_test_flag(hdev, HCI_SETUP) ||
2942             hci_dev_test_flag(hdev, HCI_CONFIG) ||
2943             hci_dev_test_flag(hdev, HCI_AUTO_OFF) ||
2944             hci_dev_test_flag(hdev, HCI_UNREGISTER))
2945                 return 0;
2946
2947         return hci_cmd_sync_queue(hdev, update_passive_scan_sync, NULL, NULL);
2948 }
2949
2950 int hci_write_sc_support_sync(struct hci_dev *hdev, u8 val)
2951 {
2952         int err;
2953
2954         if (!bredr_sc_enabled(hdev) || lmp_host_sc_capable(hdev))
2955                 return 0;
2956
2957         err = __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SC_SUPPORT,
2958                                     sizeof(val), &val, HCI_CMD_TIMEOUT);
2959
2960         if (!err) {
2961                 if (val) {
2962                         hdev->features[1][0] |= LMP_HOST_SC;
2963                         hci_dev_set_flag(hdev, HCI_SC_ENABLED);
2964                 } else {
2965                         hdev->features[1][0] &= ~LMP_HOST_SC;
2966                         hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
2967                 }
2968         }
2969
2970         return err;
2971 }
2972
2973 int hci_write_ssp_mode_sync(struct hci_dev *hdev, u8 mode)
2974 {
2975         int err;
2976
2977         if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED) ||
2978             lmp_host_ssp_capable(hdev))
2979                 return 0;
2980
2981         if (!mode && hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) {
2982                 __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE,
2983                                       sizeof(mode), &mode, HCI_CMD_TIMEOUT);
2984         }
2985
2986         err = __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SSP_MODE,
2987                                     sizeof(mode), &mode, HCI_CMD_TIMEOUT);
2988         if (err)
2989                 return err;
2990
2991         return hci_write_sc_support_sync(hdev, 0x01);
2992 }
2993
2994 int hci_write_le_host_supported_sync(struct hci_dev *hdev, u8 le, u8 simul)
2995 {
2996         struct hci_cp_write_le_host_supported cp;
2997
2998         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) ||
2999             !lmp_bredr_capable(hdev))
3000                 return 0;
3001
3002         /* Check first if we already have the right host state
3003          * (host features set)
3004          */
3005         if (le == lmp_host_le_capable(hdev) &&
3006             simul == lmp_host_le_br_capable(hdev))
3007                 return 0;
3008
3009         memset(&cp, 0, sizeof(cp));
3010
3011         cp.le = le;
3012         cp.simul = simul;
3013
3014         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED,
3015                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
3016 }
3017
3018 static int hci_powered_update_adv_sync(struct hci_dev *hdev)
3019 {
3020         struct adv_info *adv, *tmp;
3021         int err;
3022
3023         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
3024                 return 0;
3025
3026         /* If RPA Resolution has not been enable yet it means the
3027          * resolving list is empty and we should attempt to program the
3028          * local IRK in order to support using own_addr_type
3029          * ADDR_LE_DEV_RANDOM_RESOLVED (0x03).
3030          */
3031         if (!hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) {
3032                 hci_le_add_resolve_list_sync(hdev, NULL);
3033                 hci_le_set_addr_resolution_enable_sync(hdev, 0x01);
3034         }
3035
3036         /* Make sure the controller has a good default for
3037          * advertising data. This also applies to the case
3038          * where BR/EDR was toggled during the AUTO_OFF phase.
3039          */
3040         if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
3041             list_empty(&hdev->adv_instances)) {
3042                 if (ext_adv_capable(hdev)) {
3043                         err = hci_setup_ext_adv_instance_sync(hdev, 0x00);
3044                         if (!err)
3045                                 hci_update_scan_rsp_data_sync(hdev, 0x00);
3046                 } else {
3047                         err = hci_update_adv_data_sync(hdev, 0x00);
3048                         if (!err)
3049                                 hci_update_scan_rsp_data_sync(hdev, 0x00);
3050                 }
3051
3052                 if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
3053                         hci_enable_advertising_sync(hdev);
3054         }
3055
3056         /* Call for each tracked instance to be scheduled */
3057         list_for_each_entry_safe(adv, tmp, &hdev->adv_instances, list)
3058                 hci_schedule_adv_instance_sync(hdev, adv->instance, true);
3059
3060         return 0;
3061 }
3062
3063 static int hci_write_auth_enable_sync(struct hci_dev *hdev)
3064 {
3065         u8 link_sec;
3066
3067         link_sec = hci_dev_test_flag(hdev, HCI_LINK_SECURITY);
3068         if (link_sec == test_bit(HCI_AUTH, &hdev->flags))
3069                 return 0;
3070
3071         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_AUTH_ENABLE,
3072                                      sizeof(link_sec), &link_sec,
3073                                      HCI_CMD_TIMEOUT);
3074 }
3075
3076 int hci_write_fast_connectable_sync(struct hci_dev *hdev, bool enable)
3077 {
3078         struct hci_cp_write_page_scan_activity cp;
3079         u8 type;
3080         int err = 0;
3081
3082         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
3083                 return 0;
3084
3085         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
3086                 return 0;
3087
3088         memset(&cp, 0, sizeof(cp));
3089
3090         if (enable) {
3091                 type = PAGE_SCAN_TYPE_INTERLACED;
3092
3093                 /* 160 msec page scan interval */
3094                 cp.interval = cpu_to_le16(0x0100);
3095         } else {
3096                 type = hdev->def_page_scan_type;
3097                 cp.interval = cpu_to_le16(hdev->def_page_scan_int);
3098         }
3099
3100         cp.window = cpu_to_le16(hdev->def_page_scan_window);
3101
3102         if (__cpu_to_le16(hdev->page_scan_interval) != cp.interval ||
3103             __cpu_to_le16(hdev->page_scan_window) != cp.window) {
3104                 err = __hci_cmd_sync_status(hdev,
3105                                             HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
3106                                             sizeof(cp), &cp, HCI_CMD_TIMEOUT);
3107                 if (err)
3108                         return err;
3109         }
3110
3111         if (hdev->page_scan_type != type)
3112                 err = __hci_cmd_sync_status(hdev,
3113                                             HCI_OP_WRITE_PAGE_SCAN_TYPE,
3114                                             sizeof(type), &type,
3115                                             HCI_CMD_TIMEOUT);
3116
3117         return err;
3118 }
3119
3120 static bool disconnected_accept_list_entries(struct hci_dev *hdev)
3121 {
3122         struct bdaddr_list *b;
3123
3124         list_for_each_entry(b, &hdev->accept_list, list) {
3125                 struct hci_conn *conn;
3126
3127                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &b->bdaddr);
3128                 if (!conn)
3129                         return true;
3130
3131                 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3132                         return true;
3133         }
3134
3135         return false;
3136 }
3137
3138 static int hci_write_scan_enable_sync(struct hci_dev *hdev, u8 val)
3139 {
3140         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SCAN_ENABLE,
3141                                             sizeof(val), &val,
3142                                             HCI_CMD_TIMEOUT);
3143 }
3144
3145 int hci_update_scan_sync(struct hci_dev *hdev)
3146 {
3147         u8 scan;
3148
3149         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
3150                 return 0;
3151
3152         if (!hdev_is_powered(hdev))
3153                 return 0;
3154
3155         if (mgmt_powering_down(hdev))
3156                 return 0;
3157
3158         if (hdev->scanning_paused)
3159                 return 0;
3160
3161         if (hci_dev_test_flag(hdev, HCI_CONNECTABLE) ||
3162             disconnected_accept_list_entries(hdev))
3163                 scan = SCAN_PAGE;
3164         else
3165                 scan = SCAN_DISABLED;
3166
3167         if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
3168                 scan |= SCAN_INQUIRY;
3169
3170         if (test_bit(HCI_PSCAN, &hdev->flags) == !!(scan & SCAN_PAGE) &&
3171             test_bit(HCI_ISCAN, &hdev->flags) == !!(scan & SCAN_INQUIRY))
3172                 return 0;
3173
3174         return hci_write_scan_enable_sync(hdev, scan);
3175 }
3176
3177 int hci_update_name_sync(struct hci_dev *hdev)
3178 {
3179         struct hci_cp_write_local_name cp;
3180
3181         memset(&cp, 0, sizeof(cp));
3182
3183         memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
3184
3185         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_LOCAL_NAME,
3186                                             sizeof(cp), &cp,
3187                                             HCI_CMD_TIMEOUT);
3188 }
3189
3190 /* This function perform powered update HCI command sequence after the HCI init
3191  * sequence which end up resetting all states, the sequence is as follows:
3192  *
3193  * HCI_SSP_ENABLED(Enable SSP)
3194  * HCI_LE_ENABLED(Enable LE)
3195  * HCI_LE_ENABLED(use_ll_privacy(Add local IRK to Resolving List) ->
3196  * Update adv data)
3197  * Enable Authentication
3198  * lmp_bredr_capable(Set Fast Connectable -> Set Scan Type -> Set Class ->
3199  * Set Name -> Set EIR)
3200  * HCI_FORCE_STATIC_ADDR | BDADDR_ANY && !HCI_BREDR_ENABLED (Set Static Address)
3201  */
3202 int hci_powered_update_sync(struct hci_dev *hdev)
3203 {
3204         int err;
3205
3206         /* Register the available SMP channels (BR/EDR and LE) only when
3207          * successfully powering on the controller. This late
3208          * registration is required so that LE SMP can clearly decide if
3209          * the public address or static address is used.
3210          */
3211         smp_register(hdev);
3212
3213         err = hci_write_ssp_mode_sync(hdev, 0x01);
3214         if (err)
3215                 return err;
3216
3217         err = hci_write_le_host_supported_sync(hdev, 0x01, 0x00);
3218         if (err)
3219                 return err;
3220
3221         err = hci_powered_update_adv_sync(hdev);
3222         if (err)
3223                 return err;
3224
3225         err = hci_write_auth_enable_sync(hdev);
3226         if (err)
3227                 return err;
3228
3229         if (lmp_bredr_capable(hdev)) {
3230                 if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE))
3231                         hci_write_fast_connectable_sync(hdev, true);
3232                 else
3233                         hci_write_fast_connectable_sync(hdev, false);
3234                 hci_update_scan_sync(hdev);
3235                 hci_update_class_sync(hdev);
3236                 hci_update_name_sync(hdev);
3237                 hci_update_eir_sync(hdev);
3238         }
3239
3240         /* If forcing static address is in use or there is no public
3241          * address use the static address as random address (but skip
3242          * the HCI command if the current random address is already the
3243          * static one.
3244          *
3245          * In case BR/EDR has been disabled on a dual-mode controller
3246          * and a static address has been configured, then use that
3247          * address instead of the public BR/EDR address.
3248          */
3249         if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
3250             (!bacmp(&hdev->bdaddr, BDADDR_ANY) &&
3251             !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))) {
3252                 if (bacmp(&hdev->static_addr, BDADDR_ANY))
3253                         return hci_set_random_addr_sync(hdev,
3254                                                         &hdev->static_addr);
3255         }
3256
3257         return 0;
3258 }
3259
3260 /**
3261  * hci_dev_get_bd_addr_from_property - Get the Bluetooth Device Address
3262  *                                     (BD_ADDR) for a HCI device from
3263  *                                     a firmware node property.
3264  * @hdev:       The HCI device
3265  *
3266  * Search the firmware node for 'local-bd-address'.
3267  *
3268  * All-zero BD addresses are rejected, because those could be properties
3269  * that exist in the firmware tables, but were not updated by the firmware. For
3270  * example, the DTS could define 'local-bd-address', with zero BD addresses.
3271  */
3272 static void hci_dev_get_bd_addr_from_property(struct hci_dev *hdev)
3273 {
3274         struct fwnode_handle *fwnode = dev_fwnode(hdev->dev.parent);
3275         bdaddr_t ba;
3276         int ret;
3277
3278         ret = fwnode_property_read_u8_array(fwnode, "local-bd-address",
3279                                             (u8 *)&ba, sizeof(ba));
3280         if (ret < 0 || !bacmp(&ba, BDADDR_ANY))
3281                 return;
3282
3283         bacpy(&hdev->public_addr, &ba);
3284 }
3285
3286 struct hci_init_stage {
3287         int (*func)(struct hci_dev *hdev);
3288 };
3289
3290 /* Run init stage NULL terminated function table */
3291 static int hci_init_stage_sync(struct hci_dev *hdev,
3292                                const struct hci_init_stage *stage)
3293 {
3294         size_t i;
3295
3296         for (i = 0; stage[i].func; i++) {
3297                 int err;
3298
3299                 err = stage[i].func(hdev);
3300                 if (err)
3301                         return err;
3302         }
3303
3304         return 0;
3305 }
3306
3307 /* Read Local Version */
3308 static int hci_read_local_version_sync(struct hci_dev *hdev)
3309 {
3310         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_VERSION,
3311                                      0, NULL, HCI_CMD_TIMEOUT);
3312 }
3313
3314 /* Read BD Address */
3315 static int hci_read_bd_addr_sync(struct hci_dev *hdev)
3316 {
3317         return __hci_cmd_sync_status(hdev, HCI_OP_READ_BD_ADDR,
3318                                      0, NULL, HCI_CMD_TIMEOUT);
3319 }
3320
3321 #define HCI_INIT(_func) \
3322 { \
3323         .func = _func, \
3324 }
3325
3326 static const struct hci_init_stage hci_init0[] = {
3327         /* HCI_OP_READ_LOCAL_VERSION */
3328         HCI_INIT(hci_read_local_version_sync),
3329         /* HCI_OP_READ_BD_ADDR */
3330         HCI_INIT(hci_read_bd_addr_sync),
3331         {}
3332 };
3333
3334 int hci_reset_sync(struct hci_dev *hdev)
3335 {
3336         int err;
3337
3338         set_bit(HCI_RESET, &hdev->flags);
3339
3340         err = __hci_cmd_sync_status(hdev, HCI_OP_RESET, 0, NULL,
3341                                     HCI_CMD_TIMEOUT);
3342         if (err)
3343                 return err;
3344
3345         return 0;
3346 }
3347
3348 static int hci_init0_sync(struct hci_dev *hdev)
3349 {
3350         int err;
3351
3352         bt_dev_dbg(hdev, "");
3353
3354         /* Reset */
3355         if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks)) {
3356                 err = hci_reset_sync(hdev);
3357                 if (err)
3358                         return err;
3359         }
3360
3361         return hci_init_stage_sync(hdev, hci_init0);
3362 }
3363
3364 static int hci_unconf_init_sync(struct hci_dev *hdev)
3365 {
3366         int err;
3367
3368         if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
3369                 return 0;
3370
3371         err = hci_init0_sync(hdev);
3372         if (err < 0)
3373                 return err;
3374
3375         if (hci_dev_test_flag(hdev, HCI_SETUP))
3376                 hci_debugfs_create_basic(hdev);
3377
3378         return 0;
3379 }
3380
3381 /* Read Local Supported Features. */
3382 static int hci_read_local_features_sync(struct hci_dev *hdev)
3383 {
3384          /* Not all AMP controllers support this command */
3385         if (hdev->dev_type == HCI_AMP && !(hdev->commands[14] & 0x20))
3386                 return 0;
3387
3388         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_FEATURES,
3389                                      0, NULL, HCI_CMD_TIMEOUT);
3390 }
3391
3392 /* BR Controller init stage 1 command sequence */
3393 static const struct hci_init_stage br_init1[] = {
3394         /* HCI_OP_READ_LOCAL_FEATURES */
3395         HCI_INIT(hci_read_local_features_sync),
3396         /* HCI_OP_READ_LOCAL_VERSION */
3397         HCI_INIT(hci_read_local_version_sync),
3398         /* HCI_OP_READ_BD_ADDR */
3399         HCI_INIT(hci_read_bd_addr_sync),
3400         {}
3401 };
3402
3403 /* Read Local Commands */
3404 static int hci_read_local_cmds_sync(struct hci_dev *hdev)
3405 {
3406         /* All Bluetooth 1.2 and later controllers should support the
3407          * HCI command for reading the local supported commands.
3408          *
3409          * Unfortunately some controllers indicate Bluetooth 1.2 support,
3410          * but do not have support for this command. If that is the case,
3411          * the driver can quirk the behavior and skip reading the local
3412          * supported commands.
3413          */
3414         if (hdev->hci_ver > BLUETOOTH_VER_1_1 &&
3415             !test_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks))
3416                 return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_COMMANDS,
3417                                              0, NULL, HCI_CMD_TIMEOUT);
3418
3419         return 0;
3420 }
3421
3422 /* Read Local AMP Info */
3423 static int hci_read_local_amp_info_sync(struct hci_dev *hdev)
3424 {
3425         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_AMP_INFO,
3426                                      0, NULL, HCI_CMD_TIMEOUT);
3427 }
3428
3429 /* Read Data Blk size */
3430 static int hci_read_data_block_size_sync(struct hci_dev *hdev)
3431 {
3432         return __hci_cmd_sync_status(hdev, HCI_OP_READ_DATA_BLOCK_SIZE,
3433                                      0, NULL, HCI_CMD_TIMEOUT);
3434 }
3435
3436 /* Read Flow Control Mode */
3437 static int hci_read_flow_control_mode_sync(struct hci_dev *hdev)
3438 {
3439         return __hci_cmd_sync_status(hdev, HCI_OP_READ_FLOW_CONTROL_MODE,
3440                                      0, NULL, HCI_CMD_TIMEOUT);
3441 }
3442
3443 /* Read Location Data */
3444 static int hci_read_location_data_sync(struct hci_dev *hdev)
3445 {
3446         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCATION_DATA,
3447                                      0, NULL, HCI_CMD_TIMEOUT);
3448 }
3449
3450 /* AMP Controller init stage 1 command sequence */
3451 static const struct hci_init_stage amp_init1[] = {
3452         /* HCI_OP_READ_LOCAL_VERSION */
3453         HCI_INIT(hci_read_local_version_sync),
3454         /* HCI_OP_READ_LOCAL_COMMANDS */
3455         HCI_INIT(hci_read_local_cmds_sync),
3456         /* HCI_OP_READ_LOCAL_AMP_INFO */
3457         HCI_INIT(hci_read_local_amp_info_sync),
3458         /* HCI_OP_READ_DATA_BLOCK_SIZE */
3459         HCI_INIT(hci_read_data_block_size_sync),
3460         /* HCI_OP_READ_FLOW_CONTROL_MODE */
3461         HCI_INIT(hci_read_flow_control_mode_sync),
3462         /* HCI_OP_READ_LOCATION_DATA */
3463         HCI_INIT(hci_read_location_data_sync),
3464         {}
3465 };
3466
3467 static int hci_init1_sync(struct hci_dev *hdev)
3468 {
3469         int err;
3470
3471         bt_dev_dbg(hdev, "");
3472
3473         /* Reset */
3474         if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks)) {
3475                 err = hci_reset_sync(hdev);
3476                 if (err)
3477                         return err;
3478         }
3479
3480         switch (hdev->dev_type) {
3481         case HCI_PRIMARY:
3482                 hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED;
3483                 return hci_init_stage_sync(hdev, br_init1);
3484         case HCI_AMP:
3485                 hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED;
3486                 return hci_init_stage_sync(hdev, amp_init1);
3487         default:
3488                 bt_dev_err(hdev, "Unknown device type %d", hdev->dev_type);
3489                 break;
3490         }
3491
3492         return 0;
3493 }
3494
3495 /* AMP Controller init stage 2 command sequence */
3496 static const struct hci_init_stage amp_init2[] = {
3497         /* HCI_OP_READ_LOCAL_FEATURES */
3498         HCI_INIT(hci_read_local_features_sync),
3499         {}
3500 };
3501
3502 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
3503 static int hci_read_buffer_size_sync(struct hci_dev *hdev)
3504 {
3505         return __hci_cmd_sync_status(hdev, HCI_OP_READ_BUFFER_SIZE,
3506                                      0, NULL, HCI_CMD_TIMEOUT);
3507 }
3508
3509 /* Read Class of Device */
3510 static int hci_read_dev_class_sync(struct hci_dev *hdev)
3511 {
3512         return __hci_cmd_sync_status(hdev, HCI_OP_READ_CLASS_OF_DEV,
3513                                      0, NULL, HCI_CMD_TIMEOUT);
3514 }
3515
3516 /* Read Local Name */
3517 static int hci_read_local_name_sync(struct hci_dev *hdev)
3518 {
3519         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_NAME,
3520                                      0, NULL, HCI_CMD_TIMEOUT);
3521 }
3522
3523 /* Read Voice Setting */
3524 static int hci_read_voice_setting_sync(struct hci_dev *hdev)
3525 {
3526         return __hci_cmd_sync_status(hdev, HCI_OP_READ_VOICE_SETTING,
3527                                      0, NULL, HCI_CMD_TIMEOUT);
3528 }
3529
3530 /* Read Number of Supported IAC */
3531 static int hci_read_num_supported_iac_sync(struct hci_dev *hdev)
3532 {
3533         return __hci_cmd_sync_status(hdev, HCI_OP_READ_NUM_SUPPORTED_IAC,
3534                                      0, NULL, HCI_CMD_TIMEOUT);
3535 }
3536
3537 /* Read Current IAC LAP */
3538 static int hci_read_current_iac_lap_sync(struct hci_dev *hdev)
3539 {
3540         return __hci_cmd_sync_status(hdev, HCI_OP_READ_CURRENT_IAC_LAP,
3541                                      0, NULL, HCI_CMD_TIMEOUT);
3542 }
3543
3544 static int hci_set_event_filter_sync(struct hci_dev *hdev, u8 flt_type,
3545                                      u8 cond_type, bdaddr_t *bdaddr,
3546                                      u8 auto_accept)
3547 {
3548         struct hci_cp_set_event_filter cp;
3549
3550         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
3551                 return 0;
3552
3553         if (test_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks))
3554                 return 0;
3555
3556         memset(&cp, 0, sizeof(cp));
3557         cp.flt_type = flt_type;
3558
3559         if (flt_type != HCI_FLT_CLEAR_ALL) {
3560                 cp.cond_type = cond_type;
3561                 bacpy(&cp.addr_conn_flt.bdaddr, bdaddr);
3562                 cp.addr_conn_flt.auto_accept = auto_accept;
3563         }
3564
3565         return __hci_cmd_sync_status(hdev, HCI_OP_SET_EVENT_FLT,
3566                                      flt_type == HCI_FLT_CLEAR_ALL ?
3567                                      sizeof(cp.flt_type) : sizeof(cp), &cp,
3568                                      HCI_CMD_TIMEOUT);
3569 }
3570
3571 static int hci_clear_event_filter_sync(struct hci_dev *hdev)
3572 {
3573         if (!hci_dev_test_flag(hdev, HCI_EVENT_FILTER_CONFIGURED))
3574                 return 0;
3575
3576         /* In theory the state machine should not reach here unless
3577          * a hci_set_event_filter_sync() call succeeds, but we do
3578          * the check both for parity and as a future reminder.
3579          */
3580         if (test_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks))
3581                 return 0;
3582
3583         return hci_set_event_filter_sync(hdev, HCI_FLT_CLEAR_ALL, 0x00,
3584                                          BDADDR_ANY, 0x00);
3585 }
3586
3587 /* Connection accept timeout ~20 secs */
3588 static int hci_write_ca_timeout_sync(struct hci_dev *hdev)
3589 {
3590         __le16 param = cpu_to_le16(0x7d00);
3591
3592         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_CA_TIMEOUT,
3593                                      sizeof(param), &param, HCI_CMD_TIMEOUT);
3594 }
3595
3596 /* BR Controller init stage 2 command sequence */
3597 static const struct hci_init_stage br_init2[] = {
3598         /* HCI_OP_READ_BUFFER_SIZE */
3599         HCI_INIT(hci_read_buffer_size_sync),
3600         /* HCI_OP_READ_CLASS_OF_DEV */
3601         HCI_INIT(hci_read_dev_class_sync),
3602         /* HCI_OP_READ_LOCAL_NAME */
3603         HCI_INIT(hci_read_local_name_sync),
3604         /* HCI_OP_READ_VOICE_SETTING */
3605         HCI_INIT(hci_read_voice_setting_sync),
3606         /* HCI_OP_READ_NUM_SUPPORTED_IAC */
3607         HCI_INIT(hci_read_num_supported_iac_sync),
3608         /* HCI_OP_READ_CURRENT_IAC_LAP */
3609         HCI_INIT(hci_read_current_iac_lap_sync),
3610         /* HCI_OP_SET_EVENT_FLT */
3611         HCI_INIT(hci_clear_event_filter_sync),
3612         /* HCI_OP_WRITE_CA_TIMEOUT */
3613         HCI_INIT(hci_write_ca_timeout_sync),
3614         {}
3615 };
3616
3617 static int hci_write_ssp_mode_1_sync(struct hci_dev *hdev)
3618 {
3619         u8 mode = 0x01;
3620
3621         if (!lmp_ssp_capable(hdev) || !hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
3622                 return 0;
3623
3624         /* When SSP is available, then the host features page
3625          * should also be available as well. However some
3626          * controllers list the max_page as 0 as long as SSP
3627          * has not been enabled. To achieve proper debugging
3628          * output, force the minimum max_page to 1 at least.
3629          */
3630         hdev->max_page = 0x01;
3631
3632         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SSP_MODE,
3633                                      sizeof(mode), &mode, HCI_CMD_TIMEOUT);
3634 }
3635
3636 static int hci_write_eir_sync(struct hci_dev *hdev)
3637 {
3638         struct hci_cp_write_eir cp;
3639
3640         if (!lmp_ssp_capable(hdev) || hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
3641                 return 0;
3642
3643         memset(hdev->eir, 0, sizeof(hdev->eir));
3644         memset(&cp, 0, sizeof(cp));
3645
3646         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp,
3647                                      HCI_CMD_TIMEOUT);
3648 }
3649
3650 static int hci_write_inquiry_mode_sync(struct hci_dev *hdev)
3651 {
3652         u8 mode;
3653
3654         if (!lmp_inq_rssi_capable(hdev) &&
3655             !test_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks))
3656                 return 0;
3657
3658         /* If Extended Inquiry Result events are supported, then
3659          * they are clearly preferred over Inquiry Result with RSSI
3660          * events.
3661          */
3662         mode = lmp_ext_inq_capable(hdev) ? 0x02 : 0x01;
3663
3664         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_INQUIRY_MODE,
3665                                      sizeof(mode), &mode, HCI_CMD_TIMEOUT);
3666 }
3667
3668 static int hci_read_inq_rsp_tx_power_sync(struct hci_dev *hdev)
3669 {
3670         if (!lmp_inq_tx_pwr_capable(hdev))
3671                 return 0;
3672
3673         return __hci_cmd_sync_status(hdev, HCI_OP_READ_INQ_RSP_TX_POWER,
3674                                      0, NULL, HCI_CMD_TIMEOUT);
3675 }
3676
3677 static int hci_read_local_ext_features_sync(struct hci_dev *hdev, u8 page)
3678 {
3679         struct hci_cp_read_local_ext_features cp;
3680
3681         if (!lmp_ext_feat_capable(hdev))
3682                 return 0;
3683
3684         memset(&cp, 0, sizeof(cp));
3685         cp.page = page;
3686
3687         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES,
3688                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
3689 }
3690
3691 static int hci_read_local_ext_features_1_sync(struct hci_dev *hdev)
3692 {
3693         return hci_read_local_ext_features_sync(hdev, 0x01);
3694 }
3695
3696 /* HCI Controller init stage 2 command sequence */
3697 static const struct hci_init_stage hci_init2[] = {
3698         /* HCI_OP_READ_LOCAL_COMMANDS */
3699         HCI_INIT(hci_read_local_cmds_sync),
3700         /* HCI_OP_WRITE_SSP_MODE */
3701         HCI_INIT(hci_write_ssp_mode_1_sync),
3702         /* HCI_OP_WRITE_EIR */
3703         HCI_INIT(hci_write_eir_sync),
3704         /* HCI_OP_WRITE_INQUIRY_MODE */
3705         HCI_INIT(hci_write_inquiry_mode_sync),
3706         /* HCI_OP_READ_INQ_RSP_TX_POWER */
3707         HCI_INIT(hci_read_inq_rsp_tx_power_sync),
3708         /* HCI_OP_READ_LOCAL_EXT_FEATURES */
3709         HCI_INIT(hci_read_local_ext_features_1_sync),
3710         /* HCI_OP_WRITE_AUTH_ENABLE */
3711         HCI_INIT(hci_write_auth_enable_sync),
3712         {}
3713 };
3714
3715 /* Read LE Buffer Size */
3716 static int hci_le_read_buffer_size_sync(struct hci_dev *hdev)
3717 {
3718         /* Use Read LE Buffer Size V2 if supported */
3719         if (iso_capable(hdev) && hdev->commands[41] & 0x20)
3720                 return __hci_cmd_sync_status(hdev,
3721                                              HCI_OP_LE_READ_BUFFER_SIZE_V2,
3722                                              0, NULL, HCI_CMD_TIMEOUT);
3723
3724         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_BUFFER_SIZE,
3725                                      0, NULL, HCI_CMD_TIMEOUT);
3726 }
3727
3728 /* Read LE Local Supported Features */
3729 static int hci_le_read_local_features_sync(struct hci_dev *hdev)
3730 {
3731         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_LOCAL_FEATURES,
3732                                      0, NULL, HCI_CMD_TIMEOUT);
3733 }
3734
3735 /* Read LE Supported States */
3736 static int hci_le_read_supported_states_sync(struct hci_dev *hdev)
3737 {
3738         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_SUPPORTED_STATES,
3739                                      0, NULL, HCI_CMD_TIMEOUT);
3740 }
3741
3742 /* LE Controller init stage 2 command sequence */
3743 static const struct hci_init_stage le_init2[] = {
3744         /* HCI_OP_LE_READ_LOCAL_FEATURES */
3745         HCI_INIT(hci_le_read_local_features_sync),
3746         /* HCI_OP_LE_READ_BUFFER_SIZE */
3747         HCI_INIT(hci_le_read_buffer_size_sync),
3748         /* HCI_OP_LE_READ_SUPPORTED_STATES */
3749         HCI_INIT(hci_le_read_supported_states_sync),
3750         {}
3751 };
3752
3753 static int hci_init2_sync(struct hci_dev *hdev)
3754 {
3755         int err;
3756
3757         bt_dev_dbg(hdev, "");
3758
3759         if (hdev->dev_type == HCI_AMP)
3760                 return hci_init_stage_sync(hdev, amp_init2);
3761
3762         err = hci_init_stage_sync(hdev, hci_init2);
3763         if (err)
3764                 return err;
3765
3766         if (lmp_bredr_capable(hdev)) {
3767                 err = hci_init_stage_sync(hdev, br_init2);
3768                 if (err)
3769                         return err;
3770         } else {
3771                 hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED);
3772         }
3773
3774         if (lmp_le_capable(hdev)) {
3775                 err = hci_init_stage_sync(hdev, le_init2);
3776                 if (err)
3777                         return err;
3778                 /* LE-only controllers have LE implicitly enabled */
3779                 if (!lmp_bredr_capable(hdev))
3780                         hci_dev_set_flag(hdev, HCI_LE_ENABLED);
3781         }
3782
3783         return 0;
3784 }
3785
3786 static int hci_set_event_mask_sync(struct hci_dev *hdev)
3787 {
3788         /* The second byte is 0xff instead of 0x9f (two reserved bits
3789          * disabled) since a Broadcom 1.2 dongle doesn't respond to the
3790          * command otherwise.
3791          */
3792         u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
3793
3794         /* CSR 1.1 dongles does not accept any bitfield so don't try to set
3795          * any event mask for pre 1.2 devices.
3796          */
3797         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
3798                 return 0;
3799
3800         if (lmp_bredr_capable(hdev)) {
3801                 events[4] |= 0x01; /* Flow Specification Complete */
3802
3803                 /* Don't set Disconnect Complete and mode change when
3804                  * suspended as that would wakeup the host when disconnecting
3805                  * due to suspend.
3806                  */
3807                 if (hdev->suspended) {
3808                         events[0] &= 0xef;
3809                         events[2] &= 0xf7;
3810                 }
3811         } else {
3812                 /* Use a different default for LE-only devices */
3813                 memset(events, 0, sizeof(events));
3814                 events[1] |= 0x20; /* Command Complete */
3815                 events[1] |= 0x40; /* Command Status */
3816                 events[1] |= 0x80; /* Hardware Error */
3817
3818                 /* If the controller supports the Disconnect command, enable
3819                  * the corresponding event. In addition enable packet flow
3820                  * control related events.
3821                  */
3822                 if (hdev->commands[0] & 0x20) {
3823                         /* Don't set Disconnect Complete when suspended as that
3824                          * would wakeup the host when disconnecting due to
3825                          * suspend.
3826                          */
3827                         if (!hdev->suspended)
3828                                 events[0] |= 0x10; /* Disconnection Complete */
3829                         events[2] |= 0x04; /* Number of Completed Packets */
3830                         events[3] |= 0x02; /* Data Buffer Overflow */
3831                 }
3832
3833                 /* If the controller supports the Read Remote Version
3834                  * Information command, enable the corresponding event.
3835                  */
3836                 if (hdev->commands[2] & 0x80)
3837                         events[1] |= 0x08; /* Read Remote Version Information
3838                                             * Complete
3839                                             */
3840
3841                 if (hdev->le_features[0] & HCI_LE_ENCRYPTION) {
3842                         events[0] |= 0x80; /* Encryption Change */
3843                         events[5] |= 0x80; /* Encryption Key Refresh Complete */
3844                 }
3845         }
3846
3847         if (lmp_inq_rssi_capable(hdev) ||
3848             test_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks))
3849                 events[4] |= 0x02; /* Inquiry Result with RSSI */
3850
3851         if (lmp_ext_feat_capable(hdev))
3852                 events[4] |= 0x04; /* Read Remote Extended Features Complete */
3853
3854         if (lmp_esco_capable(hdev)) {
3855                 events[5] |= 0x08; /* Synchronous Connection Complete */
3856                 events[5] |= 0x10; /* Synchronous Connection Changed */
3857         }
3858
3859         if (lmp_sniffsubr_capable(hdev))
3860                 events[5] |= 0x20; /* Sniff Subrating */
3861
3862         if (lmp_pause_enc_capable(hdev))
3863                 events[5] |= 0x80; /* Encryption Key Refresh Complete */
3864
3865         if (lmp_ext_inq_capable(hdev))
3866                 events[5] |= 0x40; /* Extended Inquiry Result */
3867
3868         if (lmp_no_flush_capable(hdev))
3869                 events[7] |= 0x01; /* Enhanced Flush Complete */
3870
3871         if (lmp_lsto_capable(hdev))
3872                 events[6] |= 0x80; /* Link Supervision Timeout Changed */
3873
3874         if (lmp_ssp_capable(hdev)) {
3875                 events[6] |= 0x01;      /* IO Capability Request */
3876                 events[6] |= 0x02;      /* IO Capability Response */
3877                 events[6] |= 0x04;      /* User Confirmation Request */
3878                 events[6] |= 0x08;      /* User Passkey Request */
3879                 events[6] |= 0x10;      /* Remote OOB Data Request */
3880                 events[6] |= 0x20;      /* Simple Pairing Complete */
3881                 events[7] |= 0x04;      /* User Passkey Notification */
3882                 events[7] |= 0x08;      /* Keypress Notification */
3883                 events[7] |= 0x10;      /* Remote Host Supported
3884                                          * Features Notification
3885                                          */
3886         }
3887
3888         if (lmp_le_capable(hdev))
3889                 events[7] |= 0x20;      /* LE Meta-Event */
3890
3891         return __hci_cmd_sync_status(hdev, HCI_OP_SET_EVENT_MASK,
3892                                      sizeof(events), events, HCI_CMD_TIMEOUT);
3893 }
3894
3895 static int hci_read_stored_link_key_sync(struct hci_dev *hdev)
3896 {
3897         struct hci_cp_read_stored_link_key cp;
3898
3899         if (!(hdev->commands[6] & 0x20) ||
3900             test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks))
3901                 return 0;
3902
3903         memset(&cp, 0, sizeof(cp));
3904         bacpy(&cp.bdaddr, BDADDR_ANY);
3905         cp.read_all = 0x01;
3906
3907         return __hci_cmd_sync_status(hdev, HCI_OP_READ_STORED_LINK_KEY,
3908                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
3909 }
3910
3911 static int hci_setup_link_policy_sync(struct hci_dev *hdev)
3912 {
3913         struct hci_cp_write_def_link_policy cp;
3914         u16 link_policy = 0;
3915
3916         if (!(hdev->commands[5] & 0x10))
3917                 return 0;
3918
3919         memset(&cp, 0, sizeof(cp));
3920
3921         if (lmp_rswitch_capable(hdev))
3922                 link_policy |= HCI_LP_RSWITCH;
3923         if (lmp_hold_capable(hdev))
3924                 link_policy |= HCI_LP_HOLD;
3925         if (lmp_sniff_capable(hdev))
3926                 link_policy |= HCI_LP_SNIFF;
3927         if (lmp_park_capable(hdev))
3928                 link_policy |= HCI_LP_PARK;
3929
3930         cp.policy = cpu_to_le16(link_policy);
3931
3932         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
3933                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
3934 }
3935
3936 static int hci_read_page_scan_activity_sync(struct hci_dev *hdev)
3937 {
3938         if (!(hdev->commands[8] & 0x01))
3939                 return 0;
3940
3941         return __hci_cmd_sync_status(hdev, HCI_OP_READ_PAGE_SCAN_ACTIVITY,
3942                                      0, NULL, HCI_CMD_TIMEOUT);
3943 }
3944
3945 static int hci_read_def_err_data_reporting_sync(struct hci_dev *hdev)
3946 {
3947         if (!(hdev->commands[18] & 0x04) ||
3948             !(hdev->features[0][6] & LMP_ERR_DATA_REPORTING) ||
3949             test_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks))
3950                 return 0;
3951
3952         return __hci_cmd_sync_status(hdev, HCI_OP_READ_DEF_ERR_DATA_REPORTING,
3953                                      0, NULL, HCI_CMD_TIMEOUT);
3954 }
3955
3956 static int hci_read_page_scan_type_sync(struct hci_dev *hdev)
3957 {
3958         /* Some older Broadcom based Bluetooth 1.2 controllers do not
3959          * support the Read Page Scan Type command. Check support for
3960          * this command in the bit mask of supported commands.
3961          */
3962         if (!(hdev->commands[13] & 0x01))
3963                 return 0;
3964
3965         return __hci_cmd_sync_status(hdev, HCI_OP_READ_PAGE_SCAN_TYPE,
3966                                      0, NULL, HCI_CMD_TIMEOUT);
3967 }
3968
3969 /* Read features beyond page 1 if available */
3970 static int hci_read_local_ext_features_all_sync(struct hci_dev *hdev)
3971 {
3972         u8 page;
3973         int err;
3974
3975         if (!lmp_ext_feat_capable(hdev))
3976                 return 0;
3977
3978         for (page = 2; page < HCI_MAX_PAGES && page <= hdev->max_page;
3979              page++) {
3980                 err = hci_read_local_ext_features_sync(hdev, page);
3981                 if (err)
3982                         return err;
3983         }
3984
3985         return 0;
3986 }
3987
3988 /* HCI Controller init stage 3 command sequence */
3989 static const struct hci_init_stage hci_init3[] = {
3990         /* HCI_OP_SET_EVENT_MASK */
3991         HCI_INIT(hci_set_event_mask_sync),
3992         /* HCI_OP_READ_STORED_LINK_KEY */
3993         HCI_INIT(hci_read_stored_link_key_sync),
3994         /* HCI_OP_WRITE_DEF_LINK_POLICY */
3995         HCI_INIT(hci_setup_link_policy_sync),
3996         /* HCI_OP_READ_PAGE_SCAN_ACTIVITY */
3997         HCI_INIT(hci_read_page_scan_activity_sync),
3998         /* HCI_OP_READ_DEF_ERR_DATA_REPORTING */
3999         HCI_INIT(hci_read_def_err_data_reporting_sync),
4000         /* HCI_OP_READ_PAGE_SCAN_TYPE */
4001         HCI_INIT(hci_read_page_scan_type_sync),
4002         /* HCI_OP_READ_LOCAL_EXT_FEATURES */
4003         HCI_INIT(hci_read_local_ext_features_all_sync),
4004         {}
4005 };
4006
4007 static int hci_le_set_event_mask_sync(struct hci_dev *hdev)
4008 {
4009         u8 events[8];
4010
4011         if (!lmp_le_capable(hdev))
4012                 return 0;
4013
4014         memset(events, 0, sizeof(events));
4015
4016         if (hdev->le_features[0] & HCI_LE_ENCRYPTION)
4017                 events[0] |= 0x10;      /* LE Long Term Key Request */
4018
4019         /* If controller supports the Connection Parameters Request
4020          * Link Layer Procedure, enable the corresponding event.
4021          */
4022         if (hdev->le_features[0] & HCI_LE_CONN_PARAM_REQ_PROC)
4023                 /* LE Remote Connection Parameter Request */
4024                 events[0] |= 0x20;
4025
4026         /* If the controller supports the Data Length Extension
4027          * feature, enable the corresponding event.
4028          */
4029         if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT)
4030                 events[0] |= 0x40;      /* LE Data Length Change */
4031
4032         /* If the controller supports LL Privacy feature or LE Extended Adv,
4033          * enable the corresponding event.
4034          */
4035         if (use_enhanced_conn_complete(hdev))
4036                 events[1] |= 0x02;      /* LE Enhanced Connection Complete */
4037
4038         /* If the controller supports Extended Scanner Filter
4039          * Policies, enable the corresponding event.
4040          */
4041         if (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY)
4042                 events[1] |= 0x04;      /* LE Direct Advertising Report */
4043
4044         /* If the controller supports Channel Selection Algorithm #2
4045          * feature, enable the corresponding event.
4046          */
4047         if (hdev->le_features[1] & HCI_LE_CHAN_SEL_ALG2)
4048                 events[2] |= 0x08;      /* LE Channel Selection Algorithm */
4049
4050         /* If the controller supports the LE Set Scan Enable command,
4051          * enable the corresponding advertising report event.
4052          */
4053         if (hdev->commands[26] & 0x08)
4054                 events[0] |= 0x02;      /* LE Advertising Report */
4055
4056         /* If the controller supports the LE Create Connection
4057          * command, enable the corresponding event.
4058          */
4059         if (hdev->commands[26] & 0x10)
4060                 events[0] |= 0x01;      /* LE Connection Complete */
4061
4062         /* If the controller supports the LE Connection Update
4063          * command, enable the corresponding event.
4064          */
4065         if (hdev->commands[27] & 0x04)
4066                 events[0] |= 0x04;      /* LE Connection Update Complete */
4067
4068         /* If the controller supports the LE Read Remote Used Features
4069          * command, enable the corresponding event.
4070          */
4071         if (hdev->commands[27] & 0x20)
4072                 /* LE Read Remote Used Features Complete */
4073                 events[0] |= 0x08;
4074
4075         /* If the controller supports the LE Read Local P-256
4076          * Public Key command, enable the corresponding event.
4077          */
4078         if (hdev->commands[34] & 0x02)
4079                 /* LE Read Local P-256 Public Key Complete */
4080                 events[0] |= 0x80;
4081
4082         /* If the controller supports the LE Generate DHKey
4083          * command, enable the corresponding event.
4084          */
4085         if (hdev->commands[34] & 0x04)
4086                 events[1] |= 0x01;      /* LE Generate DHKey Complete */
4087
4088         /* If the controller supports the LE Set Default PHY or
4089          * LE Set PHY commands, enable the corresponding event.
4090          */
4091         if (hdev->commands[35] & (0x20 | 0x40))
4092                 events[1] |= 0x08;        /* LE PHY Update Complete */
4093
4094         /* If the controller supports LE Set Extended Scan Parameters
4095          * and LE Set Extended Scan Enable commands, enable the
4096          * corresponding event.
4097          */
4098         if (use_ext_scan(hdev))
4099                 events[1] |= 0x10;      /* LE Extended Advertising Report */
4100
4101         /* If the controller supports the LE Extended Advertising
4102          * command, enable the corresponding event.
4103          */
4104         if (ext_adv_capable(hdev))
4105                 events[2] |= 0x02;      /* LE Advertising Set Terminated */
4106
4107         if (cis_capable(hdev)) {
4108                 events[3] |= 0x01;      /* LE CIS Established */
4109                 if (cis_peripheral_capable(hdev))
4110                         events[3] |= 0x02; /* LE CIS Request */
4111         }
4112
4113         if (bis_capable(hdev)) {
4114                 events[1] |= 0x20;      /* LE PA Report */
4115                 events[1] |= 0x40;      /* LE PA Sync Established */
4116                 events[3] |= 0x04;      /* LE Create BIG Complete */
4117                 events[3] |= 0x08;      /* LE Terminate BIG Complete */
4118                 events[3] |= 0x10;      /* LE BIG Sync Established */
4119                 events[3] |= 0x20;      /* LE BIG Sync Loss */
4120                 events[4] |= 0x02;      /* LE BIG Info Advertising Report */
4121         }
4122
4123         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EVENT_MASK,
4124                                      sizeof(events), events, HCI_CMD_TIMEOUT);
4125 }
4126
4127 /* Read LE Advertising Channel TX Power */
4128 static int hci_le_read_adv_tx_power_sync(struct hci_dev *hdev)
4129 {
4130         if ((hdev->commands[25] & 0x40) && !ext_adv_capable(hdev)) {
4131                 /* HCI TS spec forbids mixing of legacy and extended
4132                  * advertising commands wherein READ_ADV_TX_POWER is
4133                  * also included. So do not call it if extended adv
4134                  * is supported otherwise controller will return
4135                  * COMMAND_DISALLOWED for extended commands.
4136                  */
4137                 return __hci_cmd_sync_status(hdev,
4138                                                HCI_OP_LE_READ_ADV_TX_POWER,
4139                                                0, NULL, HCI_CMD_TIMEOUT);
4140         }
4141
4142         return 0;
4143 }
4144
4145 /* Read LE Min/Max Tx Power*/
4146 static int hci_le_read_tx_power_sync(struct hci_dev *hdev)
4147 {
4148         if (!(hdev->commands[38] & 0x80) ||
4149             test_bit(HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER, &hdev->quirks))
4150                 return 0;
4151
4152         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_TRANSMIT_POWER,
4153                                      0, NULL, HCI_CMD_TIMEOUT);
4154 }
4155
4156 /* Read LE Accept List Size */
4157 static int hci_le_read_accept_list_size_sync(struct hci_dev *hdev)
4158 {
4159         if (!(hdev->commands[26] & 0x40))
4160                 return 0;
4161
4162         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_ACCEPT_LIST_SIZE,
4163                                      0, NULL, HCI_CMD_TIMEOUT);
4164 }
4165
4166 /* Clear LE Accept List */
4167 static int hci_le_clear_accept_list_sync(struct hci_dev *hdev)
4168 {
4169         if (!(hdev->commands[26] & 0x80))
4170                 return 0;
4171
4172         return __hci_cmd_sync_status(hdev, HCI_OP_LE_CLEAR_ACCEPT_LIST, 0, NULL,
4173                                      HCI_CMD_TIMEOUT);
4174 }
4175
4176 /* Read LE Resolving List Size */
4177 static int hci_le_read_resolv_list_size_sync(struct hci_dev *hdev)
4178 {
4179         if (!(hdev->commands[34] & 0x40))
4180                 return 0;
4181
4182         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_RESOLV_LIST_SIZE,
4183                                      0, NULL, HCI_CMD_TIMEOUT);
4184 }
4185
4186 /* Clear LE Resolving List */
4187 static int hci_le_clear_resolv_list_sync(struct hci_dev *hdev)
4188 {
4189         if (!(hdev->commands[34] & 0x20))
4190                 return 0;
4191
4192         return __hci_cmd_sync_status(hdev, HCI_OP_LE_CLEAR_RESOLV_LIST, 0, NULL,
4193                                      HCI_CMD_TIMEOUT);
4194 }
4195
4196 /* Set RPA timeout */
4197 static int hci_le_set_rpa_timeout_sync(struct hci_dev *hdev)
4198 {
4199         __le16 timeout = cpu_to_le16(hdev->rpa_timeout);
4200
4201         if (!(hdev->commands[35] & 0x04) ||
4202             test_bit(HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT, &hdev->quirks))
4203                 return 0;
4204
4205         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_RPA_TIMEOUT,
4206                                      sizeof(timeout), &timeout,
4207                                      HCI_CMD_TIMEOUT);
4208 }
4209
4210 /* Read LE Maximum Data Length */
4211 static int hci_le_read_max_data_len_sync(struct hci_dev *hdev)
4212 {
4213         if (!(hdev->le_features[0] & HCI_LE_DATA_LEN_EXT))
4214                 return 0;
4215
4216         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_MAX_DATA_LEN, 0, NULL,
4217                                      HCI_CMD_TIMEOUT);
4218 }
4219
4220 /* Read LE Suggested Default Data Length */
4221 static int hci_le_read_def_data_len_sync(struct hci_dev *hdev)
4222 {
4223         if (!(hdev->le_features[0] & HCI_LE_DATA_LEN_EXT))
4224                 return 0;
4225
4226         return __hci_cmd_sync_status(hdev, HCI_OP_LE_READ_DEF_DATA_LEN, 0, NULL,
4227                                      HCI_CMD_TIMEOUT);
4228 }
4229
4230 /* Read LE Number of Supported Advertising Sets */
4231 static int hci_le_read_num_support_adv_sets_sync(struct hci_dev *hdev)
4232 {
4233         if (!ext_adv_capable(hdev))
4234                 return 0;
4235
4236         return __hci_cmd_sync_status(hdev,
4237                                      HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
4238                                      0, NULL, HCI_CMD_TIMEOUT);
4239 }
4240
4241 /* Write LE Host Supported */
4242 static int hci_set_le_support_sync(struct hci_dev *hdev)
4243 {
4244         struct hci_cp_write_le_host_supported cp;
4245
4246         /* LE-only devices do not support explicit enablement */
4247         if (!lmp_bredr_capable(hdev))
4248                 return 0;
4249
4250         memset(&cp, 0, sizeof(cp));
4251
4252         if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
4253                 cp.le = 0x01;
4254                 cp.simul = 0x00;
4255         }
4256
4257         if (cp.le == lmp_host_le_capable(hdev))
4258                 return 0;
4259
4260         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED,
4261                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
4262 }
4263
4264 /* LE Set Host Feature */
4265 static int hci_le_set_host_feature_sync(struct hci_dev *hdev)
4266 {
4267         struct hci_cp_le_set_host_feature cp;
4268
4269         if (!iso_capable(hdev))
4270                 return 0;
4271
4272         memset(&cp, 0, sizeof(cp));
4273
4274         /* Isochronous Channels (Host Support) */
4275         cp.bit_number = 32;
4276         cp.bit_value = 1;
4277
4278         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_HOST_FEATURE,
4279                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
4280 }
4281
4282 /* LE Controller init stage 3 command sequence */
4283 static const struct hci_init_stage le_init3[] = {
4284         /* HCI_OP_LE_SET_EVENT_MASK */
4285         HCI_INIT(hci_le_set_event_mask_sync),
4286         /* HCI_OP_LE_READ_ADV_TX_POWER */
4287         HCI_INIT(hci_le_read_adv_tx_power_sync),
4288         /* HCI_OP_LE_READ_TRANSMIT_POWER */
4289         HCI_INIT(hci_le_read_tx_power_sync),
4290         /* HCI_OP_LE_READ_ACCEPT_LIST_SIZE */
4291         HCI_INIT(hci_le_read_accept_list_size_sync),
4292         /* HCI_OP_LE_CLEAR_ACCEPT_LIST */
4293         HCI_INIT(hci_le_clear_accept_list_sync),
4294         /* HCI_OP_LE_READ_RESOLV_LIST_SIZE */
4295         HCI_INIT(hci_le_read_resolv_list_size_sync),
4296         /* HCI_OP_LE_CLEAR_RESOLV_LIST */
4297         HCI_INIT(hci_le_clear_resolv_list_sync),
4298         /* HCI_OP_LE_SET_RPA_TIMEOUT */
4299         HCI_INIT(hci_le_set_rpa_timeout_sync),
4300         /* HCI_OP_LE_READ_MAX_DATA_LEN */
4301         HCI_INIT(hci_le_read_max_data_len_sync),
4302         /* HCI_OP_LE_READ_DEF_DATA_LEN */
4303         HCI_INIT(hci_le_read_def_data_len_sync),
4304         /* HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS */
4305         HCI_INIT(hci_le_read_num_support_adv_sets_sync),
4306         /* HCI_OP_WRITE_LE_HOST_SUPPORTED */
4307         HCI_INIT(hci_set_le_support_sync),
4308         /* HCI_OP_LE_SET_HOST_FEATURE */
4309         HCI_INIT(hci_le_set_host_feature_sync),
4310         {}
4311 };
4312
4313 static int hci_init3_sync(struct hci_dev *hdev)
4314 {
4315         int err;
4316
4317         bt_dev_dbg(hdev, "");
4318
4319         err = hci_init_stage_sync(hdev, hci_init3);
4320         if (err)
4321                 return err;
4322
4323         if (lmp_le_capable(hdev))
4324                 return hci_init_stage_sync(hdev, le_init3);
4325
4326         return 0;
4327 }
4328
4329 static int hci_delete_stored_link_key_sync(struct hci_dev *hdev)
4330 {
4331         struct hci_cp_delete_stored_link_key cp;
4332
4333         /* Some Broadcom based Bluetooth controllers do not support the
4334          * Delete Stored Link Key command. They are clearly indicating its
4335          * absence in the bit mask of supported commands.
4336          *
4337          * Check the supported commands and only if the command is marked
4338          * as supported send it. If not supported assume that the controller
4339          * does not have actual support for stored link keys which makes this
4340          * command redundant anyway.
4341          *
4342          * Some controllers indicate that they support handling deleting
4343          * stored link keys, but they don't. The quirk lets a driver
4344          * just disable this command.
4345          */
4346         if (!(hdev->commands[6] & 0x80) ||
4347             test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks))
4348                 return 0;
4349
4350         memset(&cp, 0, sizeof(cp));
4351         bacpy(&cp.bdaddr, BDADDR_ANY);
4352         cp.delete_all = 0x01;
4353
4354         return __hci_cmd_sync_status(hdev, HCI_OP_DELETE_STORED_LINK_KEY,
4355                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
4356 }
4357
4358 static int hci_set_event_mask_page_2_sync(struct hci_dev *hdev)
4359 {
4360         u8 events[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
4361         bool changed = false;
4362
4363         /* Set event mask page 2 if the HCI command for it is supported */
4364         if (!(hdev->commands[22] & 0x04))
4365                 return 0;
4366
4367         /* If Connectionless Peripheral Broadcast central role is supported
4368          * enable all necessary events for it.
4369          */
4370         if (lmp_cpb_central_capable(hdev)) {
4371                 events[1] |= 0x40;      /* Triggered Clock Capture */
4372                 events[1] |= 0x80;      /* Synchronization Train Complete */
4373                 events[2] |= 0x08;      /* Truncated Page Complete */
4374                 events[2] |= 0x20;      /* CPB Channel Map Change */
4375                 changed = true;
4376         }
4377
4378         /* If Connectionless Peripheral Broadcast peripheral role is supported
4379          * enable all necessary events for it.
4380          */
4381         if (lmp_cpb_peripheral_capable(hdev)) {
4382                 events[2] |= 0x01;      /* Synchronization Train Received */
4383                 events[2] |= 0x02;      /* CPB Receive */
4384                 events[2] |= 0x04;      /* CPB Timeout */
4385                 events[2] |= 0x10;      /* Peripheral Page Response Timeout */
4386                 changed = true;
4387         }
4388
4389         /* Enable Authenticated Payload Timeout Expired event if supported */
4390         if (lmp_ping_capable(hdev) || hdev->le_features[0] & HCI_LE_PING) {
4391                 events[2] |= 0x80;
4392                 changed = true;
4393         }
4394
4395         /* Some Broadcom based controllers indicate support for Set Event
4396          * Mask Page 2 command, but then actually do not support it. Since
4397          * the default value is all bits set to zero, the command is only
4398          * required if the event mask has to be changed. In case no change
4399          * to the event mask is needed, skip this command.
4400          */
4401         if (!changed)
4402                 return 0;
4403
4404         return __hci_cmd_sync_status(hdev, HCI_OP_SET_EVENT_MASK_PAGE_2,
4405                                      sizeof(events), events, HCI_CMD_TIMEOUT);
4406 }
4407
4408 /* Read local codec list if the HCI command is supported */
4409 static int hci_read_local_codecs_sync(struct hci_dev *hdev)
4410 {
4411         if (hdev->commands[45] & 0x04)
4412                 hci_read_supported_codecs_v2(hdev);
4413         else if (hdev->commands[29] & 0x20)
4414                 hci_read_supported_codecs(hdev);
4415
4416         return 0;
4417 }
4418
4419 /* Read local pairing options if the HCI command is supported */
4420 static int hci_read_local_pairing_opts_sync(struct hci_dev *hdev)
4421 {
4422         if (!(hdev->commands[41] & 0x08))
4423                 return 0;
4424
4425         return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_PAIRING_OPTS,
4426                                      0, NULL, HCI_CMD_TIMEOUT);
4427 }
4428
4429 /* Get MWS transport configuration if the HCI command is supported */
4430 static int hci_get_mws_transport_config_sync(struct hci_dev *hdev)
4431 {
4432         if (!mws_transport_config_capable(hdev))
4433                 return 0;
4434
4435         return __hci_cmd_sync_status(hdev, HCI_OP_GET_MWS_TRANSPORT_CONFIG,
4436                                      0, NULL, HCI_CMD_TIMEOUT);
4437 }
4438
4439 /* Check for Synchronization Train support */
4440 static int hci_read_sync_train_params_sync(struct hci_dev *hdev)
4441 {
4442         if (!lmp_sync_train_capable(hdev))
4443                 return 0;
4444
4445         return __hci_cmd_sync_status(hdev, HCI_OP_READ_SYNC_TRAIN_PARAMS,
4446                                      0, NULL, HCI_CMD_TIMEOUT);
4447 }
4448
4449 /* Enable Secure Connections if supported and configured */
4450 static int hci_write_sc_support_1_sync(struct hci_dev *hdev)
4451 {
4452         u8 support = 0x01;
4453
4454         if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED) ||
4455             !bredr_sc_enabled(hdev))
4456                 return 0;
4457
4458         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_SC_SUPPORT,
4459                                      sizeof(support), &support,
4460                                      HCI_CMD_TIMEOUT);
4461 }
4462
4463 /* Set erroneous data reporting if supported to the wideband speech
4464  * setting value
4465  */
4466 static int hci_set_err_data_report_sync(struct hci_dev *hdev)
4467 {
4468         struct hci_cp_write_def_err_data_reporting cp;
4469         bool enabled = hci_dev_test_flag(hdev, HCI_WIDEBAND_SPEECH_ENABLED);
4470
4471         if (!(hdev->commands[18] & 0x08) ||
4472             !(hdev->features[0][6] & LMP_ERR_DATA_REPORTING) ||
4473             test_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks))
4474                 return 0;
4475
4476         if (enabled == hdev->err_data_reporting)
4477                 return 0;
4478
4479         memset(&cp, 0, sizeof(cp));
4480         cp.err_data_reporting = enabled ? ERR_DATA_REPORTING_ENABLED :
4481                                 ERR_DATA_REPORTING_DISABLED;
4482
4483         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_DEF_ERR_DATA_REPORTING,
4484                                     sizeof(cp), &cp, HCI_CMD_TIMEOUT);
4485 }
4486
4487 static const struct hci_init_stage hci_init4[] = {
4488          /* HCI_OP_DELETE_STORED_LINK_KEY */
4489         HCI_INIT(hci_delete_stored_link_key_sync),
4490         /* HCI_OP_SET_EVENT_MASK_PAGE_2 */
4491         HCI_INIT(hci_set_event_mask_page_2_sync),
4492         /* HCI_OP_READ_LOCAL_CODECS */
4493         HCI_INIT(hci_read_local_codecs_sync),
4494          /* HCI_OP_READ_LOCAL_PAIRING_OPTS */
4495         HCI_INIT(hci_read_local_pairing_opts_sync),
4496          /* HCI_OP_GET_MWS_TRANSPORT_CONFIG */
4497         HCI_INIT(hci_get_mws_transport_config_sync),
4498          /* HCI_OP_READ_SYNC_TRAIN_PARAMS */
4499         HCI_INIT(hci_read_sync_train_params_sync),
4500         /* HCI_OP_WRITE_SC_SUPPORT */
4501         HCI_INIT(hci_write_sc_support_1_sync),
4502         /* HCI_OP_WRITE_DEF_ERR_DATA_REPORTING */
4503         HCI_INIT(hci_set_err_data_report_sync),
4504         {}
4505 };
4506
4507 /* Set Suggested Default Data Length to maximum if supported */
4508 static int hci_le_set_write_def_data_len_sync(struct hci_dev *hdev)
4509 {
4510         struct hci_cp_le_write_def_data_len cp;
4511
4512         if (!(hdev->le_features[0] & HCI_LE_DATA_LEN_EXT))
4513                 return 0;
4514
4515         memset(&cp, 0, sizeof(cp));
4516         cp.tx_len = cpu_to_le16(hdev->le_max_tx_len);
4517         cp.tx_time = cpu_to_le16(hdev->le_max_tx_time);
4518
4519         return __hci_cmd_sync_status(hdev, HCI_OP_LE_WRITE_DEF_DATA_LEN,
4520                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
4521 }
4522
4523 /* Set Default PHY parameters if command is supported, enables all supported
4524  * PHYs according to the LE Features bits.
4525  */
4526 static int hci_le_set_default_phy_sync(struct hci_dev *hdev)
4527 {
4528         struct hci_cp_le_set_default_phy cp;
4529
4530         if (!(hdev->commands[35] & 0x20)) {
4531                 /* If the command is not supported it means only 1M PHY is
4532                  * supported.
4533                  */
4534                 hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M;
4535                 hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M;
4536                 return 0;
4537         }
4538
4539         memset(&cp, 0, sizeof(cp));
4540         cp.all_phys = 0x00;
4541         cp.tx_phys = HCI_LE_SET_PHY_1M;
4542         cp.rx_phys = HCI_LE_SET_PHY_1M;
4543
4544         /* Enables 2M PHY if supported */
4545         if (le_2m_capable(hdev)) {
4546                 cp.tx_phys |= HCI_LE_SET_PHY_2M;
4547                 cp.rx_phys |= HCI_LE_SET_PHY_2M;
4548         }
4549
4550         /* Enables Coded PHY if supported */
4551         if (le_coded_capable(hdev)) {
4552                 cp.tx_phys |= HCI_LE_SET_PHY_CODED;
4553                 cp.rx_phys |= HCI_LE_SET_PHY_CODED;
4554         }
4555
4556         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_DEFAULT_PHY,
4557                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
4558 }
4559
4560 static const struct hci_init_stage le_init4[] = {
4561         /* HCI_OP_LE_WRITE_DEF_DATA_LEN */
4562         HCI_INIT(hci_le_set_write_def_data_len_sync),
4563         /* HCI_OP_LE_SET_DEFAULT_PHY */
4564         HCI_INIT(hci_le_set_default_phy_sync),
4565         {}
4566 };
4567
4568 static int hci_init4_sync(struct hci_dev *hdev)
4569 {
4570         int err;
4571
4572         bt_dev_dbg(hdev, "");
4573
4574         err = hci_init_stage_sync(hdev, hci_init4);
4575         if (err)
4576                 return err;
4577
4578         if (lmp_le_capable(hdev))
4579                 return hci_init_stage_sync(hdev, le_init4);
4580
4581         return 0;
4582 }
4583
4584 static int hci_init_sync(struct hci_dev *hdev)
4585 {
4586         int err;
4587
4588         err = hci_init1_sync(hdev);
4589         if (err < 0)
4590                 return err;
4591
4592         if (hci_dev_test_flag(hdev, HCI_SETUP))
4593                 hci_debugfs_create_basic(hdev);
4594
4595         err = hci_init2_sync(hdev);
4596         if (err < 0)
4597                 return err;
4598
4599         /* HCI_PRIMARY covers both single-mode LE, BR/EDR and dual-mode
4600          * BR/EDR/LE type controllers. AMP controllers only need the
4601          * first two stages of init.
4602          */
4603         if (hdev->dev_type != HCI_PRIMARY)
4604                 return 0;
4605
4606         err = hci_init3_sync(hdev);
4607         if (err < 0)
4608                 return err;
4609
4610         err = hci_init4_sync(hdev);
4611         if (err < 0)
4612                 return err;
4613
4614         /* This function is only called when the controller is actually in
4615          * configured state. When the controller is marked as unconfigured,
4616          * this initialization procedure is not run.
4617          *
4618          * It means that it is possible that a controller runs through its
4619          * setup phase and then discovers missing settings. If that is the
4620          * case, then this function will not be called. It then will only
4621          * be called during the config phase.
4622          *
4623          * So only when in setup phase or config phase, create the debugfs
4624          * entries and register the SMP channels.
4625          */
4626         if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
4627             !hci_dev_test_flag(hdev, HCI_CONFIG))
4628                 return 0;
4629
4630         if (hci_dev_test_and_set_flag(hdev, HCI_DEBUGFS_CREATED))
4631                 return 0;
4632
4633         hci_debugfs_create_common(hdev);
4634
4635         if (lmp_bredr_capable(hdev))
4636                 hci_debugfs_create_bredr(hdev);
4637
4638         if (lmp_le_capable(hdev))
4639                 hci_debugfs_create_le(hdev);
4640
4641         return 0;
4642 }
4643
4644 #define HCI_QUIRK_BROKEN(_quirk, _desc) { HCI_QUIRK_BROKEN_##_quirk, _desc }
4645
4646 static const struct {
4647         unsigned long quirk;
4648         const char *desc;
4649 } hci_broken_table[] = {
4650         HCI_QUIRK_BROKEN(LOCAL_COMMANDS,
4651                          "HCI Read Local Supported Commands not supported"),
4652         HCI_QUIRK_BROKEN(STORED_LINK_KEY,
4653                          "HCI Delete Stored Link Key command is advertised, "
4654                          "but not supported."),
4655         HCI_QUIRK_BROKEN(ERR_DATA_REPORTING,
4656                          "HCI Read Default Erroneous Data Reporting command is "
4657                          "advertised, but not supported."),
4658         HCI_QUIRK_BROKEN(READ_TRANSMIT_POWER,
4659                          "HCI Read Transmit Power Level command is advertised, "
4660                          "but not supported."),
4661         HCI_QUIRK_BROKEN(FILTER_CLEAR_ALL,
4662                          "HCI Set Event Filter command not supported."),
4663         HCI_QUIRK_BROKEN(ENHANCED_SETUP_SYNC_CONN,
4664                          "HCI Enhanced Setup Synchronous Connection command is "
4665                          "advertised, but not supported."),
4666         HCI_QUIRK_BROKEN(SET_RPA_TIMEOUT,
4667                          "HCI LE Set Random Private Address Timeout command is "
4668                          "advertised, but not supported."),
4669         HCI_QUIRK_BROKEN(LE_CODED,
4670                          "HCI LE Coded PHY feature bit is set, "
4671                          "but its usage is not supported.")
4672 };
4673
4674 /* This function handles hdev setup stage:
4675  *
4676  * Calls hdev->setup
4677  * Setup address if HCI_QUIRK_USE_BDADDR_PROPERTY is set.
4678  */
4679 static int hci_dev_setup_sync(struct hci_dev *hdev)
4680 {
4681         int ret = 0;
4682         bool invalid_bdaddr;
4683         size_t i;
4684
4685         if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
4686             !test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks))
4687                 return 0;
4688
4689         bt_dev_dbg(hdev, "");
4690
4691         hci_sock_dev_event(hdev, HCI_DEV_SETUP);
4692
4693         if (hdev->setup)
4694                 ret = hdev->setup(hdev);
4695
4696         for (i = 0; i < ARRAY_SIZE(hci_broken_table); i++) {
4697                 if (test_bit(hci_broken_table[i].quirk, &hdev->quirks))
4698                         bt_dev_warn(hdev, "%s", hci_broken_table[i].desc);
4699         }
4700
4701         /* The transport driver can set the quirk to mark the
4702          * BD_ADDR invalid before creating the HCI device or in
4703          * its setup callback.
4704          */
4705         invalid_bdaddr = test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) ||
4706                          test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
4707         if (!ret) {
4708                 if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks) &&
4709                     !bacmp(&hdev->public_addr, BDADDR_ANY))
4710                         hci_dev_get_bd_addr_from_property(hdev);
4711
4712                 if (invalid_bdaddr && bacmp(&hdev->public_addr, BDADDR_ANY) &&
4713                     hdev->set_bdaddr) {
4714                         ret = hdev->set_bdaddr(hdev, &hdev->public_addr);
4715                         if (!ret)
4716                                 invalid_bdaddr = false;
4717                 }
4718         }
4719
4720         /* The transport driver can set these quirks before
4721          * creating the HCI device or in its setup callback.
4722          *
4723          * For the invalid BD_ADDR quirk it is possible that
4724          * it becomes a valid address if the bootloader does
4725          * provide it (see above).
4726          *
4727          * In case any of them is set, the controller has to
4728          * start up as unconfigured.
4729          */
4730         if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
4731             invalid_bdaddr)
4732                 hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
4733
4734         /* For an unconfigured controller it is required to
4735          * read at least the version information provided by
4736          * the Read Local Version Information command.
4737          *
4738          * If the set_bdaddr driver callback is provided, then
4739          * also the original Bluetooth public device address
4740          * will be read using the Read BD Address command.
4741          */
4742         if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
4743                 return hci_unconf_init_sync(hdev);
4744
4745         return ret;
4746 }
4747
4748 /* This function handles hdev init stage:
4749  *
4750  * Calls hci_dev_setup_sync to perform setup stage
4751  * Calls hci_init_sync to perform HCI command init sequence
4752  */
4753 static int hci_dev_init_sync(struct hci_dev *hdev)
4754 {
4755         int ret;
4756
4757         bt_dev_dbg(hdev, "");
4758
4759         atomic_set(&hdev->cmd_cnt, 1);
4760         set_bit(HCI_INIT, &hdev->flags);
4761
4762         ret = hci_dev_setup_sync(hdev);
4763
4764         if (hci_dev_test_flag(hdev, HCI_CONFIG)) {
4765                 /* If public address change is configured, ensure that
4766                  * the address gets programmed. If the driver does not
4767                  * support changing the public address, fail the power
4768                  * on procedure.
4769                  */
4770                 if (bacmp(&hdev->public_addr, BDADDR_ANY) &&
4771                     hdev->set_bdaddr)
4772                         ret = hdev->set_bdaddr(hdev, &hdev->public_addr);
4773                 else
4774                         ret = -EADDRNOTAVAIL;
4775         }
4776
4777         if (!ret) {
4778                 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
4779                     !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
4780                         ret = hci_init_sync(hdev);
4781                         if (!ret && hdev->post_init)
4782                                 ret = hdev->post_init(hdev);
4783                 }
4784         }
4785
4786         /* If the HCI Reset command is clearing all diagnostic settings,
4787          * then they need to be reprogrammed after the init procedure
4788          * completed.
4789          */
4790         if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) &&
4791             !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
4792             hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) && hdev->set_diag)
4793                 ret = hdev->set_diag(hdev, true);
4794
4795         if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
4796                 msft_do_open(hdev);
4797                 aosp_do_open(hdev);
4798         }
4799
4800         clear_bit(HCI_INIT, &hdev->flags);
4801
4802         return ret;
4803 }
4804
4805 int hci_dev_open_sync(struct hci_dev *hdev)
4806 {
4807         int ret;
4808
4809         bt_dev_dbg(hdev, "");
4810
4811         if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
4812                 ret = -ENODEV;
4813                 goto done;
4814         }
4815
4816         if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
4817             !hci_dev_test_flag(hdev, HCI_CONFIG)) {
4818                 /* Check for rfkill but allow the HCI setup stage to
4819                  * proceed (which in itself doesn't cause any RF activity).
4820                  */
4821                 if (hci_dev_test_flag(hdev, HCI_RFKILLED)) {
4822                         ret = -ERFKILL;
4823                         goto done;
4824                 }
4825
4826                 /* Check for valid public address or a configured static
4827                  * random address, but let the HCI setup proceed to
4828                  * be able to determine if there is a public address
4829                  * or not.
4830                  *
4831                  * In case of user channel usage, it is not important
4832                  * if a public address or static random address is
4833                  * available.
4834                  *
4835                  * This check is only valid for BR/EDR controllers
4836                  * since AMP controllers do not have an address.
4837                  */
4838                 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
4839                     hdev->dev_type == HCI_PRIMARY &&
4840                     !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
4841                     !bacmp(&hdev->static_addr, BDADDR_ANY)) {
4842                         ret = -EADDRNOTAVAIL;
4843                         goto done;
4844                 }
4845         }
4846
4847         if (test_bit(HCI_UP, &hdev->flags)) {
4848                 ret = -EALREADY;
4849                 goto done;
4850         }
4851
4852         if (hdev->open(hdev)) {
4853                 ret = -EIO;
4854                 goto done;
4855         }
4856
4857         hci_devcd_reset(hdev);
4858
4859         set_bit(HCI_RUNNING, &hdev->flags);
4860         hci_sock_dev_event(hdev, HCI_DEV_OPEN);
4861
4862         ret = hci_dev_init_sync(hdev);
4863         if (!ret) {
4864                 hci_dev_hold(hdev);
4865                 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
4866                 hci_adv_instances_set_rpa_expired(hdev, true);
4867                 set_bit(HCI_UP, &hdev->flags);
4868                 hci_sock_dev_event(hdev, HCI_DEV_UP);
4869                 hci_leds_update_powered(hdev, true);
4870                 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
4871                     !hci_dev_test_flag(hdev, HCI_CONFIG) &&
4872                     !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
4873                     !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
4874                     hci_dev_test_flag(hdev, HCI_MGMT) &&
4875                     hdev->dev_type == HCI_PRIMARY) {
4876                         ret = hci_powered_update_sync(hdev);
4877                         mgmt_power_on(hdev, ret);
4878                 }
4879         } else {
4880                 /* Init failed, cleanup */
4881                 flush_work(&hdev->tx_work);
4882
4883                 /* Since hci_rx_work() is possible to awake new cmd_work
4884                  * it should be flushed first to avoid unexpected call of
4885                  * hci_cmd_work()
4886                  */
4887                 flush_work(&hdev->rx_work);
4888                 flush_work(&hdev->cmd_work);
4889
4890                 skb_queue_purge(&hdev->cmd_q);
4891                 skb_queue_purge(&hdev->rx_q);
4892
4893                 if (hdev->flush)
4894                         hdev->flush(hdev);
4895
4896                 if (hdev->sent_cmd) {
4897                         cancel_delayed_work_sync(&hdev->cmd_timer);
4898                         kfree_skb(hdev->sent_cmd);
4899                         hdev->sent_cmd = NULL;
4900                 }
4901
4902                 clear_bit(HCI_RUNNING, &hdev->flags);
4903                 hci_sock_dev_event(hdev, HCI_DEV_CLOSE);
4904
4905                 hdev->close(hdev);
4906                 hdev->flags &= BIT(HCI_RAW);
4907         }
4908
4909 done:
4910         return ret;
4911 }
4912
4913 /* This function requires the caller holds hdev->lock */
4914 static void hci_pend_le_actions_clear(struct hci_dev *hdev)
4915 {
4916         struct hci_conn_params *p;
4917
4918         list_for_each_entry(p, &hdev->le_conn_params, list) {
4919                 hci_pend_le_list_del_init(p);
4920                 if (p->conn) {
4921                         hci_conn_drop(p->conn);
4922                         hci_conn_put(p->conn);
4923                         p->conn = NULL;
4924                 }
4925         }
4926
4927         BT_DBG("All LE pending actions cleared");
4928 }
4929
4930 static int hci_dev_shutdown(struct hci_dev *hdev)
4931 {
4932         int err = 0;
4933         /* Similar to how we first do setup and then set the exclusive access
4934          * bit for userspace, we must first unset userchannel and then clean up.
4935          * Otherwise, the kernel can't properly use the hci channel to clean up
4936          * the controller (some shutdown routines require sending additional
4937          * commands to the controller for example).
4938          */
4939         bool was_userchannel =
4940                 hci_dev_test_and_clear_flag(hdev, HCI_USER_CHANNEL);
4941
4942         if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
4943             test_bit(HCI_UP, &hdev->flags)) {
4944                 /* Execute vendor specific shutdown routine */
4945                 if (hdev->shutdown)
4946                         err = hdev->shutdown(hdev);
4947         }
4948
4949         if (was_userchannel)
4950                 hci_dev_set_flag(hdev, HCI_USER_CHANNEL);
4951
4952         return err;
4953 }
4954
4955 int hci_dev_close_sync(struct hci_dev *hdev)
4956 {
4957         bool auto_off;
4958         int err = 0;
4959
4960         bt_dev_dbg(hdev, "");
4961
4962         cancel_delayed_work(&hdev->power_off);
4963         cancel_delayed_work(&hdev->ncmd_timer);
4964         cancel_delayed_work(&hdev->le_scan_disable);
4965         cancel_delayed_work(&hdev->le_scan_restart);
4966
4967         hci_request_cancel_all(hdev);
4968
4969         if (hdev->adv_instance_timeout) {
4970                 cancel_delayed_work_sync(&hdev->adv_instance_expire);
4971                 hdev->adv_instance_timeout = 0;
4972         }
4973
4974         err = hci_dev_shutdown(hdev);
4975
4976         if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
4977                 cancel_delayed_work_sync(&hdev->cmd_timer);
4978                 return err;
4979         }
4980
4981         hci_leds_update_powered(hdev, false);
4982
4983         /* Flush RX and TX works */
4984         flush_work(&hdev->tx_work);
4985         flush_work(&hdev->rx_work);
4986
4987         if (hdev->discov_timeout > 0) {
4988                 hdev->discov_timeout = 0;
4989                 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
4990                 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
4991         }
4992
4993         if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE))
4994                 cancel_delayed_work(&hdev->service_cache);
4995
4996         if (hci_dev_test_flag(hdev, HCI_MGMT)) {
4997                 struct adv_info *adv_instance;
4998
4999                 cancel_delayed_work_sync(&hdev->rpa_expired);
5000
5001                 list_for_each_entry(adv_instance, &hdev->adv_instances, list)
5002                         cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
5003         }
5004
5005         /* Avoid potential lockdep warnings from the *_flush() calls by
5006          * ensuring the workqueue is empty up front.
5007          */
5008         drain_workqueue(hdev->workqueue);
5009
5010         hci_dev_lock(hdev);
5011
5012         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
5013
5014         auto_off = hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF);
5015
5016         if (!auto_off && hdev->dev_type == HCI_PRIMARY &&
5017             !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
5018             hci_dev_test_flag(hdev, HCI_MGMT))
5019                 __mgmt_power_off(hdev);
5020
5021         hci_inquiry_cache_flush(hdev);
5022         hci_pend_le_actions_clear(hdev);
5023         hci_conn_hash_flush(hdev);
5024         /* Prevent data races on hdev->smp_data or hdev->smp_bredr_data */
5025         smp_unregister(hdev);
5026         hci_dev_unlock(hdev);
5027
5028         hci_sock_dev_event(hdev, HCI_DEV_DOWN);
5029
5030         if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
5031                 aosp_do_close(hdev);
5032                 msft_do_close(hdev);
5033         }
5034
5035         if (hdev->flush)
5036                 hdev->flush(hdev);
5037
5038         /* Reset device */
5039         skb_queue_purge(&hdev->cmd_q);
5040         atomic_set(&hdev->cmd_cnt, 1);
5041         if (test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks) &&
5042             !auto_off && !hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
5043                 set_bit(HCI_INIT, &hdev->flags);
5044                 hci_reset_sync(hdev);
5045                 clear_bit(HCI_INIT, &hdev->flags);
5046         }
5047
5048         /* flush cmd  work */
5049         flush_work(&hdev->cmd_work);
5050
5051         /* Drop queues */
5052         skb_queue_purge(&hdev->rx_q);
5053         skb_queue_purge(&hdev->cmd_q);
5054         skb_queue_purge(&hdev->raw_q);
5055
5056         /* Drop last sent command */
5057         if (hdev->sent_cmd) {
5058                 cancel_delayed_work_sync(&hdev->cmd_timer);
5059                 kfree_skb(hdev->sent_cmd);
5060                 hdev->sent_cmd = NULL;
5061         }
5062
5063         clear_bit(HCI_RUNNING, &hdev->flags);
5064         hci_sock_dev_event(hdev, HCI_DEV_CLOSE);
5065
5066         /* After this point our queues are empty and no tasks are scheduled. */
5067         hdev->close(hdev);
5068
5069         /* Clear flags */
5070         hdev->flags &= BIT(HCI_RAW);
5071         hci_dev_clear_volatile_flags(hdev);
5072
5073         /* Controller radio is available but is currently powered down */
5074         hdev->amp_status = AMP_STATUS_POWERED_DOWN;
5075
5076         memset(hdev->eir, 0, sizeof(hdev->eir));
5077         memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
5078         bacpy(&hdev->random_addr, BDADDR_ANY);
5079         hci_codec_list_clear(&hdev->local_codecs);
5080
5081         hci_dev_put(hdev);
5082         return err;
5083 }
5084
5085 /* This function perform power on HCI command sequence as follows:
5086  *
5087  * If controller is already up (HCI_UP) performs hci_powered_update_sync
5088  * sequence otherwise run hci_dev_open_sync which will follow with
5089  * hci_powered_update_sync after the init sequence is completed.
5090  */
5091 static int hci_power_on_sync(struct hci_dev *hdev)
5092 {
5093         int err;
5094
5095         if (test_bit(HCI_UP, &hdev->flags) &&
5096             hci_dev_test_flag(hdev, HCI_MGMT) &&
5097             hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) {
5098                 cancel_delayed_work(&hdev->power_off);
5099                 return hci_powered_update_sync(hdev);
5100         }
5101
5102         err = hci_dev_open_sync(hdev);
5103         if (err < 0)
5104                 return err;
5105
5106         /* During the HCI setup phase, a few error conditions are
5107          * ignored and they need to be checked now. If they are still
5108          * valid, it is important to return the device back off.
5109          */
5110         if (hci_dev_test_flag(hdev, HCI_RFKILLED) ||
5111             hci_dev_test_flag(hdev, HCI_UNCONFIGURED) ||
5112             (hdev->dev_type == HCI_PRIMARY &&
5113              !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
5114              !bacmp(&hdev->static_addr, BDADDR_ANY))) {
5115                 hci_dev_clear_flag(hdev, HCI_AUTO_OFF);
5116                 hci_dev_close_sync(hdev);
5117         } else if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) {
5118                 queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
5119                                    HCI_AUTO_OFF_TIMEOUT);
5120         }
5121
5122         if (hci_dev_test_and_clear_flag(hdev, HCI_SETUP)) {
5123                 /* For unconfigured devices, set the HCI_RAW flag
5124                  * so that userspace can easily identify them.
5125                  */
5126                 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
5127                         set_bit(HCI_RAW, &hdev->flags);
5128
5129                 /* For fully configured devices, this will send
5130                  * the Index Added event. For unconfigured devices,
5131                  * it will send Unconfigued Index Added event.
5132                  *
5133                  * Devices with HCI_QUIRK_RAW_DEVICE are ignored
5134                  * and no event will be send.
5135                  */
5136                 mgmt_index_added(hdev);
5137         } else if (hci_dev_test_and_clear_flag(hdev, HCI_CONFIG)) {
5138                 /* When the controller is now configured, then it
5139                  * is important to clear the HCI_RAW flag.
5140                  */
5141                 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
5142                         clear_bit(HCI_RAW, &hdev->flags);
5143
5144                 /* Powering on the controller with HCI_CONFIG set only
5145                  * happens with the transition from unconfigured to
5146                  * configured. This will send the Index Added event.
5147                  */
5148                 mgmt_index_added(hdev);
5149         }
5150
5151         return 0;
5152 }
5153
5154 static int hci_remote_name_cancel_sync(struct hci_dev *hdev, bdaddr_t *addr)
5155 {
5156         struct hci_cp_remote_name_req_cancel cp;
5157
5158         memset(&cp, 0, sizeof(cp));
5159         bacpy(&cp.bdaddr, addr);
5160
5161         return __hci_cmd_sync_status(hdev, HCI_OP_REMOTE_NAME_REQ_CANCEL,
5162                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
5163 }
5164
5165 int hci_stop_discovery_sync(struct hci_dev *hdev)
5166 {
5167         struct discovery_state *d = &hdev->discovery;
5168         struct inquiry_entry *e;
5169         int err;
5170
5171         bt_dev_dbg(hdev, "state %u", hdev->discovery.state);
5172
5173         if (d->state == DISCOVERY_FINDING || d->state == DISCOVERY_STOPPING) {
5174                 if (test_bit(HCI_INQUIRY, &hdev->flags)) {
5175                         err = __hci_cmd_sync_status(hdev, HCI_OP_INQUIRY_CANCEL,
5176                                                     0, NULL, HCI_CMD_TIMEOUT);
5177                         if (err)
5178                                 return err;
5179                 }
5180
5181                 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
5182                         cancel_delayed_work(&hdev->le_scan_disable);
5183                         cancel_delayed_work(&hdev->le_scan_restart);
5184
5185                         err = hci_scan_disable_sync(hdev);
5186                         if (err)
5187                                 return err;
5188                 }
5189
5190         } else {
5191                 err = hci_scan_disable_sync(hdev);
5192                 if (err)
5193                         return err;
5194         }
5195
5196         /* Resume advertising if it was paused */
5197         if (use_ll_privacy(hdev))
5198                 hci_resume_advertising_sync(hdev);
5199
5200         /* No further actions needed for LE-only discovery */
5201         if (d->type == DISCOV_TYPE_LE)
5202                 return 0;
5203
5204         if (d->state == DISCOVERY_RESOLVING || d->state == DISCOVERY_STOPPING) {
5205                 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
5206                                                      NAME_PENDING);
5207                 if (!e)
5208                         return 0;
5209
5210                 return hci_remote_name_cancel_sync(hdev, &e->data.bdaddr);
5211         }
5212
5213         return 0;
5214 }
5215
5216 static int hci_disconnect_phy_link_sync(struct hci_dev *hdev, u16 handle,
5217                                         u8 reason)
5218 {
5219         struct hci_cp_disconn_phy_link cp;
5220
5221         memset(&cp, 0, sizeof(cp));
5222         cp.phy_handle = HCI_PHY_HANDLE(handle);
5223         cp.reason = reason;
5224
5225         return __hci_cmd_sync_status(hdev, HCI_OP_DISCONN_PHY_LINK,
5226                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
5227 }
5228
5229 static int hci_disconnect_sync(struct hci_dev *hdev, struct hci_conn *conn,
5230                                u8 reason)
5231 {
5232         struct hci_cp_disconnect cp;
5233
5234         if (conn->type == AMP_LINK)
5235                 return hci_disconnect_phy_link_sync(hdev, conn->handle, reason);
5236
5237         memset(&cp, 0, sizeof(cp));
5238         cp.handle = cpu_to_le16(conn->handle);
5239         cp.reason = reason;
5240
5241         /* Wait for HCI_EV_DISCONN_COMPLETE, not HCI_EV_CMD_STATUS, when the
5242          * reason is anything but HCI_ERROR_REMOTE_POWER_OFF. This reason is
5243          * used when suspending or powering off, where we don't want to wait
5244          * for the peer's response.
5245          */
5246         if (reason != HCI_ERROR_REMOTE_POWER_OFF)
5247                 return __hci_cmd_sync_status_sk(hdev, HCI_OP_DISCONNECT,
5248                                                 sizeof(cp), &cp,
5249                                                 HCI_EV_DISCONN_COMPLETE,
5250                                                 HCI_CMD_TIMEOUT, NULL);
5251
5252         return __hci_cmd_sync_status(hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp,
5253                                      HCI_CMD_TIMEOUT);
5254 }
5255
5256 static int hci_le_connect_cancel_sync(struct hci_dev *hdev,
5257                                       struct hci_conn *conn, u8 reason)
5258 {
5259         /* Return reason if scanning since the connection shall probably be
5260          * cleanup directly.
5261          */
5262         if (test_bit(HCI_CONN_SCANNING, &conn->flags))
5263                 return reason;
5264
5265         if (conn->role == HCI_ROLE_SLAVE ||
5266             test_and_set_bit(HCI_CONN_CANCEL, &conn->flags))
5267                 return 0;
5268
5269         return __hci_cmd_sync_status(hdev, HCI_OP_LE_CREATE_CONN_CANCEL,
5270                                      0, NULL, HCI_CMD_TIMEOUT);
5271 }
5272
5273 static int hci_connect_cancel_sync(struct hci_dev *hdev, struct hci_conn *conn,
5274                                    u8 reason)
5275 {
5276         if (conn->type == LE_LINK)
5277                 return hci_le_connect_cancel_sync(hdev, conn, reason);
5278
5279         if (conn->type == ISO_LINK) {
5280                 /* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E
5281                  * page 1857:
5282                  *
5283                  * If this command is issued for a CIS on the Central and the
5284                  * CIS is successfully terminated before being established,
5285                  * then an HCI_LE_CIS_Established event shall also be sent for
5286                  * this CIS with the Status Operation Cancelled by Host (0x44).
5287                  */
5288                 if (test_bit(HCI_CONN_CREATE_CIS, &conn->flags))
5289                         return hci_disconnect_sync(hdev, conn, reason);
5290
5291                 /* CIS with no Create CIS sent have nothing to cancel */
5292                 if (bacmp(&conn->dst, BDADDR_ANY))
5293                         return HCI_ERROR_LOCAL_HOST_TERM;
5294
5295                 /* There is no way to cancel a BIS without terminating the BIG
5296                  * which is done later on connection cleanup.
5297                  */
5298                 return 0;
5299         }
5300
5301         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
5302                 return 0;
5303
5304         /* Wait for HCI_EV_CONN_COMPLETE, not HCI_EV_CMD_STATUS, when the
5305          * reason is anything but HCI_ERROR_REMOTE_POWER_OFF. This reason is
5306          * used when suspending or powering off, where we don't want to wait
5307          * for the peer's response.
5308          */
5309         if (reason != HCI_ERROR_REMOTE_POWER_OFF)
5310                 return __hci_cmd_sync_status_sk(hdev, HCI_OP_CREATE_CONN_CANCEL,
5311                                                 6, &conn->dst,
5312                                                 HCI_EV_CONN_COMPLETE,
5313                                                 HCI_CMD_TIMEOUT, NULL);
5314
5315         return __hci_cmd_sync_status(hdev, HCI_OP_CREATE_CONN_CANCEL,
5316                                      6, &conn->dst, HCI_CMD_TIMEOUT);
5317 }
5318
5319 static int hci_reject_sco_sync(struct hci_dev *hdev, struct hci_conn *conn,
5320                                u8 reason)
5321 {
5322         struct hci_cp_reject_sync_conn_req cp;
5323
5324         memset(&cp, 0, sizeof(cp));
5325         bacpy(&cp.bdaddr, &conn->dst);
5326         cp.reason = reason;
5327
5328         /* SCO rejection has its own limited set of
5329          * allowed error values (0x0D-0x0F).
5330          */
5331         if (reason < 0x0d || reason > 0x0f)
5332                 cp.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
5333
5334         return __hci_cmd_sync_status(hdev, HCI_OP_REJECT_SYNC_CONN_REQ,
5335                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
5336 }
5337
5338 static int hci_le_reject_cis_sync(struct hci_dev *hdev, struct hci_conn *conn,
5339                                   u8 reason)
5340 {
5341         struct hci_cp_le_reject_cis cp;
5342
5343         memset(&cp, 0, sizeof(cp));
5344         cp.handle = cpu_to_le16(conn->handle);
5345         cp.reason = reason;
5346
5347         return __hci_cmd_sync_status(hdev, HCI_OP_LE_REJECT_CIS,
5348                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
5349 }
5350
5351 static int hci_reject_conn_sync(struct hci_dev *hdev, struct hci_conn *conn,
5352                                 u8 reason)
5353 {
5354         struct hci_cp_reject_conn_req cp;
5355
5356         if (conn->type == ISO_LINK)
5357                 return hci_le_reject_cis_sync(hdev, conn, reason);
5358
5359         if (conn->type == SCO_LINK || conn->type == ESCO_LINK)
5360                 return hci_reject_sco_sync(hdev, conn, reason);
5361
5362         memset(&cp, 0, sizeof(cp));
5363         bacpy(&cp.bdaddr, &conn->dst);
5364         cp.reason = reason;
5365
5366         return __hci_cmd_sync_status(hdev, HCI_OP_REJECT_CONN_REQ,
5367                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
5368 }
5369
5370 int hci_abort_conn_sync(struct hci_dev *hdev, struct hci_conn *conn, u8 reason)
5371 {
5372         int err = 0;
5373         u16 handle = conn->handle;
5374         bool disconnect = false;
5375         struct hci_conn *c;
5376
5377         switch (conn->state) {
5378         case BT_CONNECTED:
5379         case BT_CONFIG:
5380                 err = hci_disconnect_sync(hdev, conn, reason);
5381                 break;
5382         case BT_CONNECT:
5383                 err = hci_connect_cancel_sync(hdev, conn, reason);
5384                 break;
5385         case BT_CONNECT2:
5386                 err = hci_reject_conn_sync(hdev, conn, reason);
5387                 break;
5388         case BT_OPEN:
5389                 hci_dev_lock(hdev);
5390
5391                 /* Cleanup bis or pa sync connections */
5392                 if (test_and_clear_bit(HCI_CONN_BIG_SYNC_FAILED, &conn->flags) ||
5393                     test_and_clear_bit(HCI_CONN_PA_SYNC_FAILED, &conn->flags)) {
5394                         hci_conn_failed(conn, reason);
5395                 } else if (test_bit(HCI_CONN_PA_SYNC, &conn->flags) ||
5396                            test_bit(HCI_CONN_BIG_SYNC, &conn->flags)) {
5397                         conn->state = BT_CLOSED;
5398                         hci_disconn_cfm(conn, reason);
5399                         hci_conn_del(conn);
5400                 }
5401
5402                 hci_dev_unlock(hdev);
5403                 return 0;
5404         case BT_BOUND:
5405                 break;
5406         default:
5407                 disconnect = true;
5408                 break;
5409         }
5410
5411         hci_dev_lock(hdev);
5412
5413         /* Check if the connection has been cleaned up concurrently */
5414         c = hci_conn_hash_lookup_handle(hdev, handle);
5415         if (!c || c != conn) {
5416                 err = 0;
5417                 goto unlock;
5418         }
5419
5420         /* Cleanup hci_conn object if it cannot be cancelled as it
5421          * likelly means the controller and host stack are out of sync
5422          * or in case of LE it was still scanning so it can be cleanup
5423          * safely.
5424          */
5425         if (disconnect) {
5426                 conn->state = BT_CLOSED;
5427                 hci_disconn_cfm(conn, reason);
5428                 hci_conn_del(conn);
5429         } else {
5430                 hci_conn_failed(conn, reason);
5431         }
5432
5433 unlock:
5434         hci_dev_unlock(hdev);
5435         return err;
5436 }
5437
5438 static int hci_disconnect_all_sync(struct hci_dev *hdev, u8 reason)
5439 {
5440         struct list_head *head = &hdev->conn_hash.list;
5441         struct hci_conn *conn;
5442
5443         rcu_read_lock();
5444         while ((conn = list_first_or_null_rcu(head, struct hci_conn, list))) {
5445                 /* Make sure the connection is not freed while unlocking */
5446                 conn = hci_conn_get(conn);
5447                 rcu_read_unlock();
5448                 /* Disregard possible errors since hci_conn_del shall have been
5449                  * called even in case of errors had occurred since it would
5450                  * then cause hci_conn_failed to be called which calls
5451                  * hci_conn_del internally.
5452                  */
5453                 hci_abort_conn_sync(hdev, conn, reason);
5454                 hci_conn_put(conn);
5455                 rcu_read_lock();
5456         }
5457         rcu_read_unlock();
5458
5459         return 0;
5460 }
5461
5462 /* This function perform power off HCI command sequence as follows:
5463  *
5464  * Clear Advertising
5465  * Stop Discovery
5466  * Disconnect all connections
5467  * hci_dev_close_sync
5468  */
5469 static int hci_power_off_sync(struct hci_dev *hdev)
5470 {
5471         int err;
5472
5473         /* If controller is already down there is nothing to do */
5474         if (!test_bit(HCI_UP, &hdev->flags))
5475                 return 0;
5476
5477         if (test_bit(HCI_ISCAN, &hdev->flags) ||
5478             test_bit(HCI_PSCAN, &hdev->flags)) {
5479                 err = hci_write_scan_enable_sync(hdev, 0x00);
5480                 if (err)
5481                         return err;
5482         }
5483
5484         err = hci_clear_adv_sync(hdev, NULL, false);
5485         if (err)
5486                 return err;
5487
5488         err = hci_stop_discovery_sync(hdev);
5489         if (err)
5490                 return err;
5491
5492         /* Terminated due to Power Off */
5493         err = hci_disconnect_all_sync(hdev, HCI_ERROR_REMOTE_POWER_OFF);
5494         if (err)
5495                 return err;
5496
5497         return hci_dev_close_sync(hdev);
5498 }
5499
5500 int hci_set_powered_sync(struct hci_dev *hdev, u8 val)
5501 {
5502         if (val)
5503                 return hci_power_on_sync(hdev);
5504
5505         return hci_power_off_sync(hdev);
5506 }
5507
5508 static int hci_write_iac_sync(struct hci_dev *hdev)
5509 {
5510         struct hci_cp_write_current_iac_lap cp;
5511
5512         if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
5513                 return 0;
5514
5515         memset(&cp, 0, sizeof(cp));
5516
5517         if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) {
5518                 /* Limited discoverable mode */
5519                 cp.num_iac = min_t(u8, hdev->num_iac, 2);
5520                 cp.iac_lap[0] = 0x00;   /* LIAC */
5521                 cp.iac_lap[1] = 0x8b;
5522                 cp.iac_lap[2] = 0x9e;
5523                 cp.iac_lap[3] = 0x33;   /* GIAC */
5524                 cp.iac_lap[4] = 0x8b;
5525                 cp.iac_lap[5] = 0x9e;
5526         } else {
5527                 /* General discoverable mode */
5528                 cp.num_iac = 1;
5529                 cp.iac_lap[0] = 0x33;   /* GIAC */
5530                 cp.iac_lap[1] = 0x8b;
5531                 cp.iac_lap[2] = 0x9e;
5532         }
5533
5534         return __hci_cmd_sync_status(hdev, HCI_OP_WRITE_CURRENT_IAC_LAP,
5535                                      (cp.num_iac * 3) + 1, &cp,
5536                                      HCI_CMD_TIMEOUT);
5537 }
5538
5539 int hci_update_discoverable_sync(struct hci_dev *hdev)
5540 {
5541         int err = 0;
5542
5543         if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
5544                 err = hci_write_iac_sync(hdev);
5545                 if (err)
5546                         return err;
5547
5548                 err = hci_update_scan_sync(hdev);
5549                 if (err)
5550                         return err;
5551
5552                 err = hci_update_class_sync(hdev);
5553                 if (err)
5554                         return err;
5555         }
5556
5557         /* Advertising instances don't use the global discoverable setting, so
5558          * only update AD if advertising was enabled using Set Advertising.
5559          */
5560         if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
5561                 err = hci_update_adv_data_sync(hdev, 0x00);
5562                 if (err)
5563                         return err;
5564
5565                 /* Discoverable mode affects the local advertising
5566                  * address in limited privacy mode.
5567                  */
5568                 if (hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY)) {
5569                         if (ext_adv_capable(hdev))
5570                                 err = hci_start_ext_adv_sync(hdev, 0x00);
5571                         else
5572                                 err = hci_enable_advertising_sync(hdev);
5573                 }
5574         }
5575
5576         return err;
5577 }
5578
5579 static int update_discoverable_sync(struct hci_dev *hdev, void *data)
5580 {
5581         return hci_update_discoverable_sync(hdev);
5582 }
5583
5584 int hci_update_discoverable(struct hci_dev *hdev)
5585 {
5586         /* Only queue if it would have any effect */
5587         if (hdev_is_powered(hdev) &&
5588             hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
5589             hci_dev_test_flag(hdev, HCI_DISCOVERABLE) &&
5590             hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY))
5591                 return hci_cmd_sync_queue(hdev, update_discoverable_sync, NULL,
5592                                           NULL);
5593
5594         return 0;
5595 }
5596
5597 int hci_update_connectable_sync(struct hci_dev *hdev)
5598 {
5599         int err;
5600
5601         err = hci_update_scan_sync(hdev);
5602         if (err)
5603                 return err;
5604
5605         /* If BR/EDR is not enabled and we disable advertising as a
5606          * by-product of disabling connectable, we need to update the
5607          * advertising flags.
5608          */
5609         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
5610                 err = hci_update_adv_data_sync(hdev, hdev->cur_adv_instance);
5611
5612         /* Update the advertising parameters if necessary */
5613         if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
5614             !list_empty(&hdev->adv_instances)) {
5615                 if (ext_adv_capable(hdev))
5616                         err = hci_start_ext_adv_sync(hdev,
5617                                                      hdev->cur_adv_instance);
5618                 else
5619                         err = hci_enable_advertising_sync(hdev);
5620
5621                 if (err)
5622                         return err;
5623         }
5624
5625         return hci_update_passive_scan_sync(hdev);
5626 }
5627
5628 static int hci_inquiry_sync(struct hci_dev *hdev, u8 length)
5629 {
5630         const u8 giac[3] = { 0x33, 0x8b, 0x9e };
5631         const u8 liac[3] = { 0x00, 0x8b, 0x9e };
5632         struct hci_cp_inquiry cp;
5633
5634         bt_dev_dbg(hdev, "");
5635
5636         if (hci_dev_test_flag(hdev, HCI_INQUIRY))
5637                 return 0;
5638
5639         hci_dev_lock(hdev);
5640         hci_inquiry_cache_flush(hdev);
5641         hci_dev_unlock(hdev);
5642
5643         memset(&cp, 0, sizeof(cp));
5644
5645         if (hdev->discovery.limited)
5646                 memcpy(&cp.lap, liac, sizeof(cp.lap));
5647         else
5648                 memcpy(&cp.lap, giac, sizeof(cp.lap));
5649
5650         cp.length = length;
5651
5652         return __hci_cmd_sync_status(hdev, HCI_OP_INQUIRY,
5653                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
5654 }
5655
5656 static int hci_active_scan_sync(struct hci_dev *hdev, uint16_t interval)
5657 {
5658         u8 own_addr_type;
5659         /* Accept list is not used for discovery */
5660         u8 filter_policy = 0x00;
5661         /* Default is to enable duplicates filter */
5662         u8 filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
5663         int err;
5664
5665         bt_dev_dbg(hdev, "");
5666
5667         /* If controller is scanning, it means the passive scanning is
5668          * running. Thus, we should temporarily stop it in order to set the
5669          * discovery scanning parameters.
5670          */
5671         err = hci_scan_disable_sync(hdev);
5672         if (err) {
5673                 bt_dev_err(hdev, "Unable to disable scanning: %d", err);
5674                 return err;
5675         }
5676
5677         cancel_interleave_scan(hdev);
5678
5679         /* Pause address resolution for active scan and stop advertising if
5680          * privacy is enabled.
5681          */
5682         err = hci_pause_addr_resolution(hdev);
5683         if (err)
5684                 goto failed;
5685
5686         /* All active scans will be done with either a resolvable private
5687          * address (when privacy feature has been enabled) or non-resolvable
5688          * private address.
5689          */
5690         err = hci_update_random_address_sync(hdev, true, scan_use_rpa(hdev),
5691                                              &own_addr_type);
5692         if (err < 0)
5693                 own_addr_type = ADDR_LE_DEV_PUBLIC;
5694
5695         if (hci_is_adv_monitoring(hdev)) {
5696                 /* Duplicate filter should be disabled when some advertisement
5697                  * monitor is activated, otherwise AdvMon can only receive one
5698                  * advertisement for one peer(*) during active scanning, and
5699                  * might report loss to these peers.
5700                  *
5701                  * Note that different controllers have different meanings of
5702                  * |duplicate|. Some of them consider packets with the same
5703                  * address as duplicate, and others consider packets with the
5704                  * same address and the same RSSI as duplicate. Although in the
5705                  * latter case we don't need to disable duplicate filter, but
5706                  * it is common to have active scanning for a short period of
5707                  * time, the power impact should be neglectable.
5708                  */
5709                 filter_dup = LE_SCAN_FILTER_DUP_DISABLE;
5710         }
5711
5712         err = hci_start_scan_sync(hdev, LE_SCAN_ACTIVE, interval,
5713                                   hdev->le_scan_window_discovery,
5714                                   own_addr_type, filter_policy, filter_dup);
5715         if (!err)
5716                 return err;
5717
5718 failed:
5719         /* Resume advertising if it was paused */
5720         if (use_ll_privacy(hdev))
5721                 hci_resume_advertising_sync(hdev);
5722
5723         /* Resume passive scanning */
5724         hci_update_passive_scan_sync(hdev);
5725         return err;
5726 }
5727
5728 static int hci_start_interleaved_discovery_sync(struct hci_dev *hdev)
5729 {
5730         int err;
5731
5732         bt_dev_dbg(hdev, "");
5733
5734         err = hci_active_scan_sync(hdev, hdev->le_scan_int_discovery * 2);
5735         if (err)
5736                 return err;
5737
5738         return hci_inquiry_sync(hdev, DISCOV_BREDR_INQUIRY_LEN);
5739 }
5740
5741 int hci_start_discovery_sync(struct hci_dev *hdev)
5742 {
5743         unsigned long timeout;
5744         int err;
5745
5746         bt_dev_dbg(hdev, "type %u", hdev->discovery.type);
5747
5748         switch (hdev->discovery.type) {
5749         case DISCOV_TYPE_BREDR:
5750                 return hci_inquiry_sync(hdev, DISCOV_BREDR_INQUIRY_LEN);
5751         case DISCOV_TYPE_INTERLEAVED:
5752                 /* When running simultaneous discovery, the LE scanning time
5753                  * should occupy the whole discovery time sine BR/EDR inquiry
5754                  * and LE scanning are scheduled by the controller.
5755                  *
5756                  * For interleaving discovery in comparison, BR/EDR inquiry
5757                  * and LE scanning are done sequentially with separate
5758                  * timeouts.
5759                  */
5760                 if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
5761                              &hdev->quirks)) {
5762                         timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
5763                         /* During simultaneous discovery, we double LE scan
5764                          * interval. We must leave some time for the controller
5765                          * to do BR/EDR inquiry.
5766                          */
5767                         err = hci_start_interleaved_discovery_sync(hdev);
5768                         break;
5769                 }
5770
5771                 timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout);
5772                 err = hci_active_scan_sync(hdev, hdev->le_scan_int_discovery);
5773                 break;
5774         case DISCOV_TYPE_LE:
5775                 timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
5776                 err = hci_active_scan_sync(hdev, hdev->le_scan_int_discovery);
5777                 break;
5778         default:
5779                 return -EINVAL;
5780         }
5781
5782         if (err)
5783                 return err;
5784
5785         bt_dev_dbg(hdev, "timeout %u ms", jiffies_to_msecs(timeout));
5786
5787         /* When service discovery is used and the controller has a
5788          * strict duplicate filter, it is important to remember the
5789          * start and duration of the scan. This is required for
5790          * restarting scanning during the discovery phase.
5791          */
5792         if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) &&
5793             hdev->discovery.result_filtering) {
5794                 hdev->discovery.scan_start = jiffies;
5795                 hdev->discovery.scan_duration = timeout;
5796         }
5797
5798         queue_delayed_work(hdev->req_workqueue, &hdev->le_scan_disable,
5799                            timeout);
5800         return 0;
5801 }
5802
5803 static void hci_suspend_monitor_sync(struct hci_dev *hdev)
5804 {
5805         switch (hci_get_adv_monitor_offload_ext(hdev)) {
5806         case HCI_ADV_MONITOR_EXT_MSFT:
5807                 msft_suspend_sync(hdev);
5808                 break;
5809         default:
5810                 return;
5811         }
5812 }
5813
5814 /* This function disables discovery and mark it as paused */
5815 static int hci_pause_discovery_sync(struct hci_dev *hdev)
5816 {
5817         int old_state = hdev->discovery.state;
5818         int err;
5819
5820         /* If discovery already stopped/stopping/paused there nothing to do */
5821         if (old_state == DISCOVERY_STOPPED || old_state == DISCOVERY_STOPPING ||
5822             hdev->discovery_paused)
5823                 return 0;
5824
5825         hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
5826         err = hci_stop_discovery_sync(hdev);
5827         if (err)
5828                 return err;
5829
5830         hdev->discovery_paused = true;
5831         hdev->discovery_old_state = old_state;
5832         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
5833
5834         return 0;
5835 }
5836
5837 static int hci_update_event_filter_sync(struct hci_dev *hdev)
5838 {
5839         struct bdaddr_list_with_flags *b;
5840         u8 scan = SCAN_DISABLED;
5841         bool scanning = test_bit(HCI_PSCAN, &hdev->flags);
5842         int err;
5843
5844         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
5845                 return 0;
5846
5847         /* Some fake CSR controllers lock up after setting this type of
5848          * filter, so avoid sending the request altogether.
5849          */
5850         if (test_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks))
5851                 return 0;
5852
5853         /* Always clear event filter when starting */
5854         hci_clear_event_filter_sync(hdev);
5855
5856         list_for_each_entry(b, &hdev->accept_list, list) {
5857                 if (!(b->flags & HCI_CONN_FLAG_REMOTE_WAKEUP))
5858                         continue;
5859
5860                 bt_dev_dbg(hdev, "Adding event filters for %pMR", &b->bdaddr);
5861
5862                 err =  hci_set_event_filter_sync(hdev, HCI_FLT_CONN_SETUP,
5863                                                  HCI_CONN_SETUP_ALLOW_BDADDR,
5864                                                  &b->bdaddr,
5865                                                  HCI_CONN_SETUP_AUTO_ON);
5866                 if (err)
5867                         bt_dev_dbg(hdev, "Failed to set event filter for %pMR",
5868                                    &b->bdaddr);
5869                 else
5870                         scan = SCAN_PAGE;
5871         }
5872
5873         if (scan && !scanning)
5874                 hci_write_scan_enable_sync(hdev, scan);
5875         else if (!scan && scanning)
5876                 hci_write_scan_enable_sync(hdev, scan);
5877
5878         return 0;
5879 }
5880
5881 /* This function disables scan (BR and LE) and mark it as paused */
5882 static int hci_pause_scan_sync(struct hci_dev *hdev)
5883 {
5884         if (hdev->scanning_paused)
5885                 return 0;
5886
5887         /* Disable page scan if enabled */
5888         if (test_bit(HCI_PSCAN, &hdev->flags))
5889                 hci_write_scan_enable_sync(hdev, SCAN_DISABLED);
5890
5891         hci_scan_disable_sync(hdev);
5892
5893         hdev->scanning_paused = true;
5894
5895         return 0;
5896 }
5897
5898 /* This function performs the HCI suspend procedures in the follow order:
5899  *
5900  * Pause discovery (active scanning/inquiry)
5901  * Pause Directed Advertising/Advertising
5902  * Pause Scanning (passive scanning in case discovery was not active)
5903  * Disconnect all connections
5904  * Set suspend_status to BT_SUSPEND_DISCONNECT if hdev cannot wakeup
5905  * otherwise:
5906  * Update event mask (only set events that are allowed to wake up the host)
5907  * Update event filter (with devices marked with HCI_CONN_FLAG_REMOTE_WAKEUP)
5908  * Update passive scanning (lower duty cycle)
5909  * Set suspend_status to BT_SUSPEND_CONFIGURE_WAKE
5910  */
5911 int hci_suspend_sync(struct hci_dev *hdev)
5912 {
5913         int err;
5914
5915         /* If marked as suspended there nothing to do */
5916         if (hdev->suspended)
5917                 return 0;
5918
5919         /* Mark device as suspended */
5920         hdev->suspended = true;
5921
5922         /* Pause discovery if not already stopped */
5923         hci_pause_discovery_sync(hdev);
5924
5925         /* Pause other advertisements */
5926         hci_pause_advertising_sync(hdev);
5927
5928         /* Suspend monitor filters */
5929         hci_suspend_monitor_sync(hdev);
5930
5931         /* Prevent disconnects from causing scanning to be re-enabled */
5932         hci_pause_scan_sync(hdev);
5933
5934         if (hci_conn_count(hdev)) {
5935                 /* Soft disconnect everything (power off) */
5936                 err = hci_disconnect_all_sync(hdev, HCI_ERROR_REMOTE_POWER_OFF);
5937                 if (err) {
5938                         /* Set state to BT_RUNNING so resume doesn't notify */
5939                         hdev->suspend_state = BT_RUNNING;
5940                         hci_resume_sync(hdev);
5941                         return err;
5942                 }
5943
5944                 /* Update event mask so only the allowed event can wakeup the
5945                  * host.
5946                  */
5947                 hci_set_event_mask_sync(hdev);
5948         }
5949
5950         /* Only configure accept list if disconnect succeeded and wake
5951          * isn't being prevented.
5952          */
5953         if (!hdev->wakeup || !hdev->wakeup(hdev)) {
5954                 hdev->suspend_state = BT_SUSPEND_DISCONNECT;
5955                 return 0;
5956         }
5957
5958         /* Unpause to take care of updating scanning params */
5959         hdev->scanning_paused = false;
5960
5961         /* Enable event filter for paired devices */
5962         hci_update_event_filter_sync(hdev);
5963
5964         /* Update LE passive scan if enabled */
5965         hci_update_passive_scan_sync(hdev);
5966
5967         /* Pause scan changes again. */
5968         hdev->scanning_paused = true;
5969
5970         hdev->suspend_state = BT_SUSPEND_CONFIGURE_WAKE;
5971
5972         return 0;
5973 }
5974
5975 /* This function resumes discovery */
5976 static int hci_resume_discovery_sync(struct hci_dev *hdev)
5977 {
5978         int err;
5979
5980         /* If discovery not paused there nothing to do */
5981         if (!hdev->discovery_paused)
5982                 return 0;
5983
5984         hdev->discovery_paused = false;
5985
5986         hci_discovery_set_state(hdev, DISCOVERY_STARTING);
5987
5988         err = hci_start_discovery_sync(hdev);
5989
5990         hci_discovery_set_state(hdev, err ? DISCOVERY_STOPPED :
5991                                 DISCOVERY_FINDING);
5992
5993         return err;
5994 }
5995
5996 static void hci_resume_monitor_sync(struct hci_dev *hdev)
5997 {
5998         switch (hci_get_adv_monitor_offload_ext(hdev)) {
5999         case HCI_ADV_MONITOR_EXT_MSFT:
6000                 msft_resume_sync(hdev);
6001                 break;
6002         default:
6003                 return;
6004         }
6005 }
6006
6007 /* This function resume scan and reset paused flag */
6008 static int hci_resume_scan_sync(struct hci_dev *hdev)
6009 {
6010         if (!hdev->scanning_paused)
6011                 return 0;
6012
6013         hdev->scanning_paused = false;
6014
6015         hci_update_scan_sync(hdev);
6016
6017         /* Reset passive scanning to normal */
6018         hci_update_passive_scan_sync(hdev);
6019
6020         return 0;
6021 }
6022
6023 /* This function performs the HCI suspend procedures in the follow order:
6024  *
6025  * Restore event mask
6026  * Clear event filter
6027  * Update passive scanning (normal duty cycle)
6028  * Resume Directed Advertising/Advertising
6029  * Resume discovery (active scanning/inquiry)
6030  */
6031 int hci_resume_sync(struct hci_dev *hdev)
6032 {
6033         /* If not marked as suspended there nothing to do */
6034         if (!hdev->suspended)
6035                 return 0;
6036
6037         hdev->suspended = false;
6038
6039         /* Restore event mask */
6040         hci_set_event_mask_sync(hdev);
6041
6042         /* Clear any event filters and restore scan state */
6043         hci_clear_event_filter_sync(hdev);
6044
6045         /* Resume scanning */
6046         hci_resume_scan_sync(hdev);
6047
6048         /* Resume monitor filters */
6049         hci_resume_monitor_sync(hdev);
6050
6051         /* Resume other advertisements */
6052         hci_resume_advertising_sync(hdev);
6053
6054         /* Resume discovery */
6055         hci_resume_discovery_sync(hdev);
6056
6057         return 0;
6058 }
6059
6060 static bool conn_use_rpa(struct hci_conn *conn)
6061 {
6062         struct hci_dev *hdev = conn->hdev;
6063
6064         return hci_dev_test_flag(hdev, HCI_PRIVACY);
6065 }
6066
6067 static int hci_le_ext_directed_advertising_sync(struct hci_dev *hdev,
6068                                                 struct hci_conn *conn)
6069 {
6070         struct hci_cp_le_set_ext_adv_params cp;
6071         int err;
6072         bdaddr_t random_addr;
6073         u8 own_addr_type;
6074
6075         err = hci_update_random_address_sync(hdev, false, conn_use_rpa(conn),
6076                                              &own_addr_type);
6077         if (err)
6078                 return err;
6079
6080         /* Set require_privacy to false so that the remote device has a
6081          * chance of identifying us.
6082          */
6083         err = hci_get_random_address(hdev, false, conn_use_rpa(conn), NULL,
6084                                      &own_addr_type, &random_addr);
6085         if (err)
6086                 return err;
6087
6088         memset(&cp, 0, sizeof(cp));
6089
6090         cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_DIRECT_IND);
6091         cp.channel_map = hdev->le_adv_channel_map;
6092         cp.tx_power = HCI_TX_POWER_INVALID;
6093         cp.primary_phy = HCI_ADV_PHY_1M;
6094         cp.secondary_phy = HCI_ADV_PHY_1M;
6095         cp.handle = 0x00; /* Use instance 0 for directed adv */
6096         cp.own_addr_type = own_addr_type;
6097         cp.peer_addr_type = conn->dst_type;
6098         bacpy(&cp.peer_addr, &conn->dst);
6099
6100         /* As per Core Spec 5.2 Vol 2, PART E, Sec 7.8.53, for
6101          * advertising_event_property LE_LEGACY_ADV_DIRECT_IND
6102          * does not supports advertising data when the advertising set already
6103          * contains some, the controller shall return erroc code 'Invalid
6104          * HCI Command Parameters(0x12).
6105          * So it is required to remove adv set for handle 0x00. since we use
6106          * instance 0 for directed adv.
6107          */
6108         err = hci_remove_ext_adv_instance_sync(hdev, cp.handle, NULL);
6109         if (err)
6110                 return err;
6111
6112         err = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS,
6113                                     sizeof(cp), &cp, HCI_CMD_TIMEOUT);
6114         if (err)
6115                 return err;
6116
6117         /* Check if random address need to be updated */
6118         if (own_addr_type == ADDR_LE_DEV_RANDOM &&
6119             bacmp(&random_addr, BDADDR_ANY) &&
6120             bacmp(&random_addr, &hdev->random_addr)) {
6121                 err = hci_set_adv_set_random_addr_sync(hdev, 0x00,
6122                                                        &random_addr);
6123                 if (err)
6124                         return err;
6125         }
6126
6127         return hci_enable_ext_advertising_sync(hdev, 0x00);
6128 }
6129
6130 static int hci_le_directed_advertising_sync(struct hci_dev *hdev,
6131                                             struct hci_conn *conn)
6132 {
6133         struct hci_cp_le_set_adv_param cp;
6134         u8 status;
6135         u8 own_addr_type;
6136         u8 enable;
6137
6138         if (ext_adv_capable(hdev))
6139                 return hci_le_ext_directed_advertising_sync(hdev, conn);
6140
6141         /* Clear the HCI_LE_ADV bit temporarily so that the
6142          * hci_update_random_address knows that it's safe to go ahead
6143          * and write a new random address. The flag will be set back on
6144          * as soon as the SET_ADV_ENABLE HCI command completes.
6145          */
6146         hci_dev_clear_flag(hdev, HCI_LE_ADV);
6147
6148         /* Set require_privacy to false so that the remote device has a
6149          * chance of identifying us.
6150          */
6151         status = hci_update_random_address_sync(hdev, false, conn_use_rpa(conn),
6152                                                 &own_addr_type);
6153         if (status)
6154                 return status;
6155
6156         memset(&cp, 0, sizeof(cp));
6157
6158         /* Some controllers might reject command if intervals are not
6159          * within range for undirected advertising.
6160          * BCM20702A0 is known to be affected by this.
6161          */
6162         cp.min_interval = cpu_to_le16(0x0020);
6163         cp.max_interval = cpu_to_le16(0x0020);
6164
6165         cp.type = LE_ADV_DIRECT_IND;
6166         cp.own_address_type = own_addr_type;
6167         cp.direct_addr_type = conn->dst_type;
6168         bacpy(&cp.direct_addr, &conn->dst);
6169         cp.channel_map = hdev->le_adv_channel_map;
6170
6171         status = __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_PARAM,
6172                                        sizeof(cp), &cp, HCI_CMD_TIMEOUT);
6173         if (status)
6174                 return status;
6175
6176         enable = 0x01;
6177
6178         return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_ADV_ENABLE,
6179                                      sizeof(enable), &enable, HCI_CMD_TIMEOUT);
6180 }
6181
6182 static void set_ext_conn_params(struct hci_conn *conn,
6183                                 struct hci_cp_le_ext_conn_param *p)
6184 {
6185         struct hci_dev *hdev = conn->hdev;
6186
6187         memset(p, 0, sizeof(*p));
6188
6189         p->scan_interval = cpu_to_le16(hdev->le_scan_int_connect);
6190         p->scan_window = cpu_to_le16(hdev->le_scan_window_connect);
6191         p->conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
6192         p->conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
6193         p->conn_latency = cpu_to_le16(conn->le_conn_latency);
6194         p->supervision_timeout = cpu_to_le16(conn->le_supv_timeout);
6195         p->min_ce_len = cpu_to_le16(0x0000);
6196         p->max_ce_len = cpu_to_le16(0x0000);
6197 }
6198
6199 static int hci_le_ext_create_conn_sync(struct hci_dev *hdev,
6200                                        struct hci_conn *conn, u8 own_addr_type)
6201 {
6202         struct hci_cp_le_ext_create_conn *cp;
6203         struct hci_cp_le_ext_conn_param *p;
6204         u8 data[sizeof(*cp) + sizeof(*p) * 3];
6205         u32 plen;
6206
6207         cp = (void *)data;
6208         p = (void *)cp->data;
6209
6210         memset(cp, 0, sizeof(*cp));
6211
6212         bacpy(&cp->peer_addr, &conn->dst);
6213         cp->peer_addr_type = conn->dst_type;
6214         cp->own_addr_type = own_addr_type;
6215
6216         plen = sizeof(*cp);
6217
6218         if (scan_1m(hdev)) {
6219                 cp->phys |= LE_SCAN_PHY_1M;
6220                 set_ext_conn_params(conn, p);
6221
6222                 p++;
6223                 plen += sizeof(*p);
6224         }
6225
6226         if (scan_2m(hdev)) {
6227                 cp->phys |= LE_SCAN_PHY_2M;
6228                 set_ext_conn_params(conn, p);
6229
6230                 p++;
6231                 plen += sizeof(*p);
6232         }
6233
6234         if (scan_coded(hdev)) {
6235                 cp->phys |= LE_SCAN_PHY_CODED;
6236                 set_ext_conn_params(conn, p);
6237
6238                 plen += sizeof(*p);
6239         }
6240
6241         return __hci_cmd_sync_status_sk(hdev, HCI_OP_LE_EXT_CREATE_CONN,
6242                                         plen, data,
6243                                         HCI_EV_LE_ENHANCED_CONN_COMPLETE,
6244                                         conn->conn_timeout, NULL);
6245 }
6246
6247 int hci_le_create_conn_sync(struct hci_dev *hdev, struct hci_conn *conn)
6248 {
6249         struct hci_cp_le_create_conn cp;
6250         struct hci_conn_params *params;
6251         u8 own_addr_type;
6252         int err;
6253
6254         /* If requested to connect as peripheral use directed advertising */
6255         if (conn->role == HCI_ROLE_SLAVE) {
6256                 /* If we're active scanning and simultaneous roles is not
6257                  * enabled simply reject the attempt.
6258                  */
6259                 if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
6260                     hdev->le_scan_type == LE_SCAN_ACTIVE &&
6261                     !hci_dev_test_flag(hdev, HCI_LE_SIMULTANEOUS_ROLES)) {
6262                         hci_conn_del(conn);
6263                         return -EBUSY;
6264                 }
6265
6266                 /* Pause advertising while doing directed advertising. */
6267                 hci_pause_advertising_sync(hdev);
6268
6269                 err = hci_le_directed_advertising_sync(hdev, conn);
6270                 goto done;
6271         }
6272
6273         /* Disable advertising if simultaneous roles is not in use. */
6274         if (!hci_dev_test_flag(hdev, HCI_LE_SIMULTANEOUS_ROLES))
6275                 hci_pause_advertising_sync(hdev);
6276
6277         params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
6278         if (params) {
6279                 conn->le_conn_min_interval = params->conn_min_interval;
6280                 conn->le_conn_max_interval = params->conn_max_interval;
6281                 conn->le_conn_latency = params->conn_latency;
6282                 conn->le_supv_timeout = params->supervision_timeout;
6283         } else {
6284                 conn->le_conn_min_interval = hdev->le_conn_min_interval;
6285                 conn->le_conn_max_interval = hdev->le_conn_max_interval;
6286                 conn->le_conn_latency = hdev->le_conn_latency;
6287                 conn->le_supv_timeout = hdev->le_supv_timeout;
6288         }
6289
6290         /* If controller is scanning, we stop it since some controllers are
6291          * not able to scan and connect at the same time. Also set the
6292          * HCI_LE_SCAN_INTERRUPTED flag so that the command complete
6293          * handler for scan disabling knows to set the correct discovery
6294          * state.
6295          */
6296         if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
6297                 hci_scan_disable_sync(hdev);
6298                 hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED);
6299         }
6300
6301         /* Update random address, but set require_privacy to false so
6302          * that we never connect with an non-resolvable address.
6303          */
6304         err = hci_update_random_address_sync(hdev, false, conn_use_rpa(conn),
6305                                              &own_addr_type);
6306         if (err)
6307                 goto done;
6308
6309         if (use_ext_conn(hdev)) {
6310                 err = hci_le_ext_create_conn_sync(hdev, conn, own_addr_type);
6311                 goto done;
6312         }
6313
6314         memset(&cp, 0, sizeof(cp));
6315
6316         cp.scan_interval = cpu_to_le16(hdev->le_scan_int_connect);
6317         cp.scan_window = cpu_to_le16(hdev->le_scan_window_connect);
6318
6319         bacpy(&cp.peer_addr, &conn->dst);
6320         cp.peer_addr_type = conn->dst_type;
6321         cp.own_address_type = own_addr_type;
6322         cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
6323         cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
6324         cp.conn_latency = cpu_to_le16(conn->le_conn_latency);
6325         cp.supervision_timeout = cpu_to_le16(conn->le_supv_timeout);
6326         cp.min_ce_len = cpu_to_le16(0x0000);
6327         cp.max_ce_len = cpu_to_le16(0x0000);
6328
6329         /* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E page 2261:
6330          *
6331          * If this event is unmasked and the HCI_LE_Connection_Complete event
6332          * is unmasked, only the HCI_LE_Enhanced_Connection_Complete event is
6333          * sent when a new connection has been created.
6334          */
6335         err = __hci_cmd_sync_status_sk(hdev, HCI_OP_LE_CREATE_CONN,
6336                                        sizeof(cp), &cp,
6337                                        use_enhanced_conn_complete(hdev) ?
6338                                        HCI_EV_LE_ENHANCED_CONN_COMPLETE :
6339                                        HCI_EV_LE_CONN_COMPLETE,
6340                                        conn->conn_timeout, NULL);
6341
6342 done:
6343         if (err == -ETIMEDOUT)
6344                 hci_le_connect_cancel_sync(hdev, conn, 0x00);
6345
6346         /* Re-enable advertising after the connection attempt is finished. */
6347         hci_resume_advertising_sync(hdev);
6348         return err;
6349 }
6350
6351 int hci_le_create_cis_sync(struct hci_dev *hdev)
6352 {
6353         struct {
6354                 struct hci_cp_le_create_cis cp;
6355                 struct hci_cis cis[0x1f];
6356         } cmd;
6357         struct hci_conn *conn;
6358         u8 cig = BT_ISO_QOS_CIG_UNSET;
6359
6360         /* The spec allows only one pending LE Create CIS command at a time. If
6361          * the command is pending now, don't do anything. We check for pending
6362          * connections after each CIS Established event.
6363          *
6364          * BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E
6365          * page 2566:
6366          *
6367          * If the Host issues this command before all the
6368          * HCI_LE_CIS_Established events from the previous use of the
6369          * command have been generated, the Controller shall return the
6370          * error code Command Disallowed (0x0C).
6371          *
6372          * BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 4, Part E
6373          * page 2567:
6374          *
6375          * When the Controller receives the HCI_LE_Create_CIS command, the
6376          * Controller sends the HCI_Command_Status event to the Host. An
6377          * HCI_LE_CIS_Established event will be generated for each CIS when it
6378          * is established or if it is disconnected or considered lost before
6379          * being established; until all the events are generated, the command
6380          * remains pending.
6381          */
6382
6383         memset(&cmd, 0, sizeof(cmd));
6384
6385         hci_dev_lock(hdev);
6386
6387         rcu_read_lock();
6388
6389         /* Wait until previous Create CIS has completed */
6390         list_for_each_entry_rcu(conn, &hdev->conn_hash.list, list) {
6391                 if (test_bit(HCI_CONN_CREATE_CIS, &conn->flags))
6392                         goto done;
6393         }
6394
6395         /* Find CIG with all CIS ready */
6396         list_for_each_entry_rcu(conn, &hdev->conn_hash.list, list) {
6397                 struct hci_conn *link;
6398
6399                 if (hci_conn_check_create_cis(conn))
6400                         continue;
6401
6402                 cig = conn->iso_qos.ucast.cig;
6403
6404                 list_for_each_entry_rcu(link, &hdev->conn_hash.list, list) {
6405                         if (hci_conn_check_create_cis(link) > 0 &&
6406                             link->iso_qos.ucast.cig == cig &&
6407                             link->state != BT_CONNECTED) {
6408                                 cig = BT_ISO_QOS_CIG_UNSET;
6409                                 break;
6410                         }
6411                 }
6412
6413                 if (cig != BT_ISO_QOS_CIG_UNSET)
6414                         break;
6415         }
6416
6417         if (cig == BT_ISO_QOS_CIG_UNSET)
6418                 goto done;
6419
6420         list_for_each_entry_rcu(conn, &hdev->conn_hash.list, list) {
6421                 struct hci_cis *cis = &cmd.cis[cmd.cp.num_cis];
6422
6423                 if (hci_conn_check_create_cis(conn) ||
6424                     conn->iso_qos.ucast.cig != cig)
6425                         continue;
6426
6427                 set_bit(HCI_CONN_CREATE_CIS, &conn->flags);
6428                 cis->acl_handle = cpu_to_le16(conn->parent->handle);
6429                 cis->cis_handle = cpu_to_le16(conn->handle);
6430                 cmd.cp.num_cis++;
6431
6432                 if (cmd.cp.num_cis >= ARRAY_SIZE(cmd.cis))
6433                         break;
6434         }
6435
6436 done:
6437         rcu_read_unlock();
6438
6439         hci_dev_unlock(hdev);
6440
6441         if (!cmd.cp.num_cis)
6442                 return 0;
6443
6444         /* Wait for HCI_LE_CIS_Established */
6445         return __hci_cmd_sync_status_sk(hdev, HCI_OP_LE_CREATE_CIS,
6446                                         sizeof(cmd.cp) + sizeof(cmd.cis[0]) *
6447                                         cmd.cp.num_cis, &cmd,
6448                                         HCI_EVT_LE_CIS_ESTABLISHED,
6449                                         conn->conn_timeout, NULL);
6450 }
6451
6452 int hci_le_remove_cig_sync(struct hci_dev *hdev, u8 handle)
6453 {
6454         struct hci_cp_le_remove_cig cp;
6455
6456         memset(&cp, 0, sizeof(cp));
6457         cp.cig_id = handle;
6458
6459         return __hci_cmd_sync_status(hdev, HCI_OP_LE_REMOVE_CIG, sizeof(cp),
6460                                      &cp, HCI_CMD_TIMEOUT);
6461 }
6462
6463 int hci_le_big_terminate_sync(struct hci_dev *hdev, u8 handle)
6464 {
6465         struct hci_cp_le_big_term_sync cp;
6466
6467         memset(&cp, 0, sizeof(cp));
6468         cp.handle = handle;
6469
6470         return __hci_cmd_sync_status(hdev, HCI_OP_LE_BIG_TERM_SYNC,
6471                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
6472 }
6473
6474 int hci_le_pa_terminate_sync(struct hci_dev *hdev, u16 handle)
6475 {
6476         struct hci_cp_le_pa_term_sync cp;
6477
6478         memset(&cp, 0, sizeof(cp));
6479         cp.handle = cpu_to_le16(handle);
6480
6481         return __hci_cmd_sync_status(hdev, HCI_OP_LE_PA_TERM_SYNC,
6482                                      sizeof(cp), &cp, HCI_CMD_TIMEOUT);
6483 }
6484
6485 int hci_get_random_address(struct hci_dev *hdev, bool require_privacy,
6486                            bool use_rpa, struct adv_info *adv_instance,
6487                            u8 *own_addr_type, bdaddr_t *rand_addr)
6488 {
6489         int err;
6490
6491         bacpy(rand_addr, BDADDR_ANY);
6492
6493         /* If privacy is enabled use a resolvable private address. If
6494          * current RPA has expired then generate a new one.
6495          */
6496         if (use_rpa) {
6497                 /* If Controller supports LL Privacy use own address type is
6498                  * 0x03
6499                  */
6500                 if (use_ll_privacy(hdev))
6501                         *own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED;
6502                 else
6503                         *own_addr_type = ADDR_LE_DEV_RANDOM;
6504
6505                 if (adv_instance) {
6506                         if (adv_rpa_valid(adv_instance))
6507                                 return 0;
6508                 } else {
6509                         if (rpa_valid(hdev))
6510                                 return 0;
6511                 }
6512
6513                 err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa);
6514                 if (err < 0) {
6515                         bt_dev_err(hdev, "failed to generate new RPA");
6516                         return err;
6517                 }
6518
6519                 bacpy(rand_addr, &hdev->rpa);
6520
6521                 return 0;
6522         }
6523
6524         /* In case of required privacy without resolvable private address,
6525          * use an non-resolvable private address. This is useful for
6526          * non-connectable advertising.
6527          */
6528         if (require_privacy) {
6529                 bdaddr_t nrpa;
6530
6531                 while (true) {
6532                         /* The non-resolvable private address is generated
6533                          * from random six bytes with the two most significant
6534                          * bits cleared.
6535                          */
6536                         get_random_bytes(&nrpa, 6);
6537                         nrpa.b[5] &= 0x3f;
6538
6539                         /* The non-resolvable private address shall not be
6540                          * equal to the public address.
6541                          */
6542                         if (bacmp(&hdev->bdaddr, &nrpa))
6543                                 break;
6544                 }
6545
6546                 *own_addr_type = ADDR_LE_DEV_RANDOM;
6547                 bacpy(rand_addr, &nrpa);
6548
6549                 return 0;
6550         }
6551
6552         /* No privacy so use a public address. */
6553         *own_addr_type = ADDR_LE_DEV_PUBLIC;
6554
6555         return 0;
6556 }
6557
6558 static int _update_adv_data_sync(struct hci_dev *hdev, void *data)
6559 {
6560         u8 instance = PTR_UINT(data);
6561
6562         return hci_update_adv_data_sync(hdev, instance);
6563 }
6564
6565 int hci_update_adv_data(struct hci_dev *hdev, u8 instance)
6566 {
6567         return hci_cmd_sync_queue(hdev, _update_adv_data_sync,
6568                                   UINT_PTR(instance), NULL);
6569 }