7f6a581b5b7e14fa7b72db8449afc85a8d9327e2
[platform/kernel/linux-rpi.git] / net / bluetooth / hci_request.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3
4    Copyright (C) 2014 Intel Corporation
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License version 2 as
8    published by the Free Software Foundation;
9
10    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
19    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21    SOFTWARE IS DISCLAIMED.
22 */
23
24 #include <linux/sched/signal.h>
25
26 #include <net/bluetooth/bluetooth.h>
27 #include <net/bluetooth/hci_core.h>
28 #include <net/bluetooth/mgmt.h>
29
30 #include "smp.h"
31 #include "hci_request.h"
32
33 #define HCI_REQ_DONE      0
34 #define HCI_REQ_PEND      1
35 #define HCI_REQ_CANCELED  2
36
37 void hci_req_init(struct hci_request *req, struct hci_dev *hdev)
38 {
39         skb_queue_head_init(&req->cmd_q);
40         req->hdev = hdev;
41         req->err = 0;
42 }
43
44 void hci_req_purge(struct hci_request *req)
45 {
46         skb_queue_purge(&req->cmd_q);
47 }
48
49 bool hci_req_status_pend(struct hci_dev *hdev)
50 {
51         return hdev->req_status == HCI_REQ_PEND;
52 }
53
54 static int req_run(struct hci_request *req, hci_req_complete_t complete,
55                    hci_req_complete_skb_t complete_skb)
56 {
57         struct hci_dev *hdev = req->hdev;
58         struct sk_buff *skb;
59         unsigned long flags;
60
61         BT_DBG("length %u", skb_queue_len(&req->cmd_q));
62
63         /* If an error occurred during request building, remove all HCI
64          * commands queued on the HCI request queue.
65          */
66         if (req->err) {
67                 skb_queue_purge(&req->cmd_q);
68                 return req->err;
69         }
70
71         /* Do not allow empty requests */
72         if (skb_queue_empty(&req->cmd_q))
73                 return -ENODATA;
74
75         skb = skb_peek_tail(&req->cmd_q);
76         if (complete) {
77                 bt_cb(skb)->hci.req_complete = complete;
78         } else if (complete_skb) {
79                 bt_cb(skb)->hci.req_complete_skb = complete_skb;
80                 bt_cb(skb)->hci.req_flags |= HCI_REQ_SKB;
81         }
82
83         spin_lock_irqsave(&hdev->cmd_q.lock, flags);
84         skb_queue_splice_tail(&req->cmd_q, &hdev->cmd_q);
85         spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
86
87         queue_work(hdev->workqueue, &hdev->cmd_work);
88
89         return 0;
90 }
91
92 int hci_req_run(struct hci_request *req, hci_req_complete_t complete)
93 {
94         return req_run(req, complete, NULL);
95 }
96
97 int hci_req_run_skb(struct hci_request *req, hci_req_complete_skb_t complete)
98 {
99         return req_run(req, NULL, complete);
100 }
101
102 static void hci_req_sync_complete(struct hci_dev *hdev, u8 result, u16 opcode,
103                                   struct sk_buff *skb)
104 {
105         BT_DBG("%s result 0x%2.2x", hdev->name, result);
106
107         if (hdev->req_status == HCI_REQ_PEND) {
108                 hdev->req_result = result;
109                 hdev->req_status = HCI_REQ_DONE;
110                 if (skb)
111                         hdev->req_skb = skb_get(skb);
112                 wake_up_interruptible(&hdev->req_wait_q);
113         }
114 }
115
116 void hci_req_sync_cancel(struct hci_dev *hdev, int err)
117 {
118         BT_DBG("%s err 0x%2.2x", hdev->name, err);
119
120         if (hdev->req_status == HCI_REQ_PEND) {
121                 hdev->req_result = err;
122                 hdev->req_status = HCI_REQ_CANCELED;
123                 wake_up_interruptible(&hdev->req_wait_q);
124         }
125 }
126
127 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
128                                   const void *param, u8 event, u32 timeout)
129 {
130         struct hci_request req;
131         struct sk_buff *skb;
132         int err = 0;
133
134         BT_DBG("%s", hdev->name);
135
136         hci_req_init(&req, hdev);
137
138         hci_req_add_ev(&req, opcode, plen, param, event);
139
140         hdev->req_status = HCI_REQ_PEND;
141
142         err = hci_req_run_skb(&req, hci_req_sync_complete);
143         if (err < 0)
144                 return ERR_PTR(err);
145
146         err = wait_event_interruptible_timeout(hdev->req_wait_q,
147                         hdev->req_status != HCI_REQ_PEND, timeout);
148
149         if (err == -ERESTARTSYS)
150                 return ERR_PTR(-EINTR);
151
152         switch (hdev->req_status) {
153         case HCI_REQ_DONE:
154                 err = -bt_to_errno(hdev->req_result);
155                 break;
156
157         case HCI_REQ_CANCELED:
158                 err = -hdev->req_result;
159                 break;
160
161         default:
162                 err = -ETIMEDOUT;
163                 break;
164         }
165
166         hdev->req_status = hdev->req_result = 0;
167         skb = hdev->req_skb;
168         hdev->req_skb = NULL;
169
170         BT_DBG("%s end: err %d", hdev->name, err);
171
172         if (err < 0) {
173                 kfree_skb(skb);
174                 return ERR_PTR(err);
175         }
176
177         if (!skb)
178                 return ERR_PTR(-ENODATA);
179
180         return skb;
181 }
182 EXPORT_SYMBOL(__hci_cmd_sync_ev);
183
184 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
185                                const void *param, u32 timeout)
186 {
187         return __hci_cmd_sync_ev(hdev, opcode, plen, param, 0, timeout);
188 }
189 EXPORT_SYMBOL(__hci_cmd_sync);
190
191 /* Execute request and wait for completion. */
192 int __hci_req_sync(struct hci_dev *hdev, int (*func)(struct hci_request *req,
193                                                      unsigned long opt),
194                    unsigned long opt, u32 timeout, u8 *hci_status)
195 {
196         struct hci_request req;
197         int err = 0;
198
199         BT_DBG("%s start", hdev->name);
200
201         hci_req_init(&req, hdev);
202
203         hdev->req_status = HCI_REQ_PEND;
204
205         err = func(&req, opt);
206         if (err) {
207                 if (hci_status)
208                         *hci_status = HCI_ERROR_UNSPECIFIED;
209                 return err;
210         }
211
212         err = hci_req_run_skb(&req, hci_req_sync_complete);
213         if (err < 0) {
214                 hdev->req_status = 0;
215
216                 /* ENODATA means the HCI request command queue is empty.
217                  * This can happen when a request with conditionals doesn't
218                  * trigger any commands to be sent. This is normal behavior
219                  * and should not trigger an error return.
220                  */
221                 if (err == -ENODATA) {
222                         if (hci_status)
223                                 *hci_status = 0;
224                         return 0;
225                 }
226
227                 if (hci_status)
228                         *hci_status = HCI_ERROR_UNSPECIFIED;
229
230                 return err;
231         }
232
233         err = wait_event_interruptible_timeout(hdev->req_wait_q,
234                         hdev->req_status != HCI_REQ_PEND, timeout);
235
236         if (err == -ERESTARTSYS)
237                 return -EINTR;
238
239         switch (hdev->req_status) {
240         case HCI_REQ_DONE:
241                 err = -bt_to_errno(hdev->req_result);
242                 if (hci_status)
243                         *hci_status = hdev->req_result;
244                 break;
245
246         case HCI_REQ_CANCELED:
247                 err = -hdev->req_result;
248                 if (hci_status)
249                         *hci_status = HCI_ERROR_UNSPECIFIED;
250                 break;
251
252         default:
253                 err = -ETIMEDOUT;
254                 if (hci_status)
255                         *hci_status = HCI_ERROR_UNSPECIFIED;
256                 break;
257         }
258
259         kfree_skb(hdev->req_skb);
260         hdev->req_skb = NULL;
261         hdev->req_status = hdev->req_result = 0;
262
263         BT_DBG("%s end: err %d", hdev->name, err);
264
265         return err;
266 }
267
268 int hci_req_sync(struct hci_dev *hdev, int (*req)(struct hci_request *req,
269                                                   unsigned long opt),
270                  unsigned long opt, u32 timeout, u8 *hci_status)
271 {
272         int ret;
273
274         if (!test_bit(HCI_UP, &hdev->flags))
275                 return -ENETDOWN;
276
277         /* Serialize all requests */
278         hci_req_sync_lock(hdev);
279         ret = __hci_req_sync(hdev, req, opt, timeout, hci_status);
280         hci_req_sync_unlock(hdev);
281
282         return ret;
283 }
284
285 struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode, u32 plen,
286                                 const void *param)
287 {
288         int len = HCI_COMMAND_HDR_SIZE + plen;
289         struct hci_command_hdr *hdr;
290         struct sk_buff *skb;
291
292         skb = bt_skb_alloc(len, GFP_ATOMIC);
293         if (!skb)
294                 return NULL;
295
296         hdr = skb_put(skb, HCI_COMMAND_HDR_SIZE);
297         hdr->opcode = cpu_to_le16(opcode);
298         hdr->plen   = plen;
299
300         if (plen)
301                 skb_put_data(skb, param, plen);
302
303         BT_DBG("skb len %d", skb->len);
304
305         hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
306         hci_skb_opcode(skb) = opcode;
307
308         return skb;
309 }
310
311 /* Queue a command to an asynchronous HCI request */
312 void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
313                     const void *param, u8 event)
314 {
315         struct hci_dev *hdev = req->hdev;
316         struct sk_buff *skb;
317
318         BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
319
320         /* If an error occurred during request building, there is no point in
321          * queueing the HCI command. We can simply return.
322          */
323         if (req->err)
324                 return;
325
326         skb = hci_prepare_cmd(hdev, opcode, plen, param);
327         if (!skb) {
328                 bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)",
329                            opcode);
330                 req->err = -ENOMEM;
331                 return;
332         }
333
334         if (skb_queue_empty(&req->cmd_q))
335                 bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
336
337         bt_cb(skb)->hci.req_event = event;
338
339         skb_queue_tail(&req->cmd_q, skb);
340 }
341
342 void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
343                  const void *param)
344 {
345         hci_req_add_ev(req, opcode, plen, param, 0);
346 }
347
348 void __hci_req_write_fast_connectable(struct hci_request *req, bool enable)
349 {
350         struct hci_dev *hdev = req->hdev;
351         struct hci_cp_write_page_scan_activity acp;
352         u8 type;
353
354         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
355                 return;
356
357         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
358                 return;
359
360         if (enable) {
361                 type = PAGE_SCAN_TYPE_INTERLACED;
362
363                 /* 160 msec page scan interval */
364                 acp.interval = cpu_to_le16(0x0100);
365         } else {
366                 type = PAGE_SCAN_TYPE_STANDARD; /* default */
367
368                 /* default 1.28 sec page scan */
369                 acp.interval = cpu_to_le16(0x0800);
370         }
371
372         acp.window = cpu_to_le16(0x0012);
373
374         if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
375             __cpu_to_le16(hdev->page_scan_window) != acp.window)
376                 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
377                             sizeof(acp), &acp);
378
379         if (hdev->page_scan_type != type)
380                 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
381 }
382
383 /* This function controls the background scanning based on hdev->pend_le_conns
384  * list. If there are pending LE connection we start the background scanning,
385  * otherwise we stop it.
386  *
387  * This function requires the caller holds hdev->lock.
388  */
389 static void __hci_update_background_scan(struct hci_request *req)
390 {
391         struct hci_dev *hdev = req->hdev;
392
393         if (!test_bit(HCI_UP, &hdev->flags) ||
394             test_bit(HCI_INIT, &hdev->flags) ||
395             hci_dev_test_flag(hdev, HCI_SETUP) ||
396             hci_dev_test_flag(hdev, HCI_CONFIG) ||
397             hci_dev_test_flag(hdev, HCI_AUTO_OFF) ||
398             hci_dev_test_flag(hdev, HCI_UNREGISTER))
399                 return;
400
401         /* No point in doing scanning if LE support hasn't been enabled */
402         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
403                 return;
404
405         /* If discovery is active don't interfere with it */
406         if (hdev->discovery.state != DISCOVERY_STOPPED)
407                 return;
408
409         /* Reset RSSI and UUID filters when starting background scanning
410          * since these filters are meant for service discovery only.
411          *
412          * The Start Discovery and Start Service Discovery operations
413          * ensure to set proper values for RSSI threshold and UUID
414          * filter list. So it is safe to just reset them here.
415          */
416         hci_discovery_filter_clear(hdev);
417
418         if (list_empty(&hdev->pend_le_conns) &&
419             list_empty(&hdev->pend_le_reports)) {
420                 /* If there is no pending LE connections or devices
421                  * to be scanned for, we should stop the background
422                  * scanning.
423                  */
424
425                 /* If controller is not scanning we are done. */
426                 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
427                         return;
428
429                 hci_req_add_le_scan_disable(req);
430
431                 BT_DBG("%s stopping background scanning", hdev->name);
432         } else {
433                 /* If there is at least one pending LE connection, we should
434                  * keep the background scan running.
435                  */
436
437                 /* If controller is connecting, we should not start scanning
438                  * since some controllers are not able to scan and connect at
439                  * the same time.
440                  */
441                 if (hci_lookup_le_connect(hdev))
442                         return;
443
444                 /* If controller is currently scanning, we stop it to ensure we
445                  * don't miss any advertising (due to duplicates filter).
446                  */
447                 if (hci_dev_test_flag(hdev, HCI_LE_SCAN))
448                         hci_req_add_le_scan_disable(req);
449
450                 hci_req_add_le_passive_scan(req);
451
452                 BT_DBG("%s starting background scanning", hdev->name);
453         }
454 }
455
456 void __hci_req_update_name(struct hci_request *req)
457 {
458         struct hci_dev *hdev = req->hdev;
459         struct hci_cp_write_local_name cp;
460
461         memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
462
463         hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
464 }
465
466 #define PNP_INFO_SVCLASS_ID             0x1200
467
468 static u8 *create_uuid16_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
469 {
470         u8 *ptr = data, *uuids_start = NULL;
471         struct bt_uuid *uuid;
472
473         if (len < 4)
474                 return ptr;
475
476         list_for_each_entry(uuid, &hdev->uuids, list) {
477                 u16 uuid16;
478
479                 if (uuid->size != 16)
480                         continue;
481
482                 uuid16 = get_unaligned_le16(&uuid->uuid[12]);
483                 if (uuid16 < 0x1100)
484                         continue;
485
486                 if (uuid16 == PNP_INFO_SVCLASS_ID)
487                         continue;
488
489                 if (!uuids_start) {
490                         uuids_start = ptr;
491                         uuids_start[0] = 1;
492                         uuids_start[1] = EIR_UUID16_ALL;
493                         ptr += 2;
494                 }
495
496                 /* Stop if not enough space to put next UUID */
497                 if ((ptr - data) + sizeof(u16) > len) {
498                         uuids_start[1] = EIR_UUID16_SOME;
499                         break;
500                 }
501
502                 *ptr++ = (uuid16 & 0x00ff);
503                 *ptr++ = (uuid16 & 0xff00) >> 8;
504                 uuids_start[0] += sizeof(uuid16);
505         }
506
507         return ptr;
508 }
509
510 static u8 *create_uuid32_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
511 {
512         u8 *ptr = data, *uuids_start = NULL;
513         struct bt_uuid *uuid;
514
515         if (len < 6)
516                 return ptr;
517
518         list_for_each_entry(uuid, &hdev->uuids, list) {
519                 if (uuid->size != 32)
520                         continue;
521
522                 if (!uuids_start) {
523                         uuids_start = ptr;
524                         uuids_start[0] = 1;
525                         uuids_start[1] = EIR_UUID32_ALL;
526                         ptr += 2;
527                 }
528
529                 /* Stop if not enough space to put next UUID */
530                 if ((ptr - data) + sizeof(u32) > len) {
531                         uuids_start[1] = EIR_UUID32_SOME;
532                         break;
533                 }
534
535                 memcpy(ptr, &uuid->uuid[12], sizeof(u32));
536                 ptr += sizeof(u32);
537                 uuids_start[0] += sizeof(u32);
538         }
539
540         return ptr;
541 }
542
543 static u8 *create_uuid128_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
544 {
545         u8 *ptr = data, *uuids_start = NULL;
546         struct bt_uuid *uuid;
547
548         if (len < 18)
549                 return ptr;
550
551         list_for_each_entry(uuid, &hdev->uuids, list) {
552                 if (uuid->size != 128)
553                         continue;
554
555                 if (!uuids_start) {
556                         uuids_start = ptr;
557                         uuids_start[0] = 1;
558                         uuids_start[1] = EIR_UUID128_ALL;
559                         ptr += 2;
560                 }
561
562                 /* Stop if not enough space to put next UUID */
563                 if ((ptr - data) + 16 > len) {
564                         uuids_start[1] = EIR_UUID128_SOME;
565                         break;
566                 }
567
568                 memcpy(ptr, uuid->uuid, 16);
569                 ptr += 16;
570                 uuids_start[0] += 16;
571         }
572
573         return ptr;
574 }
575
576 static void create_eir(struct hci_dev *hdev, u8 *data)
577 {
578         u8 *ptr = data;
579         size_t name_len;
580
581         name_len = strlen(hdev->dev_name);
582
583         if (name_len > 0) {
584                 /* EIR Data type */
585                 if (name_len > 48) {
586                         name_len = 48;
587                         ptr[1] = EIR_NAME_SHORT;
588                 } else
589                         ptr[1] = EIR_NAME_COMPLETE;
590
591                 /* EIR Data length */
592                 ptr[0] = name_len + 1;
593
594                 memcpy(ptr + 2, hdev->dev_name, name_len);
595
596                 ptr += (name_len + 2);
597         }
598
599         if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
600                 ptr[0] = 2;
601                 ptr[1] = EIR_TX_POWER;
602                 ptr[2] = (u8) hdev->inq_tx_power;
603
604                 ptr += 3;
605         }
606
607         if (hdev->devid_source > 0) {
608                 ptr[0] = 9;
609                 ptr[1] = EIR_DEVICE_ID;
610
611                 put_unaligned_le16(hdev->devid_source, ptr + 2);
612                 put_unaligned_le16(hdev->devid_vendor, ptr + 4);
613                 put_unaligned_le16(hdev->devid_product, ptr + 6);
614                 put_unaligned_le16(hdev->devid_version, ptr + 8);
615
616                 ptr += 10;
617         }
618
619         ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
620         ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
621         ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
622 }
623
624 void __hci_req_update_eir(struct hci_request *req)
625 {
626         struct hci_dev *hdev = req->hdev;
627         struct hci_cp_write_eir cp;
628
629         if (!hdev_is_powered(hdev))
630                 return;
631
632         if (!lmp_ext_inq_capable(hdev))
633                 return;
634
635         if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
636                 return;
637
638         if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE))
639                 return;
640
641         memset(&cp, 0, sizeof(cp));
642
643         create_eir(hdev, cp.data);
644
645         if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
646                 return;
647
648         memcpy(hdev->eir, cp.data, sizeof(cp.data));
649
650         hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
651 }
652
653 void hci_req_add_le_scan_disable(struct hci_request *req)
654 {
655         struct hci_dev *hdev = req->hdev;
656
657         if (use_ext_scan(hdev)) {
658                 struct hci_cp_le_set_ext_scan_enable cp;
659
660                 memset(&cp, 0, sizeof(cp));
661                 cp.enable = LE_SCAN_DISABLE;
662                 hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE, sizeof(cp),
663                             &cp);
664         } else {
665                 struct hci_cp_le_set_scan_enable cp;
666
667                 memset(&cp, 0, sizeof(cp));
668                 cp.enable = LE_SCAN_DISABLE;
669                 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
670         }
671 }
672
673 static void add_to_white_list(struct hci_request *req,
674                               struct hci_conn_params *params)
675 {
676         struct hci_cp_le_add_to_white_list cp;
677
678         cp.bdaddr_type = params->addr_type;
679         bacpy(&cp.bdaddr, &params->addr);
680
681         hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);
682 }
683
684 static u8 update_white_list(struct hci_request *req)
685 {
686         struct hci_dev *hdev = req->hdev;
687         struct hci_conn_params *params;
688         struct bdaddr_list *b;
689         uint8_t white_list_entries = 0;
690
691         /* Go through the current white list programmed into the
692          * controller one by one and check if that address is still
693          * in the list of pending connections or list of devices to
694          * report. If not present in either list, then queue the
695          * command to remove it from the controller.
696          */
697         list_for_each_entry(b, &hdev->le_white_list, list) {
698                 /* If the device is neither in pend_le_conns nor
699                  * pend_le_reports then remove it from the whitelist.
700                  */
701                 if (!hci_pend_le_action_lookup(&hdev->pend_le_conns,
702                                                &b->bdaddr, b->bdaddr_type) &&
703                     !hci_pend_le_action_lookup(&hdev->pend_le_reports,
704                                                &b->bdaddr, b->bdaddr_type)) {
705                         struct hci_cp_le_del_from_white_list cp;
706
707                         cp.bdaddr_type = b->bdaddr_type;
708                         bacpy(&cp.bdaddr, &b->bdaddr);
709
710                         hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST,
711                                     sizeof(cp), &cp);
712                         continue;
713                 }
714
715                 if (hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
716                         /* White list can not be used with RPAs */
717                         return 0x00;
718                 }
719
720                 white_list_entries++;
721         }
722
723         /* Since all no longer valid white list entries have been
724          * removed, walk through the list of pending connections
725          * and ensure that any new device gets programmed into
726          * the controller.
727          *
728          * If the list of the devices is larger than the list of
729          * available white list entries in the controller, then
730          * just abort and return filer policy value to not use the
731          * white list.
732          */
733         list_for_each_entry(params, &hdev->pend_le_conns, action) {
734                 if (hci_bdaddr_list_lookup(&hdev->le_white_list,
735                                            &params->addr, params->addr_type))
736                         continue;
737
738                 if (white_list_entries >= hdev->le_white_list_size) {
739                         /* Select filter policy to accept all advertising */
740                         return 0x00;
741                 }
742
743                 if (hci_find_irk_by_addr(hdev, &params->addr,
744                                          params->addr_type)) {
745                         /* White list can not be used with RPAs */
746                         return 0x00;
747                 }
748
749                 white_list_entries++;
750                 add_to_white_list(req, params);
751         }
752
753         /* After adding all new pending connections, walk through
754          * the list of pending reports and also add these to the
755          * white list if there is still space.
756          */
757         list_for_each_entry(params, &hdev->pend_le_reports, action) {
758                 if (hci_bdaddr_list_lookup(&hdev->le_white_list,
759                                            &params->addr, params->addr_type))
760                         continue;
761
762                 if (white_list_entries >= hdev->le_white_list_size) {
763                         /* Select filter policy to accept all advertising */
764                         return 0x00;
765                 }
766
767                 if (hci_find_irk_by_addr(hdev, &params->addr,
768                                          params->addr_type)) {
769                         /* White list can not be used with RPAs */
770                         return 0x00;
771                 }
772
773                 white_list_entries++;
774                 add_to_white_list(req, params);
775         }
776
777         /* Select filter policy to use white list */
778         return 0x01;
779 }
780
781 static bool scan_use_rpa(struct hci_dev *hdev)
782 {
783         return hci_dev_test_flag(hdev, HCI_PRIVACY);
784 }
785
786 static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval,
787                                u16 window, u8 own_addr_type, u8 filter_policy)
788 {
789         struct hci_dev *hdev = req->hdev;
790
791         /* Use ext scanning if set ext scan param and ext scan enable is
792          * supported
793          */
794         if (use_ext_scan(hdev)) {
795                 struct hci_cp_le_set_ext_scan_params *ext_param_cp;
796                 struct hci_cp_le_set_ext_scan_enable ext_enable_cp;
797                 struct hci_cp_le_scan_phy_params *phy_params;
798                 u8 data[sizeof(*ext_param_cp) + sizeof(*phy_params) * 2];
799                 u32 plen;
800
801                 ext_param_cp = (void *)data;
802                 phy_params = (void *)ext_param_cp->data;
803
804                 memset(ext_param_cp, 0, sizeof(*ext_param_cp));
805                 ext_param_cp->own_addr_type = own_addr_type;
806                 ext_param_cp->filter_policy = filter_policy;
807
808                 plen = sizeof(*ext_param_cp);
809
810                 if (scan_1m(hdev) || scan_2m(hdev)) {
811                         ext_param_cp->scanning_phys |= LE_SCAN_PHY_1M;
812
813                         memset(phy_params, 0, sizeof(*phy_params));
814                         phy_params->type = type;
815                         phy_params->interval = cpu_to_le16(interval);
816                         phy_params->window = cpu_to_le16(window);
817
818                         plen += sizeof(*phy_params);
819                         phy_params++;
820                 }
821
822                 if (scan_coded(hdev)) {
823                         ext_param_cp->scanning_phys |= LE_SCAN_PHY_CODED;
824
825                         memset(phy_params, 0, sizeof(*phy_params));
826                         phy_params->type = type;
827                         phy_params->interval = cpu_to_le16(interval);
828                         phy_params->window = cpu_to_le16(window);
829
830                         plen += sizeof(*phy_params);
831                         phy_params++;
832                 }
833
834                 hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_PARAMS,
835                             plen, ext_param_cp);
836
837                 memset(&ext_enable_cp, 0, sizeof(ext_enable_cp));
838                 ext_enable_cp.enable = LE_SCAN_ENABLE;
839                 ext_enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
840
841                 hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE,
842                             sizeof(ext_enable_cp), &ext_enable_cp);
843         } else {
844                 struct hci_cp_le_set_scan_param param_cp;
845                 struct hci_cp_le_set_scan_enable enable_cp;
846
847                 memset(&param_cp, 0, sizeof(param_cp));
848                 param_cp.type = type;
849                 param_cp.interval = cpu_to_le16(interval);
850                 param_cp.window = cpu_to_le16(window);
851                 param_cp.own_address_type = own_addr_type;
852                 param_cp.filter_policy = filter_policy;
853                 hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
854                             &param_cp);
855
856                 memset(&enable_cp, 0, sizeof(enable_cp));
857                 enable_cp.enable = LE_SCAN_ENABLE;
858                 enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
859                 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
860                             &enable_cp);
861         }
862 }
863
864 void hci_req_add_le_passive_scan(struct hci_request *req)
865 {
866         struct hci_dev *hdev = req->hdev;
867         u8 own_addr_type;
868         u8 filter_policy;
869
870         /* Set require_privacy to false since no SCAN_REQ are send
871          * during passive scanning. Not using an non-resolvable address
872          * here is important so that peer devices using direct
873          * advertising with our address will be correctly reported
874          * by the controller.
875          */
876         if (hci_update_random_address(req, false, scan_use_rpa(hdev),
877                                       &own_addr_type))
878                 return;
879
880         /* Adding or removing entries from the white list must
881          * happen before enabling scanning. The controller does
882          * not allow white list modification while scanning.
883          */
884         filter_policy = update_white_list(req);
885
886         /* When the controller is using random resolvable addresses and
887          * with that having LE privacy enabled, then controllers with
888          * Extended Scanner Filter Policies support can now enable support
889          * for handling directed advertising.
890          *
891          * So instead of using filter polices 0x00 (no whitelist)
892          * and 0x01 (whitelist enabled) use the new filter policies
893          * 0x02 (no whitelist) and 0x03 (whitelist enabled).
894          */
895         if (hci_dev_test_flag(hdev, HCI_PRIVACY) &&
896             (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY))
897                 filter_policy |= 0x02;
898
899         hci_req_start_scan(req, LE_SCAN_PASSIVE, hdev->le_scan_interval,
900                            hdev->le_scan_window, own_addr_type, filter_policy);
901 }
902
903 static u8 get_adv_instance_scan_rsp_len(struct hci_dev *hdev, u8 instance)
904 {
905         struct adv_info *adv_instance;
906
907         /* Ignore instance 0 */
908         if (instance == 0x00)
909                 return 0;
910
911         adv_instance = hci_find_adv_instance(hdev, instance);
912         if (!adv_instance)
913                 return 0;
914
915         /* TODO: Take into account the "appearance" and "local-name" flags here.
916          * These are currently being ignored as they are not supported.
917          */
918         return adv_instance->scan_rsp_len;
919 }
920
921 static u8 get_cur_adv_instance_scan_rsp_len(struct hci_dev *hdev)
922 {
923         u8 instance = hdev->cur_adv_instance;
924         struct adv_info *adv_instance;
925
926         /* Ignore instance 0 */
927         if (instance == 0x00)
928                 return 0;
929
930         adv_instance = hci_find_adv_instance(hdev, instance);
931         if (!adv_instance)
932                 return 0;
933
934         /* TODO: Take into account the "appearance" and "local-name" flags here.
935          * These are currently being ignored as they are not supported.
936          */
937         return adv_instance->scan_rsp_len;
938 }
939
940 void __hci_req_disable_advertising(struct hci_request *req)
941 {
942         if (ext_adv_capable(req->hdev)) {
943                 struct hci_cp_le_set_ext_adv_enable cp;
944
945                 cp.enable = 0x00;
946                 /* Disable all sets since we only support one set at the moment */
947                 cp.num_of_sets = 0x00;
948
949                 hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp), &cp);
950         } else {
951                 u8 enable = 0x00;
952
953                 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
954         }
955 }
956
957 static u32 get_adv_instance_flags(struct hci_dev *hdev, u8 instance)
958 {
959         u32 flags;
960         struct adv_info *adv_instance;
961
962         if (instance == 0x00) {
963                 /* Instance 0 always manages the "Tx Power" and "Flags"
964                  * fields
965                  */
966                 flags = MGMT_ADV_FLAG_TX_POWER | MGMT_ADV_FLAG_MANAGED_FLAGS;
967
968                 /* For instance 0, the HCI_ADVERTISING_CONNECTABLE setting
969                  * corresponds to the "connectable" instance flag.
970                  */
971                 if (hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE))
972                         flags |= MGMT_ADV_FLAG_CONNECTABLE;
973
974                 if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
975                         flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
976                 else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
977                         flags |= MGMT_ADV_FLAG_DISCOV;
978
979                 return flags;
980         }
981
982         adv_instance = hci_find_adv_instance(hdev, instance);
983
984         /* Return 0 when we got an invalid instance identifier. */
985         if (!adv_instance)
986                 return 0;
987
988         return adv_instance->flags;
989 }
990
991 static bool adv_use_rpa(struct hci_dev *hdev, uint32_t flags)
992 {
993         /* If privacy is not enabled don't use RPA */
994         if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
995                 return false;
996
997         /* If basic privacy mode is enabled use RPA */
998         if (!hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY))
999                 return true;
1000
1001         /* If limited privacy mode is enabled don't use RPA if we're
1002          * both discoverable and bondable.
1003          */
1004         if ((flags & MGMT_ADV_FLAG_DISCOV) &&
1005             hci_dev_test_flag(hdev, HCI_BONDABLE))
1006                 return false;
1007
1008         /* We're neither bondable nor discoverable in the limited
1009          * privacy mode, therefore use RPA.
1010          */
1011         return true;
1012 }
1013
1014 static bool is_advertising_allowed(struct hci_dev *hdev, bool connectable)
1015 {
1016         /* If there is no connection we are OK to advertise. */
1017         if (hci_conn_num(hdev, LE_LINK) == 0)
1018                 return true;
1019
1020         /* Check le_states if there is any connection in slave role. */
1021         if (hdev->conn_hash.le_num_slave > 0) {
1022                 /* Slave connection state and non connectable mode bit 20. */
1023                 if (!connectable && !(hdev->le_states[2] & 0x10))
1024                         return false;
1025
1026                 /* Slave connection state and connectable mode bit 38
1027                  * and scannable bit 21.
1028                  */
1029                 if (connectable && (!(hdev->le_states[4] & 0x40) ||
1030                                     !(hdev->le_states[2] & 0x20)))
1031                         return false;
1032         }
1033
1034         /* Check le_states if there is any connection in master role. */
1035         if (hci_conn_num(hdev, LE_LINK) != hdev->conn_hash.le_num_slave) {
1036                 /* Master connection state and non connectable mode bit 18. */
1037                 if (!connectable && !(hdev->le_states[2] & 0x02))
1038                         return false;
1039
1040                 /* Master connection state and connectable mode bit 35 and
1041                  * scannable 19.
1042                  */
1043                 if (connectable && (!(hdev->le_states[4] & 0x08) ||
1044                                     !(hdev->le_states[2] & 0x08)))
1045                         return false;
1046         }
1047
1048         return true;
1049 }
1050
1051 void __hci_req_enable_advertising(struct hci_request *req)
1052 {
1053         struct hci_dev *hdev = req->hdev;
1054         struct hci_cp_le_set_adv_param cp;
1055         u8 own_addr_type, enable = 0x01;
1056         bool connectable;
1057         u16 adv_min_interval, adv_max_interval;
1058         u32 flags;
1059
1060         flags = get_adv_instance_flags(hdev, hdev->cur_adv_instance);
1061
1062         /* If the "connectable" instance flag was not set, then choose between
1063          * ADV_IND and ADV_NONCONN_IND based on the global connectable setting.
1064          */
1065         connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) ||
1066                       mgmt_get_connectable(hdev);
1067
1068         if (!is_advertising_allowed(hdev, connectable))
1069                 return;
1070
1071         if (hci_dev_test_flag(hdev, HCI_LE_ADV))
1072                 __hci_req_disable_advertising(req);
1073
1074         /* Clear the HCI_LE_ADV bit temporarily so that the
1075          * hci_update_random_address knows that it's safe to go ahead
1076          * and write a new random address. The flag will be set back on
1077          * as soon as the SET_ADV_ENABLE HCI command completes.
1078          */
1079         hci_dev_clear_flag(hdev, HCI_LE_ADV);
1080
1081         /* Set require_privacy to true only when non-connectable
1082          * advertising is used. In that case it is fine to use a
1083          * non-resolvable private address.
1084          */
1085         if (hci_update_random_address(req, !connectable,
1086                                       adv_use_rpa(hdev, flags),
1087                                       &own_addr_type) < 0)
1088                 return;
1089
1090         memset(&cp, 0, sizeof(cp));
1091
1092         if (connectable) {
1093                 cp.type = LE_ADV_IND;
1094
1095                 adv_min_interval = hdev->le_adv_min_interval;
1096                 adv_max_interval = hdev->le_adv_max_interval;
1097         } else {
1098                 if (get_cur_adv_instance_scan_rsp_len(hdev))
1099                         cp.type = LE_ADV_SCAN_IND;
1100                 else
1101                         cp.type = LE_ADV_NONCONN_IND;
1102
1103                 if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE) ||
1104                     hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) {
1105                         adv_min_interval = DISCOV_LE_FAST_ADV_INT_MIN;
1106                         adv_max_interval = DISCOV_LE_FAST_ADV_INT_MAX;
1107                 } else {
1108                         adv_min_interval = hdev->le_adv_min_interval;
1109                         adv_max_interval = hdev->le_adv_max_interval;
1110                 }
1111         }
1112
1113         cp.min_interval = cpu_to_le16(adv_min_interval);
1114         cp.max_interval = cpu_to_le16(adv_max_interval);
1115         cp.own_address_type = own_addr_type;
1116         cp.channel_map = hdev->le_adv_channel_map;
1117
1118         hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
1119
1120         hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1121 }
1122
1123 u8 append_local_name(struct hci_dev *hdev, u8 *ptr, u8 ad_len)
1124 {
1125         size_t short_len;
1126         size_t complete_len;
1127
1128         /* no space left for name (+ NULL + type + len) */
1129         if ((HCI_MAX_AD_LENGTH - ad_len) < HCI_MAX_SHORT_NAME_LENGTH + 3)
1130                 return ad_len;
1131
1132         /* use complete name if present and fits */
1133         complete_len = strlen(hdev->dev_name);
1134         if (complete_len && complete_len <= HCI_MAX_SHORT_NAME_LENGTH)
1135                 return eir_append_data(ptr, ad_len, EIR_NAME_COMPLETE,
1136                                        hdev->dev_name, complete_len + 1);
1137
1138         /* use short name if present */
1139         short_len = strlen(hdev->short_name);
1140         if (short_len)
1141                 return eir_append_data(ptr, ad_len, EIR_NAME_SHORT,
1142                                        hdev->short_name, short_len + 1);
1143
1144         /* use shortened full name if present, we already know that name
1145          * is longer then HCI_MAX_SHORT_NAME_LENGTH
1146          */
1147         if (complete_len) {
1148                 u8 name[HCI_MAX_SHORT_NAME_LENGTH + 1];
1149
1150                 memcpy(name, hdev->dev_name, HCI_MAX_SHORT_NAME_LENGTH);
1151                 name[HCI_MAX_SHORT_NAME_LENGTH] = '\0';
1152
1153                 return eir_append_data(ptr, ad_len, EIR_NAME_SHORT, name,
1154                                        sizeof(name));
1155         }
1156
1157         return ad_len;
1158 }
1159
1160 static u8 append_appearance(struct hci_dev *hdev, u8 *ptr, u8 ad_len)
1161 {
1162         return eir_append_le16(ptr, ad_len, EIR_APPEARANCE, hdev->appearance);
1163 }
1164
1165 static u8 create_default_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
1166 {
1167         u8 scan_rsp_len = 0;
1168
1169         if (hdev->appearance) {
1170                 scan_rsp_len = append_appearance(hdev, ptr, scan_rsp_len);
1171         }
1172
1173         return append_local_name(hdev, ptr, scan_rsp_len);
1174 }
1175
1176 static u8 create_instance_scan_rsp_data(struct hci_dev *hdev, u8 instance,
1177                                         u8 *ptr)
1178 {
1179         struct adv_info *adv_instance;
1180         u32 instance_flags;
1181         u8 scan_rsp_len = 0;
1182
1183         adv_instance = hci_find_adv_instance(hdev, instance);
1184         if (!adv_instance)
1185                 return 0;
1186
1187         instance_flags = adv_instance->flags;
1188
1189         if ((instance_flags & MGMT_ADV_FLAG_APPEARANCE) && hdev->appearance) {
1190                 scan_rsp_len = append_appearance(hdev, ptr, scan_rsp_len);
1191         }
1192
1193         memcpy(&ptr[scan_rsp_len], adv_instance->scan_rsp_data,
1194                adv_instance->scan_rsp_len);
1195
1196         scan_rsp_len += adv_instance->scan_rsp_len;
1197
1198         if (instance_flags & MGMT_ADV_FLAG_LOCAL_NAME)
1199                 scan_rsp_len = append_local_name(hdev, ptr, scan_rsp_len);
1200
1201         return scan_rsp_len;
1202 }
1203
1204 void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance)
1205 {
1206         struct hci_dev *hdev = req->hdev;
1207         u8 len;
1208
1209         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1210                 return;
1211
1212         if (ext_adv_capable(hdev)) {
1213                 struct hci_cp_le_set_ext_scan_rsp_data cp;
1214
1215                 memset(&cp, 0, sizeof(cp));
1216
1217                 if (instance)
1218                         len = create_instance_scan_rsp_data(hdev, instance,
1219                                                             cp.data);
1220                 else
1221                         len = create_default_scan_rsp_data(hdev, cp.data);
1222
1223                 if (hdev->scan_rsp_data_len == len &&
1224                     !memcmp(cp.data, hdev->scan_rsp_data, len))
1225                         return;
1226
1227                 memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
1228                 hdev->scan_rsp_data_len = len;
1229
1230                 cp.handle = 0;
1231                 cp.length = len;
1232                 cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1233                 cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
1234
1235                 hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_RSP_DATA, sizeof(cp),
1236                             &cp);
1237         } else {
1238                 struct hci_cp_le_set_scan_rsp_data cp;
1239
1240                 memset(&cp, 0, sizeof(cp));
1241
1242                 if (instance)
1243                         len = create_instance_scan_rsp_data(hdev, instance,
1244                                                             cp.data);
1245                 else
1246                         len = create_default_scan_rsp_data(hdev, cp.data);
1247
1248                 if (hdev->scan_rsp_data_len == len &&
1249                     !memcmp(cp.data, hdev->scan_rsp_data, len))
1250                         return;
1251
1252                 memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
1253                 hdev->scan_rsp_data_len = len;
1254
1255                 cp.length = len;
1256
1257                 hci_req_add(req, HCI_OP_LE_SET_SCAN_RSP_DATA, sizeof(cp), &cp);
1258         }
1259 }
1260
1261 static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
1262 {
1263         struct adv_info *adv_instance = NULL;
1264         u8 ad_len = 0, flags = 0;
1265         u32 instance_flags;
1266
1267         /* Return 0 when the current instance identifier is invalid. */
1268         if (instance) {
1269                 adv_instance = hci_find_adv_instance(hdev, instance);
1270                 if (!adv_instance)
1271                         return 0;
1272         }
1273
1274         instance_flags = get_adv_instance_flags(hdev, instance);
1275
1276         /* The Add Advertising command allows userspace to set both the general
1277          * and limited discoverable flags.
1278          */
1279         if (instance_flags & MGMT_ADV_FLAG_DISCOV)
1280                 flags |= LE_AD_GENERAL;
1281
1282         if (instance_flags & MGMT_ADV_FLAG_LIMITED_DISCOV)
1283                 flags |= LE_AD_LIMITED;
1284
1285         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
1286                 flags |= LE_AD_NO_BREDR;
1287
1288         if (flags || (instance_flags & MGMT_ADV_FLAG_MANAGED_FLAGS)) {
1289                 /* If a discovery flag wasn't provided, simply use the global
1290                  * settings.
1291                  */
1292                 if (!flags)
1293                         flags |= mgmt_get_adv_discov_flags(hdev);
1294
1295                 /* If flags would still be empty, then there is no need to
1296                  * include the "Flags" AD field".
1297                  */
1298                 if (flags) {
1299                         ptr[0] = 0x02;
1300                         ptr[1] = EIR_FLAGS;
1301                         ptr[2] = flags;
1302
1303                         ad_len += 3;
1304                         ptr += 3;
1305                 }
1306         }
1307
1308         if (adv_instance) {
1309                 memcpy(ptr, adv_instance->adv_data,
1310                        adv_instance->adv_data_len);
1311                 ad_len += adv_instance->adv_data_len;
1312                 ptr += adv_instance->adv_data_len;
1313         }
1314
1315         if (instance_flags & MGMT_ADV_FLAG_TX_POWER) {
1316                 s8 adv_tx_power;
1317
1318                 if (ext_adv_capable(hdev)) {
1319                         if (adv_instance)
1320                                 adv_tx_power = adv_instance->tx_power;
1321                         else
1322                                 adv_tx_power = hdev->adv_tx_power;
1323                 } else {
1324                         adv_tx_power = hdev->adv_tx_power;
1325                 }
1326
1327                 /* Provide Tx Power only if we can provide a valid value for it */
1328                 if (adv_tx_power != HCI_TX_POWER_INVALID) {
1329                         ptr[0] = 0x02;
1330                         ptr[1] = EIR_TX_POWER;
1331                         ptr[2] = (u8)adv_tx_power;
1332
1333                         ad_len += 3;
1334                         ptr += 3;
1335                 }
1336         }
1337
1338         return ad_len;
1339 }
1340
1341 void __hci_req_update_adv_data(struct hci_request *req, u8 instance)
1342 {
1343         struct hci_dev *hdev = req->hdev;
1344         u8 len;
1345
1346         if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1347                 return;
1348
1349         if (ext_adv_capable(hdev)) {
1350                 struct hci_cp_le_set_ext_adv_data cp;
1351
1352                 memset(&cp, 0, sizeof(cp));
1353
1354                 len = create_instance_adv_data(hdev, instance, cp.data);
1355
1356                 /* There's nothing to do if the data hasn't changed */
1357                 if (hdev->adv_data_len == len &&
1358                     memcmp(cp.data, hdev->adv_data, len) == 0)
1359                         return;
1360
1361                 memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
1362                 hdev->adv_data_len = len;
1363
1364                 cp.length = len;
1365                 cp.handle = 0;
1366                 cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1367                 cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
1368
1369                 hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_DATA, sizeof(cp), &cp);
1370         } else {
1371                 struct hci_cp_le_set_adv_data cp;
1372
1373                 memset(&cp, 0, sizeof(cp));
1374
1375                 len = create_instance_adv_data(hdev, instance, cp.data);
1376
1377                 /* There's nothing to do if the data hasn't changed */
1378                 if (hdev->adv_data_len == len &&
1379                     memcmp(cp.data, hdev->adv_data, len) == 0)
1380                         return;
1381
1382                 memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
1383                 hdev->adv_data_len = len;
1384
1385                 cp.length = len;
1386
1387                 hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp);
1388         }
1389 }
1390
1391 int hci_req_update_adv_data(struct hci_dev *hdev, u8 instance)
1392 {
1393         struct hci_request req;
1394
1395         hci_req_init(&req, hdev);
1396         __hci_req_update_adv_data(&req, instance);
1397
1398         return hci_req_run(&req, NULL);
1399 }
1400
1401 static void adv_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
1402 {
1403         BT_DBG("%s status %u", hdev->name, status);
1404 }
1405
1406 void hci_req_reenable_advertising(struct hci_dev *hdev)
1407 {
1408         struct hci_request req;
1409
1410         if (!hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
1411             list_empty(&hdev->adv_instances))
1412                 return;
1413
1414         hci_req_init(&req, hdev);
1415
1416         if (hdev->cur_adv_instance) {
1417                 __hci_req_schedule_adv_instance(&req, hdev->cur_adv_instance,
1418                                                 true);
1419         } else {
1420                 if (ext_adv_capable(hdev)) {
1421                         __hci_req_start_ext_adv(&req, 0x00);
1422                 } else {
1423                         __hci_req_update_adv_data(&req, 0x00);
1424                         __hci_req_update_scan_rsp_data(&req, 0x00);
1425                         __hci_req_enable_advertising(&req);
1426                 }
1427         }
1428
1429         hci_req_run(&req, adv_enable_complete);
1430 }
1431
1432 static void adv_timeout_expire(struct work_struct *work)
1433 {
1434         struct hci_dev *hdev = container_of(work, struct hci_dev,
1435                                             adv_instance_expire.work);
1436
1437         struct hci_request req;
1438         u8 instance;
1439
1440         BT_DBG("%s", hdev->name);
1441
1442         hci_dev_lock(hdev);
1443
1444         hdev->adv_instance_timeout = 0;
1445
1446         instance = hdev->cur_adv_instance;
1447         if (instance == 0x00)
1448                 goto unlock;
1449
1450         hci_req_init(&req, hdev);
1451
1452         hci_req_clear_adv_instance(hdev, NULL, &req, instance, false);
1453
1454         if (list_empty(&hdev->adv_instances))
1455                 __hci_req_disable_advertising(&req);
1456
1457         hci_req_run(&req, NULL);
1458
1459 unlock:
1460         hci_dev_unlock(hdev);
1461 }
1462
1463 int hci_get_random_address(struct hci_dev *hdev, bool require_privacy,
1464                            bool use_rpa, struct adv_info *adv_instance,
1465                            u8 *own_addr_type, bdaddr_t *rand_addr)
1466 {
1467         int err;
1468
1469         bacpy(rand_addr, BDADDR_ANY);
1470
1471         /* If privacy is enabled use a resolvable private address. If
1472          * current RPA has expired then generate a new one.
1473          */
1474         if (use_rpa) {
1475                 int to;
1476
1477                 *own_addr_type = ADDR_LE_DEV_RANDOM;
1478
1479                 if (adv_instance) {
1480                         if (!adv_instance->rpa_expired &&
1481                             !bacmp(&adv_instance->random_addr, &hdev->rpa))
1482                                 return 0;
1483
1484                         adv_instance->rpa_expired = false;
1485                 } else {
1486                         if (!hci_dev_test_and_clear_flag(hdev, HCI_RPA_EXPIRED) &&
1487                             !bacmp(&hdev->random_addr, &hdev->rpa))
1488                                 return 0;
1489                 }
1490
1491                 err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa);
1492                 if (err < 0) {
1493                         BT_ERR("%s failed to generate new RPA", hdev->name);
1494                         return err;
1495                 }
1496
1497                 bacpy(rand_addr, &hdev->rpa);
1498
1499                 to = msecs_to_jiffies(hdev->rpa_timeout * 1000);
1500                 if (adv_instance)
1501                         queue_delayed_work(hdev->workqueue,
1502                                            &adv_instance->rpa_expired_cb, to);
1503                 else
1504                         queue_delayed_work(hdev->workqueue,
1505                                            &hdev->rpa_expired, to);
1506
1507                 return 0;
1508         }
1509
1510         /* In case of required privacy without resolvable private address,
1511          * use an non-resolvable private address. This is useful for
1512          * non-connectable advertising.
1513          */
1514         if (require_privacy) {
1515                 bdaddr_t nrpa;
1516
1517                 while (true) {
1518                         /* The non-resolvable private address is generated
1519                          * from random six bytes with the two most significant
1520                          * bits cleared.
1521                          */
1522                         get_random_bytes(&nrpa, 6);
1523                         nrpa.b[5] &= 0x3f;
1524
1525                         /* The non-resolvable private address shall not be
1526                          * equal to the public address.
1527                          */
1528                         if (bacmp(&hdev->bdaddr, &nrpa))
1529                                 break;
1530                 }
1531
1532                 *own_addr_type = ADDR_LE_DEV_RANDOM;
1533                 bacpy(rand_addr, &nrpa);
1534
1535                 return 0;
1536         }
1537
1538         /* No privacy so use a public address. */
1539         *own_addr_type = ADDR_LE_DEV_PUBLIC;
1540
1541         return 0;
1542 }
1543
1544 void __hci_req_clear_ext_adv_sets(struct hci_request *req)
1545 {
1546         hci_req_add(req, HCI_OP_LE_CLEAR_ADV_SETS, 0, NULL);
1547 }
1548
1549 int __hci_req_setup_ext_adv_instance(struct hci_request *req, u8 instance)
1550 {
1551         struct hci_cp_le_set_ext_adv_params cp;
1552         struct hci_dev *hdev = req->hdev;
1553         bool connectable;
1554         u32 flags;
1555         bdaddr_t random_addr;
1556         u8 own_addr_type;
1557         int err;
1558         struct adv_info *adv_instance;
1559         bool secondary_adv;
1560         /* In ext adv set param interval is 3 octets */
1561         const u8 adv_interval[3] = { 0x00, 0x08, 0x00 };
1562
1563         if (instance > 0) {
1564                 adv_instance = hci_find_adv_instance(hdev, instance);
1565                 if (!adv_instance)
1566                         return -EINVAL;
1567         } else {
1568                 adv_instance = NULL;
1569         }
1570
1571         flags = get_adv_instance_flags(hdev, instance);
1572
1573         /* If the "connectable" instance flag was not set, then choose between
1574          * ADV_IND and ADV_NONCONN_IND based on the global connectable setting.
1575          */
1576         connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) ||
1577                       mgmt_get_connectable(hdev);
1578
1579         if (!is_advertising_allowed(hdev, connectable))
1580                 return -EPERM;
1581
1582         /* Set require_privacy to true only when non-connectable
1583          * advertising is used. In that case it is fine to use a
1584          * non-resolvable private address.
1585          */
1586         err = hci_get_random_address(hdev, !connectable,
1587                                      adv_use_rpa(hdev, flags), adv_instance,
1588                                      &own_addr_type, &random_addr);
1589         if (err < 0)
1590                 return err;
1591
1592         memset(&cp, 0, sizeof(cp));
1593
1594         memcpy(cp.min_interval, adv_interval, sizeof(cp.min_interval));
1595         memcpy(cp.max_interval, adv_interval, sizeof(cp.max_interval));
1596
1597         secondary_adv = (flags & MGMT_ADV_FLAG_SEC_MASK);
1598
1599         if (connectable) {
1600                 if (secondary_adv)
1601                         cp.evt_properties = cpu_to_le16(LE_EXT_ADV_CONN_IND);
1602                 else
1603                         cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_IND);
1604         } else if (get_adv_instance_scan_rsp_len(hdev, instance)) {
1605                 if (secondary_adv)
1606                         cp.evt_properties = cpu_to_le16(LE_EXT_ADV_SCAN_IND);
1607                 else
1608                         cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_SCAN_IND);
1609         } else {
1610                 if (secondary_adv)
1611                         cp.evt_properties = cpu_to_le16(LE_EXT_ADV_NON_CONN_IND);
1612                 else
1613                         cp.evt_properties = cpu_to_le16(LE_LEGACY_NONCONN_IND);
1614         }
1615
1616         cp.own_addr_type = own_addr_type;
1617         cp.channel_map = hdev->le_adv_channel_map;
1618         cp.tx_power = 127;
1619         cp.handle = instance;
1620
1621         if (flags & MGMT_ADV_FLAG_SEC_2M) {
1622                 cp.primary_phy = HCI_ADV_PHY_1M;
1623                 cp.secondary_phy = HCI_ADV_PHY_2M;
1624         } else if (flags & MGMT_ADV_FLAG_SEC_CODED) {
1625                 cp.primary_phy = HCI_ADV_PHY_CODED;
1626                 cp.secondary_phy = HCI_ADV_PHY_CODED;
1627         } else {
1628                 /* In all other cases use 1M */
1629                 cp.primary_phy = HCI_ADV_PHY_1M;
1630                 cp.secondary_phy = HCI_ADV_PHY_1M;
1631         }
1632
1633         hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(cp), &cp);
1634
1635         if (own_addr_type == ADDR_LE_DEV_RANDOM &&
1636             bacmp(&random_addr, BDADDR_ANY)) {
1637                 struct hci_cp_le_set_adv_set_rand_addr cp;
1638
1639                 /* Check if random address need to be updated */
1640                 if (adv_instance) {
1641                         if (!bacmp(&random_addr, &adv_instance->random_addr))
1642                                 return 0;
1643                 } else {
1644                         if (!bacmp(&random_addr, &hdev->random_addr))
1645                                 return 0;
1646                 }
1647
1648                 memset(&cp, 0, sizeof(cp));
1649
1650                 cp.handle = 0;
1651                 bacpy(&cp.bdaddr, &random_addr);
1652
1653                 hci_req_add(req,
1654                             HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
1655                             sizeof(cp), &cp);
1656         }
1657
1658         return 0;
1659 }
1660
1661 int __hci_req_enable_ext_advertising(struct hci_request *req, u8 instance)
1662 {
1663         struct hci_dev *hdev = req->hdev;
1664         struct hci_cp_le_set_ext_adv_enable *cp;
1665         struct hci_cp_ext_adv_set *adv_set;
1666         u8 data[sizeof(*cp) + sizeof(*adv_set) * 1];
1667         struct adv_info *adv_instance;
1668
1669         if (instance > 0) {
1670                 adv_instance = hci_find_adv_instance(hdev, instance);
1671                 if (!adv_instance)
1672                         return -EINVAL;
1673         } else {
1674                 adv_instance = NULL;
1675         }
1676
1677         cp = (void *) data;
1678         adv_set = (void *) cp->data;
1679
1680         memset(cp, 0, sizeof(*cp));
1681
1682         cp->enable = 0x01;
1683         cp->num_of_sets = 0x01;
1684
1685         memset(adv_set, 0, sizeof(*adv_set));
1686
1687         adv_set->handle = instance;
1688
1689         /* Set duration per instance since controller is responsible for
1690          * scheduling it.
1691          */
1692         if (adv_instance && adv_instance->duration) {
1693                 u16 duration = adv_instance->duration * MSEC_PER_SEC;
1694
1695                 /* Time = N * 10 ms */
1696                 adv_set->duration = cpu_to_le16(duration / 10);
1697         }
1698
1699         hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_ENABLE,
1700                     sizeof(*cp) + sizeof(*adv_set) * cp->num_of_sets,
1701                     data);
1702
1703         return 0;
1704 }
1705
1706 int __hci_req_start_ext_adv(struct hci_request *req, u8 instance)
1707 {
1708         struct hci_dev *hdev = req->hdev;
1709         int err;
1710
1711         if (hci_dev_test_flag(hdev, HCI_LE_ADV))
1712                 __hci_req_disable_advertising(req);
1713
1714         err = __hci_req_setup_ext_adv_instance(req, instance);
1715         if (err < 0)
1716                 return err;
1717
1718         __hci_req_update_scan_rsp_data(req, instance);
1719         __hci_req_enable_ext_advertising(req, instance);
1720
1721         return 0;
1722 }
1723
1724 int __hci_req_schedule_adv_instance(struct hci_request *req, u8 instance,
1725                                     bool force)
1726 {
1727         struct hci_dev *hdev = req->hdev;
1728         struct adv_info *adv_instance = NULL;
1729         u16 timeout;
1730
1731         if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
1732             list_empty(&hdev->adv_instances))
1733                 return -EPERM;
1734
1735         if (hdev->adv_instance_timeout)
1736                 return -EBUSY;
1737
1738         adv_instance = hci_find_adv_instance(hdev, instance);
1739         if (!adv_instance)
1740                 return -ENOENT;
1741
1742         /* A zero timeout means unlimited advertising. As long as there is
1743          * only one instance, duration should be ignored. We still set a timeout
1744          * in case further instances are being added later on.
1745          *
1746          * If the remaining lifetime of the instance is more than the duration
1747          * then the timeout corresponds to the duration, otherwise it will be
1748          * reduced to the remaining instance lifetime.
1749          */
1750         if (adv_instance->timeout == 0 ||
1751             adv_instance->duration <= adv_instance->remaining_time)
1752                 timeout = adv_instance->duration;
1753         else
1754                 timeout = adv_instance->remaining_time;
1755
1756         /* The remaining time is being reduced unless the instance is being
1757          * advertised without time limit.
1758          */
1759         if (adv_instance->timeout)
1760                 adv_instance->remaining_time =
1761                                 adv_instance->remaining_time - timeout;
1762
1763         /* Only use work for scheduling instances with legacy advertising */
1764         if (!ext_adv_capable(hdev)) {
1765                 hdev->adv_instance_timeout = timeout;
1766                 queue_delayed_work(hdev->req_workqueue,
1767                            &hdev->adv_instance_expire,
1768                            msecs_to_jiffies(timeout * 1000));
1769         }
1770
1771         /* If we're just re-scheduling the same instance again then do not
1772          * execute any HCI commands. This happens when a single instance is
1773          * being advertised.
1774          */
1775         if (!force && hdev->cur_adv_instance == instance &&
1776             hci_dev_test_flag(hdev, HCI_LE_ADV))
1777                 return 0;
1778
1779         hdev->cur_adv_instance = instance;
1780         if (ext_adv_capable(hdev)) {
1781                 __hci_req_start_ext_adv(req, instance);
1782         } else {
1783                 __hci_req_update_adv_data(req, instance);
1784                 __hci_req_update_scan_rsp_data(req, instance);
1785                 __hci_req_enable_advertising(req);
1786         }
1787
1788         return 0;
1789 }
1790
1791 static void cancel_adv_timeout(struct hci_dev *hdev)
1792 {
1793         if (hdev->adv_instance_timeout) {
1794                 hdev->adv_instance_timeout = 0;
1795                 cancel_delayed_work(&hdev->adv_instance_expire);
1796         }
1797 }
1798
1799 /* For a single instance:
1800  * - force == true: The instance will be removed even when its remaining
1801  *   lifetime is not zero.
1802  * - force == false: the instance will be deactivated but kept stored unless
1803  *   the remaining lifetime is zero.
1804  *
1805  * For instance == 0x00:
1806  * - force == true: All instances will be removed regardless of their timeout
1807  *   setting.
1808  * - force == false: Only instances that have a timeout will be removed.
1809  */
1810 void hci_req_clear_adv_instance(struct hci_dev *hdev, struct sock *sk,
1811                                 struct hci_request *req, u8 instance,
1812                                 bool force)
1813 {
1814         struct adv_info *adv_instance, *n, *next_instance = NULL;
1815         int err;
1816         u8 rem_inst;
1817
1818         /* Cancel any timeout concerning the removed instance(s). */
1819         if (!instance || hdev->cur_adv_instance == instance)
1820                 cancel_adv_timeout(hdev);
1821
1822         /* Get the next instance to advertise BEFORE we remove
1823          * the current one. This can be the same instance again
1824          * if there is only one instance.
1825          */
1826         if (instance && hdev->cur_adv_instance == instance)
1827                 next_instance = hci_get_next_instance(hdev, instance);
1828
1829         if (instance == 0x00) {
1830                 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances,
1831                                          list) {
1832                         if (!(force || adv_instance->timeout))
1833                                 continue;
1834
1835                         rem_inst = adv_instance->instance;
1836                         err = hci_remove_adv_instance(hdev, rem_inst);
1837                         if (!err)
1838                                 mgmt_advertising_removed(sk, hdev, rem_inst);
1839                 }
1840         } else {
1841                 adv_instance = hci_find_adv_instance(hdev, instance);
1842
1843                 if (force || (adv_instance && adv_instance->timeout &&
1844                               !adv_instance->remaining_time)) {
1845                         /* Don't advertise a removed instance. */
1846                         if (next_instance &&
1847                             next_instance->instance == instance)
1848                                 next_instance = NULL;
1849
1850                         err = hci_remove_adv_instance(hdev, instance);
1851                         if (!err)
1852                                 mgmt_advertising_removed(sk, hdev, instance);
1853                 }
1854         }
1855
1856         if (!req || !hdev_is_powered(hdev) ||
1857             hci_dev_test_flag(hdev, HCI_ADVERTISING))
1858                 return;
1859
1860         if (next_instance)
1861                 __hci_req_schedule_adv_instance(req, next_instance->instance,
1862                                                 false);
1863 }
1864
1865 static void set_random_addr(struct hci_request *req, bdaddr_t *rpa)
1866 {
1867         struct hci_dev *hdev = req->hdev;
1868
1869         /* If we're advertising or initiating an LE connection we can't
1870          * go ahead and change the random address at this time. This is
1871          * because the eventual initiator address used for the
1872          * subsequently created connection will be undefined (some
1873          * controllers use the new address and others the one we had
1874          * when the operation started).
1875          *
1876          * In this kind of scenario skip the update and let the random
1877          * address be updated at the next cycle.
1878          */
1879         if (hci_dev_test_flag(hdev, HCI_LE_ADV) ||
1880             hci_lookup_le_connect(hdev)) {
1881                 BT_DBG("Deferring random address update");
1882                 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
1883                 return;
1884         }
1885
1886         hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, rpa);
1887 }
1888
1889 int hci_update_random_address(struct hci_request *req, bool require_privacy,
1890                               bool use_rpa, u8 *own_addr_type)
1891 {
1892         struct hci_dev *hdev = req->hdev;
1893         int err;
1894
1895         /* If privacy is enabled use a resolvable private address. If
1896          * current RPA has expired or there is something else than
1897          * the current RPA in use, then generate a new one.
1898          */
1899         if (use_rpa) {
1900                 int to;
1901
1902                 *own_addr_type = ADDR_LE_DEV_RANDOM;
1903
1904                 if (!hci_dev_test_and_clear_flag(hdev, HCI_RPA_EXPIRED) &&
1905                     !bacmp(&hdev->random_addr, &hdev->rpa))
1906                         return 0;
1907
1908                 err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa);
1909                 if (err < 0) {
1910                         bt_dev_err(hdev, "failed to generate new RPA");
1911                         return err;
1912                 }
1913
1914                 set_random_addr(req, &hdev->rpa);
1915
1916                 to = msecs_to_jiffies(hdev->rpa_timeout * 1000);
1917                 queue_delayed_work(hdev->workqueue, &hdev->rpa_expired, to);
1918
1919                 return 0;
1920         }
1921
1922         /* In case of required privacy without resolvable private address,
1923          * use an non-resolvable private address. This is useful for active
1924          * scanning and non-connectable advertising.
1925          */
1926         if (require_privacy) {
1927                 bdaddr_t nrpa;
1928
1929                 while (true) {
1930                         /* The non-resolvable private address is generated
1931                          * from random six bytes with the two most significant
1932                          * bits cleared.
1933                          */
1934                         get_random_bytes(&nrpa, 6);
1935                         nrpa.b[5] &= 0x3f;
1936
1937                         /* The non-resolvable private address shall not be
1938                          * equal to the public address.
1939                          */
1940                         if (bacmp(&hdev->bdaddr, &nrpa))
1941                                 break;
1942                 }
1943
1944                 *own_addr_type = ADDR_LE_DEV_RANDOM;
1945                 set_random_addr(req, &nrpa);
1946                 return 0;
1947         }
1948
1949         /* If forcing static address is in use or there is no public
1950          * address use the static address as random address (but skip
1951          * the HCI command if the current random address is already the
1952          * static one.
1953          *
1954          * In case BR/EDR has been disabled on a dual-mode controller
1955          * and a static address has been configured, then use that
1956          * address instead of the public BR/EDR address.
1957          */
1958         if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
1959             !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
1960             (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
1961              bacmp(&hdev->static_addr, BDADDR_ANY))) {
1962                 *own_addr_type = ADDR_LE_DEV_RANDOM;
1963                 if (bacmp(&hdev->static_addr, &hdev->random_addr))
1964                         hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6,
1965                                     &hdev->static_addr);
1966                 return 0;
1967         }
1968
1969         /* Neither privacy nor static address is being used so use a
1970          * public address.
1971          */
1972         *own_addr_type = ADDR_LE_DEV_PUBLIC;
1973
1974         return 0;
1975 }
1976
1977 static bool disconnected_whitelist_entries(struct hci_dev *hdev)
1978 {
1979         struct bdaddr_list *b;
1980
1981         list_for_each_entry(b, &hdev->whitelist, list) {
1982                 struct hci_conn *conn;
1983
1984                 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &b->bdaddr);
1985                 if (!conn)
1986                         return true;
1987
1988                 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
1989                         return true;
1990         }
1991
1992         return false;
1993 }
1994
1995 void __hci_req_update_scan(struct hci_request *req)
1996 {
1997         struct hci_dev *hdev = req->hdev;
1998         u8 scan;
1999
2000         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
2001                 return;
2002
2003         if (!hdev_is_powered(hdev))
2004                 return;
2005
2006         if (mgmt_powering_down(hdev))
2007                 return;
2008
2009         if (hci_dev_test_flag(hdev, HCI_CONNECTABLE) ||
2010             disconnected_whitelist_entries(hdev))
2011                 scan = SCAN_PAGE;
2012         else
2013                 scan = SCAN_DISABLED;
2014
2015         if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
2016                 scan |= SCAN_INQUIRY;
2017
2018         if (test_bit(HCI_PSCAN, &hdev->flags) == !!(scan & SCAN_PAGE) &&
2019             test_bit(HCI_ISCAN, &hdev->flags) == !!(scan & SCAN_INQUIRY))
2020                 return;
2021
2022         hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
2023 }
2024
2025 static int update_scan(struct hci_request *req, unsigned long opt)
2026 {
2027         hci_dev_lock(req->hdev);
2028         __hci_req_update_scan(req);
2029         hci_dev_unlock(req->hdev);
2030         return 0;
2031 }
2032
2033 static void scan_update_work(struct work_struct *work)
2034 {
2035         struct hci_dev *hdev = container_of(work, struct hci_dev, scan_update);
2036
2037         hci_req_sync(hdev, update_scan, 0, HCI_CMD_TIMEOUT, NULL);
2038 }
2039
2040 static int connectable_update(struct hci_request *req, unsigned long opt)
2041 {
2042         struct hci_dev *hdev = req->hdev;
2043
2044         hci_dev_lock(hdev);
2045
2046         __hci_req_update_scan(req);
2047
2048         /* If BR/EDR is not enabled and we disable advertising as a
2049          * by-product of disabling connectable, we need to update the
2050          * advertising flags.
2051          */
2052         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
2053                 __hci_req_update_adv_data(req, hdev->cur_adv_instance);
2054
2055         /* Update the advertising parameters if necessary */
2056         if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
2057             !list_empty(&hdev->adv_instances)) {
2058                 if (ext_adv_capable(hdev))
2059                         __hci_req_start_ext_adv(req, hdev->cur_adv_instance);
2060                 else
2061                         __hci_req_enable_advertising(req);
2062         }
2063
2064         __hci_update_background_scan(req);
2065
2066         hci_dev_unlock(hdev);
2067
2068         return 0;
2069 }
2070
2071 static void connectable_update_work(struct work_struct *work)
2072 {
2073         struct hci_dev *hdev = container_of(work, struct hci_dev,
2074                                             connectable_update);
2075         u8 status;
2076
2077         hci_req_sync(hdev, connectable_update, 0, HCI_CMD_TIMEOUT, &status);
2078         mgmt_set_connectable_complete(hdev, status);
2079 }
2080
2081 static u8 get_service_classes(struct hci_dev *hdev)
2082 {
2083         struct bt_uuid *uuid;
2084         u8 val = 0;
2085
2086         list_for_each_entry(uuid, &hdev->uuids, list)
2087                 val |= uuid->svc_hint;
2088
2089         return val;
2090 }
2091
2092 void __hci_req_update_class(struct hci_request *req)
2093 {
2094         struct hci_dev *hdev = req->hdev;
2095         u8 cod[3];
2096
2097         BT_DBG("%s", hdev->name);
2098
2099         if (!hdev_is_powered(hdev))
2100                 return;
2101
2102         if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
2103                 return;
2104
2105         if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE))
2106                 return;
2107
2108         cod[0] = hdev->minor_class;
2109         cod[1] = hdev->major_class;
2110         cod[2] = get_service_classes(hdev);
2111
2112         if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
2113                 cod[1] |= 0x20;
2114
2115         if (memcmp(cod, hdev->dev_class, 3) == 0)
2116                 return;
2117
2118         hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
2119 }
2120
2121 static void write_iac(struct hci_request *req)
2122 {
2123         struct hci_dev *hdev = req->hdev;
2124         struct hci_cp_write_current_iac_lap cp;
2125
2126         if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
2127                 return;
2128
2129         if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) {
2130                 /* Limited discoverable mode */
2131                 cp.num_iac = min_t(u8, hdev->num_iac, 2);
2132                 cp.iac_lap[0] = 0x00;   /* LIAC */
2133                 cp.iac_lap[1] = 0x8b;
2134                 cp.iac_lap[2] = 0x9e;
2135                 cp.iac_lap[3] = 0x33;   /* GIAC */
2136                 cp.iac_lap[4] = 0x8b;
2137                 cp.iac_lap[5] = 0x9e;
2138         } else {
2139                 /* General discoverable mode */
2140                 cp.num_iac = 1;
2141                 cp.iac_lap[0] = 0x33;   /* GIAC */
2142                 cp.iac_lap[1] = 0x8b;
2143                 cp.iac_lap[2] = 0x9e;
2144         }
2145
2146         hci_req_add(req, HCI_OP_WRITE_CURRENT_IAC_LAP,
2147                     (cp.num_iac * 3) + 1, &cp);
2148 }
2149
2150 static int discoverable_update(struct hci_request *req, unsigned long opt)
2151 {
2152         struct hci_dev *hdev = req->hdev;
2153
2154         hci_dev_lock(hdev);
2155
2156         if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
2157                 write_iac(req);
2158                 __hci_req_update_scan(req);
2159                 __hci_req_update_class(req);
2160         }
2161
2162         /* Advertising instances don't use the global discoverable setting, so
2163          * only update AD if advertising was enabled using Set Advertising.
2164          */
2165         if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
2166                 __hci_req_update_adv_data(req, 0x00);
2167
2168                 /* Discoverable mode affects the local advertising
2169                  * address in limited privacy mode.
2170                  */
2171                 if (hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY)) {
2172                         if (ext_adv_capable(hdev))
2173                                 __hci_req_start_ext_adv(req, 0x00);
2174                         else
2175                                 __hci_req_enable_advertising(req);
2176                 }
2177         }
2178
2179         hci_dev_unlock(hdev);
2180
2181         return 0;
2182 }
2183
2184 static void discoverable_update_work(struct work_struct *work)
2185 {
2186         struct hci_dev *hdev = container_of(work, struct hci_dev,
2187                                             discoverable_update);
2188         u8 status;
2189
2190         hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, &status);
2191         mgmt_set_discoverable_complete(hdev, status);
2192 }
2193
2194 void __hci_abort_conn(struct hci_request *req, struct hci_conn *conn,
2195                       u8 reason)
2196 {
2197         switch (conn->state) {
2198         case BT_CONNECTED:
2199         case BT_CONFIG:
2200                 if (conn->type == AMP_LINK) {
2201                         struct hci_cp_disconn_phy_link cp;
2202
2203                         cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
2204                         cp.reason = reason;
2205                         hci_req_add(req, HCI_OP_DISCONN_PHY_LINK, sizeof(cp),
2206                                     &cp);
2207                 } else {
2208                         struct hci_cp_disconnect dc;
2209
2210                         dc.handle = cpu_to_le16(conn->handle);
2211                         dc.reason = reason;
2212                         hci_req_add(req, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2213                 }
2214
2215                 conn->state = BT_DISCONN;
2216
2217                 break;
2218         case BT_CONNECT:
2219                 if (conn->type == LE_LINK) {
2220                         if (test_bit(HCI_CONN_SCANNING, &conn->flags))
2221                                 break;
2222                         hci_req_add(req, HCI_OP_LE_CREATE_CONN_CANCEL,
2223                                     0, NULL);
2224                 } else if (conn->type == ACL_LINK) {
2225                         if (req->hdev->hci_ver < BLUETOOTH_VER_1_2)
2226                                 break;
2227                         hci_req_add(req, HCI_OP_CREATE_CONN_CANCEL,
2228                                     6, &conn->dst);
2229                 }
2230                 break;
2231         case BT_CONNECT2:
2232                 if (conn->type == ACL_LINK) {
2233                         struct hci_cp_reject_conn_req rej;
2234
2235                         bacpy(&rej.bdaddr, &conn->dst);
2236                         rej.reason = reason;
2237
2238                         hci_req_add(req, HCI_OP_REJECT_CONN_REQ,
2239                                     sizeof(rej), &rej);
2240                 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
2241                         struct hci_cp_reject_sync_conn_req rej;
2242
2243                         bacpy(&rej.bdaddr, &conn->dst);
2244
2245                         /* SCO rejection has its own limited set of
2246                          * allowed error values (0x0D-0x0F) which isn't
2247                          * compatible with most values passed to this
2248                          * function. To be safe hard-code one of the
2249                          * values that's suitable for SCO.
2250                          */
2251                         rej.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
2252
2253                         hci_req_add(req, HCI_OP_REJECT_SYNC_CONN_REQ,
2254                                     sizeof(rej), &rej);
2255                 }
2256                 break;
2257         default:
2258                 conn->state = BT_CLOSED;
2259                 break;
2260         }
2261 }
2262
2263 static void abort_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode)
2264 {
2265         if (status)
2266                 BT_DBG("Failed to abort connection: status 0x%2.2x", status);
2267 }
2268
2269 int hci_abort_conn(struct hci_conn *conn, u8 reason)
2270 {
2271         struct hci_request req;
2272         int err;
2273
2274         hci_req_init(&req, conn->hdev);
2275
2276         __hci_abort_conn(&req, conn, reason);
2277
2278         err = hci_req_run(&req, abort_conn_complete);
2279         if (err && err != -ENODATA) {
2280                 bt_dev_err(conn->hdev, "failed to run HCI request: err %d", err);
2281                 return err;
2282         }
2283
2284         return 0;
2285 }
2286
2287 static int update_bg_scan(struct hci_request *req, unsigned long opt)
2288 {
2289         hci_dev_lock(req->hdev);
2290         __hci_update_background_scan(req);
2291         hci_dev_unlock(req->hdev);
2292         return 0;
2293 }
2294
2295 static void bg_scan_update(struct work_struct *work)
2296 {
2297         struct hci_dev *hdev = container_of(work, struct hci_dev,
2298                                             bg_scan_update);
2299         struct hci_conn *conn;
2300         u8 status;
2301         int err;
2302
2303         err = hci_req_sync(hdev, update_bg_scan, 0, HCI_CMD_TIMEOUT, &status);
2304         if (!err)
2305                 return;
2306
2307         hci_dev_lock(hdev);
2308
2309         conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
2310         if (conn)
2311                 hci_le_conn_failed(conn, status);
2312
2313         hci_dev_unlock(hdev);
2314 }
2315
2316 static int le_scan_disable(struct hci_request *req, unsigned long opt)
2317 {
2318         hci_req_add_le_scan_disable(req);
2319         return 0;
2320 }
2321
2322 static int bredr_inquiry(struct hci_request *req, unsigned long opt)
2323 {
2324         u8 length = opt;
2325         const u8 giac[3] = { 0x33, 0x8b, 0x9e };
2326         const u8 liac[3] = { 0x00, 0x8b, 0x9e };
2327         struct hci_cp_inquiry cp;
2328
2329         BT_DBG("%s", req->hdev->name);
2330
2331         hci_dev_lock(req->hdev);
2332         hci_inquiry_cache_flush(req->hdev);
2333         hci_dev_unlock(req->hdev);
2334
2335         memset(&cp, 0, sizeof(cp));
2336
2337         if (req->hdev->discovery.limited)
2338                 memcpy(&cp.lap, liac, sizeof(cp.lap));
2339         else
2340                 memcpy(&cp.lap, giac, sizeof(cp.lap));
2341
2342         cp.length = length;
2343
2344         hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
2345
2346         return 0;
2347 }
2348
2349 static void le_scan_disable_work(struct work_struct *work)
2350 {
2351         struct hci_dev *hdev = container_of(work, struct hci_dev,
2352                                             le_scan_disable.work);
2353         u8 status;
2354
2355         BT_DBG("%s", hdev->name);
2356
2357         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
2358                 return;
2359
2360         cancel_delayed_work(&hdev->le_scan_restart);
2361
2362         hci_req_sync(hdev, le_scan_disable, 0, HCI_CMD_TIMEOUT, &status);
2363         if (status) {
2364                 bt_dev_err(hdev, "failed to disable LE scan: status 0x%02x",
2365                            status);
2366                 return;
2367         }
2368
2369         hdev->discovery.scan_start = 0;
2370
2371         /* If we were running LE only scan, change discovery state. If
2372          * we were running both LE and BR/EDR inquiry simultaneously,
2373          * and BR/EDR inquiry is already finished, stop discovery,
2374          * otherwise BR/EDR inquiry will stop discovery when finished.
2375          * If we will resolve remote device name, do not change
2376          * discovery state.
2377          */
2378
2379         if (hdev->discovery.type == DISCOV_TYPE_LE)
2380                 goto discov_stopped;
2381
2382         if (hdev->discovery.type != DISCOV_TYPE_INTERLEAVED)
2383                 return;
2384
2385         if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks)) {
2386                 if (!test_bit(HCI_INQUIRY, &hdev->flags) &&
2387                     hdev->discovery.state != DISCOVERY_RESOLVING)
2388                         goto discov_stopped;
2389
2390                 return;
2391         }
2392
2393         hci_req_sync(hdev, bredr_inquiry, DISCOV_INTERLEAVED_INQUIRY_LEN,
2394                      HCI_CMD_TIMEOUT, &status);
2395         if (status) {
2396                 bt_dev_err(hdev, "inquiry failed: status 0x%02x", status);
2397                 goto discov_stopped;
2398         }
2399
2400         return;
2401
2402 discov_stopped:
2403         hci_dev_lock(hdev);
2404         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2405         hci_dev_unlock(hdev);
2406 }
2407
2408 static int le_scan_restart(struct hci_request *req, unsigned long opt)
2409 {
2410         struct hci_dev *hdev = req->hdev;
2411
2412         /* If controller is not scanning we are done. */
2413         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
2414                 return 0;
2415
2416         hci_req_add_le_scan_disable(req);
2417
2418         if (use_ext_scan(hdev)) {
2419                 struct hci_cp_le_set_ext_scan_enable ext_enable_cp;
2420
2421                 memset(&ext_enable_cp, 0, sizeof(ext_enable_cp));
2422                 ext_enable_cp.enable = LE_SCAN_ENABLE;
2423                 ext_enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
2424
2425                 hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE,
2426                             sizeof(ext_enable_cp), &ext_enable_cp);
2427         } else {
2428                 struct hci_cp_le_set_scan_enable cp;
2429
2430                 memset(&cp, 0, sizeof(cp));
2431                 cp.enable = LE_SCAN_ENABLE;
2432                 cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
2433                 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
2434         }
2435
2436         return 0;
2437 }
2438
2439 static void le_scan_restart_work(struct work_struct *work)
2440 {
2441         struct hci_dev *hdev = container_of(work, struct hci_dev,
2442                                             le_scan_restart.work);
2443         unsigned long timeout, duration, scan_start, now;
2444         u8 status;
2445
2446         BT_DBG("%s", hdev->name);
2447
2448         hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status);
2449         if (status) {
2450                 bt_dev_err(hdev, "failed to restart LE scan: status %d",
2451                            status);
2452                 return;
2453         }
2454
2455         hci_dev_lock(hdev);
2456
2457         if (!test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) ||
2458             !hdev->discovery.scan_start)
2459                 goto unlock;
2460
2461         /* When the scan was started, hdev->le_scan_disable has been queued
2462          * after duration from scan_start. During scan restart this job
2463          * has been canceled, and we need to queue it again after proper
2464          * timeout, to make sure that scan does not run indefinitely.
2465          */
2466         duration = hdev->discovery.scan_duration;
2467         scan_start = hdev->discovery.scan_start;
2468         now = jiffies;
2469         if (now - scan_start <= duration) {
2470                 int elapsed;
2471
2472                 if (now >= scan_start)
2473                         elapsed = now - scan_start;
2474                 else
2475                         elapsed = ULONG_MAX - scan_start + now;
2476
2477                 timeout = duration - elapsed;
2478         } else {
2479                 timeout = 0;
2480         }
2481
2482         queue_delayed_work(hdev->req_workqueue,
2483                            &hdev->le_scan_disable, timeout);
2484
2485 unlock:
2486         hci_dev_unlock(hdev);
2487 }
2488
2489 static int active_scan(struct hci_request *req, unsigned long opt)
2490 {
2491         uint16_t interval = opt;
2492         struct hci_dev *hdev = req->hdev;
2493         u8 own_addr_type;
2494         int err;
2495
2496         BT_DBG("%s", hdev->name);
2497
2498         if (hci_dev_test_flag(hdev, HCI_LE_ADV)) {
2499                 hci_dev_lock(hdev);
2500
2501                 /* Don't let discovery abort an outgoing connection attempt
2502                  * that's using directed advertising.
2503                  */
2504                 if (hci_lookup_le_connect(hdev)) {
2505                         hci_dev_unlock(hdev);
2506                         return -EBUSY;
2507                 }
2508
2509                 cancel_adv_timeout(hdev);
2510                 hci_dev_unlock(hdev);
2511
2512                 __hci_req_disable_advertising(req);
2513         }
2514
2515         /* If controller is scanning, it means the background scanning is
2516          * running. Thus, we should temporarily stop it in order to set the
2517          * discovery scanning parameters.
2518          */
2519         if (hci_dev_test_flag(hdev, HCI_LE_SCAN))
2520                 hci_req_add_le_scan_disable(req);
2521
2522         /* All active scans will be done with either a resolvable private
2523          * address (when privacy feature has been enabled) or non-resolvable
2524          * private address.
2525          */
2526         err = hci_update_random_address(req, true, scan_use_rpa(hdev),
2527                                         &own_addr_type);
2528         if (err < 0)
2529                 own_addr_type = ADDR_LE_DEV_PUBLIC;
2530
2531         hci_req_start_scan(req, LE_SCAN_ACTIVE, interval, DISCOV_LE_SCAN_WIN,
2532                            own_addr_type, 0);
2533         return 0;
2534 }
2535
2536 static int interleaved_discov(struct hci_request *req, unsigned long opt)
2537 {
2538         int err;
2539
2540         BT_DBG("%s", req->hdev->name);
2541
2542         err = active_scan(req, opt);
2543         if (err)
2544                 return err;
2545
2546         return bredr_inquiry(req, DISCOV_BREDR_INQUIRY_LEN);
2547 }
2548
2549 static void start_discovery(struct hci_dev *hdev, u8 *status)
2550 {
2551         unsigned long timeout;
2552
2553         BT_DBG("%s type %u", hdev->name, hdev->discovery.type);
2554
2555         switch (hdev->discovery.type) {
2556         case DISCOV_TYPE_BREDR:
2557                 if (!hci_dev_test_flag(hdev, HCI_INQUIRY))
2558                         hci_req_sync(hdev, bredr_inquiry,
2559                                      DISCOV_BREDR_INQUIRY_LEN, HCI_CMD_TIMEOUT,
2560                                      status);
2561                 return;
2562         case DISCOV_TYPE_INTERLEAVED:
2563                 /* When running simultaneous discovery, the LE scanning time
2564                  * should occupy the whole discovery time sine BR/EDR inquiry
2565                  * and LE scanning are scheduled by the controller.
2566                  *
2567                  * For interleaving discovery in comparison, BR/EDR inquiry
2568                  * and LE scanning are done sequentially with separate
2569                  * timeouts.
2570                  */
2571                 if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
2572                              &hdev->quirks)) {
2573                         timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
2574                         /* During simultaneous discovery, we double LE scan
2575                          * interval. We must leave some time for the controller
2576                          * to do BR/EDR inquiry.
2577                          */
2578                         hci_req_sync(hdev, interleaved_discov,
2579                                      DISCOV_LE_SCAN_INT * 2, HCI_CMD_TIMEOUT,
2580                                      status);
2581                         break;
2582                 }
2583
2584                 timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout);
2585                 hci_req_sync(hdev, active_scan, DISCOV_LE_SCAN_INT,
2586                              HCI_CMD_TIMEOUT, status);
2587                 break;
2588         case DISCOV_TYPE_LE:
2589                 timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
2590                 hci_req_sync(hdev, active_scan, DISCOV_LE_SCAN_INT,
2591                              HCI_CMD_TIMEOUT, status);
2592                 break;
2593         default:
2594                 *status = HCI_ERROR_UNSPECIFIED;
2595                 return;
2596         }
2597
2598         if (*status)
2599                 return;
2600
2601         BT_DBG("%s timeout %u ms", hdev->name, jiffies_to_msecs(timeout));
2602
2603         /* When service discovery is used and the controller has a
2604          * strict duplicate filter, it is important to remember the
2605          * start and duration of the scan. This is required for
2606          * restarting scanning during the discovery phase.
2607          */
2608         if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) &&
2609                      hdev->discovery.result_filtering) {
2610                 hdev->discovery.scan_start = jiffies;
2611                 hdev->discovery.scan_duration = timeout;
2612         }
2613
2614         queue_delayed_work(hdev->req_workqueue, &hdev->le_scan_disable,
2615                            timeout);
2616 }
2617
2618 bool hci_req_stop_discovery(struct hci_request *req)
2619 {
2620         struct hci_dev *hdev = req->hdev;
2621         struct discovery_state *d = &hdev->discovery;
2622         struct hci_cp_remote_name_req_cancel cp;
2623         struct inquiry_entry *e;
2624         bool ret = false;
2625
2626         BT_DBG("%s state %u", hdev->name, hdev->discovery.state);
2627
2628         if (d->state == DISCOVERY_FINDING || d->state == DISCOVERY_STOPPING) {
2629                 if (test_bit(HCI_INQUIRY, &hdev->flags))
2630                         hci_req_add(req, HCI_OP_INQUIRY_CANCEL, 0, NULL);
2631
2632                 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
2633                         cancel_delayed_work(&hdev->le_scan_disable);
2634                         hci_req_add_le_scan_disable(req);
2635                 }
2636
2637                 ret = true;
2638         } else {
2639                 /* Passive scanning */
2640                 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
2641                         hci_req_add_le_scan_disable(req);
2642                         ret = true;
2643                 }
2644         }
2645
2646         /* No further actions needed for LE-only discovery */
2647         if (d->type == DISCOV_TYPE_LE)
2648                 return ret;
2649
2650         if (d->state == DISCOVERY_RESOLVING || d->state == DISCOVERY_STOPPING) {
2651                 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
2652                                                      NAME_PENDING);
2653                 if (!e)
2654                         return ret;
2655
2656                 bacpy(&cp.bdaddr, &e->data.bdaddr);
2657                 hci_req_add(req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp),
2658                             &cp);
2659                 ret = true;
2660         }
2661
2662         return ret;
2663 }
2664
2665 static int stop_discovery(struct hci_request *req, unsigned long opt)
2666 {
2667         hci_dev_lock(req->hdev);
2668         hci_req_stop_discovery(req);
2669         hci_dev_unlock(req->hdev);
2670
2671         return 0;
2672 }
2673
2674 static void discov_update(struct work_struct *work)
2675 {
2676         struct hci_dev *hdev = container_of(work, struct hci_dev,
2677                                             discov_update);
2678         u8 status = 0;
2679
2680         switch (hdev->discovery.state) {
2681         case DISCOVERY_STARTING:
2682                 start_discovery(hdev, &status);
2683                 mgmt_start_discovery_complete(hdev, status);
2684                 if (status)
2685                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2686                 else
2687                         hci_discovery_set_state(hdev, DISCOVERY_FINDING);
2688                 break;
2689         case DISCOVERY_STOPPING:
2690                 hci_req_sync(hdev, stop_discovery, 0, HCI_CMD_TIMEOUT, &status);
2691                 mgmt_stop_discovery_complete(hdev, status);
2692                 if (!status)
2693                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2694                 break;
2695         case DISCOVERY_STOPPED:
2696         default:
2697                 return;
2698         }
2699 }
2700
2701 static void discov_off(struct work_struct *work)
2702 {
2703         struct hci_dev *hdev = container_of(work, struct hci_dev,
2704                                             discov_off.work);
2705
2706         BT_DBG("%s", hdev->name);
2707
2708         hci_dev_lock(hdev);
2709
2710         /* When discoverable timeout triggers, then just make sure
2711          * the limited discoverable flag is cleared. Even in the case
2712          * of a timeout triggered from general discoverable, it is
2713          * safe to unconditionally clear the flag.
2714          */
2715         hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
2716         hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
2717         hdev->discov_timeout = 0;
2718
2719         hci_dev_unlock(hdev);
2720
2721         hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, NULL);
2722         mgmt_new_settings(hdev);
2723 }
2724
2725 static int powered_update_hci(struct hci_request *req, unsigned long opt)
2726 {
2727         struct hci_dev *hdev = req->hdev;
2728         u8 link_sec;
2729
2730         hci_dev_lock(hdev);
2731
2732         if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
2733             !lmp_host_ssp_capable(hdev)) {
2734                 u8 mode = 0x01;
2735
2736                 hci_req_add(req, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
2737
2738                 if (bredr_sc_enabled(hdev) && !lmp_host_sc_capable(hdev)) {
2739                         u8 support = 0x01;
2740
2741                         hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT,
2742                                     sizeof(support), &support);
2743                 }
2744         }
2745
2746         if (hci_dev_test_flag(hdev, HCI_LE_ENABLED) &&
2747             lmp_bredr_capable(hdev)) {
2748                 struct hci_cp_write_le_host_supported cp;
2749
2750                 cp.le = 0x01;
2751                 cp.simul = 0x00;
2752
2753                 /* Check first if we already have the right
2754                  * host state (host features set)
2755                  */
2756                 if (cp.le != lmp_host_le_capable(hdev) ||
2757                     cp.simul != lmp_host_le_br_capable(hdev))
2758                         hci_req_add(req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
2759                                     sizeof(cp), &cp);
2760         }
2761
2762         if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
2763                 /* Make sure the controller has a good default for
2764                  * advertising data. This also applies to the case
2765                  * where BR/EDR was toggled during the AUTO_OFF phase.
2766                  */
2767                 if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
2768                     list_empty(&hdev->adv_instances)) {
2769                         int err;
2770
2771                         if (ext_adv_capable(hdev)) {
2772                                 err = __hci_req_setup_ext_adv_instance(req,
2773                                                                        0x00);
2774                                 if (!err)
2775                                         __hci_req_update_scan_rsp_data(req,
2776                                                                        0x00);
2777                         } else {
2778                                 err = 0;
2779                                 __hci_req_update_adv_data(req, 0x00);
2780                                 __hci_req_update_scan_rsp_data(req, 0x00);
2781                         }
2782
2783                         if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
2784                                 if (!ext_adv_capable(hdev))
2785                                         __hci_req_enable_advertising(req);
2786                                 else if (!err)
2787                                         __hci_req_enable_ext_advertising(req,
2788                                                                          0x00);
2789                         }
2790                 } else if (!list_empty(&hdev->adv_instances)) {
2791                         struct adv_info *adv_instance;
2792
2793                         adv_instance = list_first_entry(&hdev->adv_instances,
2794                                                         struct adv_info, list);
2795                         __hci_req_schedule_adv_instance(req,
2796                                                         adv_instance->instance,
2797                                                         true);
2798                 }
2799         }
2800
2801         link_sec = hci_dev_test_flag(hdev, HCI_LINK_SECURITY);
2802         if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
2803                 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE,
2804                             sizeof(link_sec), &link_sec);
2805
2806         if (lmp_bredr_capable(hdev)) {
2807                 if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE))
2808                         __hci_req_write_fast_connectable(req, true);
2809                 else
2810                         __hci_req_write_fast_connectable(req, false);
2811                 __hci_req_update_scan(req);
2812                 __hci_req_update_class(req);
2813                 __hci_req_update_name(req);
2814                 __hci_req_update_eir(req);
2815         }
2816
2817         hci_dev_unlock(hdev);
2818         return 0;
2819 }
2820
2821 int __hci_req_hci_power_on(struct hci_dev *hdev)
2822 {
2823         /* Register the available SMP channels (BR/EDR and LE) only when
2824          * successfully powering on the controller. This late
2825          * registration is required so that LE SMP can clearly decide if
2826          * the public address or static address is used.
2827          */
2828         smp_register(hdev);
2829
2830         return __hci_req_sync(hdev, powered_update_hci, 0, HCI_CMD_TIMEOUT,
2831                               NULL);
2832 }
2833
2834 void hci_request_setup(struct hci_dev *hdev)
2835 {
2836         INIT_WORK(&hdev->discov_update, discov_update);
2837         INIT_WORK(&hdev->bg_scan_update, bg_scan_update);
2838         INIT_WORK(&hdev->scan_update, scan_update_work);
2839         INIT_WORK(&hdev->connectable_update, connectable_update_work);
2840         INIT_WORK(&hdev->discoverable_update, discoverable_update_work);
2841         INIT_DELAYED_WORK(&hdev->discov_off, discov_off);
2842         INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work);
2843         INIT_DELAYED_WORK(&hdev->le_scan_restart, le_scan_restart_work);
2844         INIT_DELAYED_WORK(&hdev->adv_instance_expire, adv_timeout_expire);
2845 }
2846
2847 void hci_request_cancel_all(struct hci_dev *hdev)
2848 {
2849         hci_req_sync_cancel(hdev, ENODEV);
2850
2851         cancel_work_sync(&hdev->discov_update);
2852         cancel_work_sync(&hdev->bg_scan_update);
2853         cancel_work_sync(&hdev->scan_update);
2854         cancel_work_sync(&hdev->connectable_update);
2855         cancel_work_sync(&hdev->discoverable_update);
2856         cancel_delayed_work_sync(&hdev->discov_off);
2857         cancel_delayed_work_sync(&hdev->le_scan_disable);
2858         cancel_delayed_work_sync(&hdev->le_scan_restart);
2859
2860         if (hdev->adv_instance_timeout) {
2861                 cancel_delayed_work_sync(&hdev->adv_instance_expire);
2862                 hdev->adv_instance_timeout = 0;
2863         }
2864 }