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