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