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