xref: /openbmc/linux/net/bluetooth/hci_request.c (revision e481ff3f)
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 #include "msft.h"
33 
34 #define HCI_REQ_DONE	  0
35 #define HCI_REQ_PEND	  1
36 #define HCI_REQ_CANCELED  2
37 
38 void hci_req_init(struct hci_request *req, struct hci_dev *hdev)
39 {
40 	skb_queue_head_init(&req->cmd_q);
41 	req->hdev = hdev;
42 	req->err = 0;
43 }
44 
45 void hci_req_purge(struct hci_request *req)
46 {
47 	skb_queue_purge(&req->cmd_q);
48 }
49 
50 bool hci_req_status_pend(struct hci_dev *hdev)
51 {
52 	return hdev->req_status == HCI_REQ_PEND;
53 }
54 
55 static int req_run(struct hci_request *req, hci_req_complete_t complete,
56 		   hci_req_complete_skb_t complete_skb)
57 {
58 	struct hci_dev *hdev = req->hdev;
59 	struct sk_buff *skb;
60 	unsigned long flags;
61 
62 	bt_dev_dbg(hdev, "length %u", skb_queue_len(&req->cmd_q));
63 
64 	/* If an error occurred during request building, remove all HCI
65 	 * commands queued on the HCI request queue.
66 	 */
67 	if (req->err) {
68 		skb_queue_purge(&req->cmd_q);
69 		return req->err;
70 	}
71 
72 	/* Do not allow empty requests */
73 	if (skb_queue_empty(&req->cmd_q))
74 		return -ENODATA;
75 
76 	skb = skb_peek_tail(&req->cmd_q);
77 	if (complete) {
78 		bt_cb(skb)->hci.req_complete = complete;
79 	} else if (complete_skb) {
80 		bt_cb(skb)->hci.req_complete_skb = complete_skb;
81 		bt_cb(skb)->hci.req_flags |= HCI_REQ_SKB;
82 	}
83 
84 	spin_lock_irqsave(&hdev->cmd_q.lock, flags);
85 	skb_queue_splice_tail(&req->cmd_q, &hdev->cmd_q);
86 	spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
87 
88 	queue_work(hdev->workqueue, &hdev->cmd_work);
89 
90 	return 0;
91 }
92 
93 int hci_req_run(struct hci_request *req, hci_req_complete_t complete)
94 {
95 	return req_run(req, complete, NULL);
96 }
97 
98 int hci_req_run_skb(struct hci_request *req, hci_req_complete_skb_t complete)
99 {
100 	return req_run(req, NULL, complete);
101 }
102 
103 static void hci_req_sync_complete(struct hci_dev *hdev, u8 result, u16 opcode,
104 				  struct sk_buff *skb)
105 {
106 	bt_dev_dbg(hdev, "result 0x%2.2x", result);
107 
108 	if (hdev->req_status == HCI_REQ_PEND) {
109 		hdev->req_result = result;
110 		hdev->req_status = HCI_REQ_DONE;
111 		if (skb)
112 			hdev->req_skb = skb_get(skb);
113 		wake_up_interruptible(&hdev->req_wait_q);
114 	}
115 }
116 
117 void hci_req_sync_cancel(struct hci_dev *hdev, int err)
118 {
119 	bt_dev_dbg(hdev, "err 0x%2.2x", err);
120 
121 	if (hdev->req_status == HCI_REQ_PEND) {
122 		hdev->req_result = err;
123 		hdev->req_status = HCI_REQ_CANCELED;
124 		wake_up_interruptible(&hdev->req_wait_q);
125 	}
126 }
127 
128 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
129 				  const void *param, u8 event, u32 timeout)
130 {
131 	struct hci_request req;
132 	struct sk_buff *skb;
133 	int err = 0;
134 
135 	bt_dev_dbg(hdev, "");
136 
137 	hci_req_init(&req, hdev);
138 
139 	hci_req_add_ev(&req, opcode, plen, param, event);
140 
141 	hdev->req_status = HCI_REQ_PEND;
142 
143 	err = hci_req_run_skb(&req, hci_req_sync_complete);
144 	if (err < 0)
145 		return ERR_PTR(err);
146 
147 	err = wait_event_interruptible_timeout(hdev->req_wait_q,
148 			hdev->req_status != HCI_REQ_PEND, timeout);
149 
150 	if (err == -ERESTARTSYS)
151 		return ERR_PTR(-EINTR);
152 
153 	switch (hdev->req_status) {
154 	case HCI_REQ_DONE:
155 		err = -bt_to_errno(hdev->req_result);
156 		break;
157 
158 	case HCI_REQ_CANCELED:
159 		err = -hdev->req_result;
160 		break;
161 
162 	default:
163 		err = -ETIMEDOUT;
164 		break;
165 	}
166 
167 	hdev->req_status = hdev->req_result = 0;
168 	skb = hdev->req_skb;
169 	hdev->req_skb = NULL;
170 
171 	bt_dev_dbg(hdev, "end: err %d", err);
172 
173 	if (err < 0) {
174 		kfree_skb(skb);
175 		return ERR_PTR(err);
176 	}
177 
178 	if (!skb)
179 		return ERR_PTR(-ENODATA);
180 
181 	return skb;
182 }
183 EXPORT_SYMBOL(__hci_cmd_sync_ev);
184 
185 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
186 			       const void *param, u32 timeout)
187 {
188 	return __hci_cmd_sync_ev(hdev, opcode, plen, param, 0, timeout);
189 }
190 EXPORT_SYMBOL(__hci_cmd_sync);
191 
192 /* Execute request and wait for completion. */
193 int __hci_req_sync(struct hci_dev *hdev, int (*func)(struct hci_request *req,
194 						     unsigned long opt),
195 		   unsigned long opt, u32 timeout, u8 *hci_status)
196 {
197 	struct hci_request req;
198 	int err = 0;
199 
200 	bt_dev_dbg(hdev, "start");
201 
202 	hci_req_init(&req, hdev);
203 
204 	hdev->req_status = HCI_REQ_PEND;
205 
206 	err = func(&req, opt);
207 	if (err) {
208 		if (hci_status)
209 			*hci_status = HCI_ERROR_UNSPECIFIED;
210 		return err;
211 	}
212 
213 	err = hci_req_run_skb(&req, hci_req_sync_complete);
214 	if (err < 0) {
215 		hdev->req_status = 0;
216 
217 		/* ENODATA means the HCI request command queue is empty.
218 		 * This can happen when a request with conditionals doesn't
219 		 * trigger any commands to be sent. This is normal behavior
220 		 * and should not trigger an error return.
221 		 */
222 		if (err == -ENODATA) {
223 			if (hci_status)
224 				*hci_status = 0;
225 			return 0;
226 		}
227 
228 		if (hci_status)
229 			*hci_status = HCI_ERROR_UNSPECIFIED;
230 
231 		return err;
232 	}
233 
234 	err = wait_event_interruptible_timeout(hdev->req_wait_q,
235 			hdev->req_status != HCI_REQ_PEND, timeout);
236 
237 	if (err == -ERESTARTSYS)
238 		return -EINTR;
239 
240 	switch (hdev->req_status) {
241 	case HCI_REQ_DONE:
242 		err = -bt_to_errno(hdev->req_result);
243 		if (hci_status)
244 			*hci_status = hdev->req_result;
245 		break;
246 
247 	case HCI_REQ_CANCELED:
248 		err = -hdev->req_result;
249 		if (hci_status)
250 			*hci_status = HCI_ERROR_UNSPECIFIED;
251 		break;
252 
253 	default:
254 		err = -ETIMEDOUT;
255 		if (hci_status)
256 			*hci_status = HCI_ERROR_UNSPECIFIED;
257 		break;
258 	}
259 
260 	kfree_skb(hdev->req_skb);
261 	hdev->req_skb = NULL;
262 	hdev->req_status = hdev->req_result = 0;
263 
264 	bt_dev_dbg(hdev, "end: err %d", err);
265 
266 	return err;
267 }
268 
269 int hci_req_sync(struct hci_dev *hdev, int (*req)(struct hci_request *req,
270 						  unsigned long opt),
271 		 unsigned long opt, u32 timeout, u8 *hci_status)
272 {
273 	int ret;
274 
275 	/* Serialize all requests */
276 	hci_req_sync_lock(hdev);
277 	/* check the state after obtaing the lock to protect the HCI_UP
278 	 * against any races from hci_dev_do_close when the controller
279 	 * gets removed.
280 	 */
281 	if (test_bit(HCI_UP, &hdev->flags))
282 		ret = __hci_req_sync(hdev, req, opt, timeout, hci_status);
283 	else
284 		ret = -ENETDOWN;
285 	hci_req_sync_unlock(hdev);
286 
287 	return ret;
288 }
289 
290 struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode, u32 plen,
291 				const void *param)
292 {
293 	int len = HCI_COMMAND_HDR_SIZE + plen;
294 	struct hci_command_hdr *hdr;
295 	struct sk_buff *skb;
296 
297 	skb = bt_skb_alloc(len, GFP_ATOMIC);
298 	if (!skb)
299 		return NULL;
300 
301 	hdr = skb_put(skb, HCI_COMMAND_HDR_SIZE);
302 	hdr->opcode = cpu_to_le16(opcode);
303 	hdr->plen   = plen;
304 
305 	if (plen)
306 		skb_put_data(skb, param, plen);
307 
308 	bt_dev_dbg(hdev, "skb len %d", skb->len);
309 
310 	hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
311 	hci_skb_opcode(skb) = opcode;
312 
313 	return skb;
314 }
315 
316 /* Queue a command to an asynchronous HCI request */
317 void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
318 		    const void *param, u8 event)
319 {
320 	struct hci_dev *hdev = req->hdev;
321 	struct sk_buff *skb;
322 
323 	bt_dev_dbg(hdev, "opcode 0x%4.4x plen %d", opcode, plen);
324 
325 	/* If an error occurred during request building, there is no point in
326 	 * queueing the HCI command. We can simply return.
327 	 */
328 	if (req->err)
329 		return;
330 
331 	skb = hci_prepare_cmd(hdev, opcode, plen, param);
332 	if (!skb) {
333 		bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)",
334 			   opcode);
335 		req->err = -ENOMEM;
336 		return;
337 	}
338 
339 	if (skb_queue_empty(&req->cmd_q))
340 		bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
341 
342 	bt_cb(skb)->hci.req_event = event;
343 
344 	skb_queue_tail(&req->cmd_q, skb);
345 }
346 
347 void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
348 		 const void *param)
349 {
350 	hci_req_add_ev(req, opcode, plen, param, 0);
351 }
352 
353 void __hci_req_write_fast_connectable(struct hci_request *req, bool enable)
354 {
355 	struct hci_dev *hdev = req->hdev;
356 	struct hci_cp_write_page_scan_activity acp;
357 	u8 type;
358 
359 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
360 		return;
361 
362 	if (hdev->hci_ver < BLUETOOTH_VER_1_2)
363 		return;
364 
365 	if (enable) {
366 		type = PAGE_SCAN_TYPE_INTERLACED;
367 
368 		/* 160 msec page scan interval */
369 		acp.interval = cpu_to_le16(0x0100);
370 	} else {
371 		type = hdev->def_page_scan_type;
372 		acp.interval = cpu_to_le16(hdev->def_page_scan_int);
373 	}
374 
375 	acp.window = cpu_to_le16(hdev->def_page_scan_window);
376 
377 	if (__cpu_to_le16(hdev->page_scan_interval) != acp.interval ||
378 	    __cpu_to_le16(hdev->page_scan_window) != acp.window)
379 		hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY,
380 			    sizeof(acp), &acp);
381 
382 	if (hdev->page_scan_type != type)
383 		hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type);
384 }
385 
386 static void start_interleave_scan(struct hci_dev *hdev)
387 {
388 	hdev->interleave_scan_state = INTERLEAVE_SCAN_NO_FILTER;
389 	queue_delayed_work(hdev->req_workqueue,
390 			   &hdev->interleave_scan, 0);
391 }
392 
393 static bool is_interleave_scanning(struct hci_dev *hdev)
394 {
395 	return hdev->interleave_scan_state != INTERLEAVE_SCAN_NONE;
396 }
397 
398 static void cancel_interleave_scan(struct hci_dev *hdev)
399 {
400 	bt_dev_dbg(hdev, "cancelling interleave scan");
401 
402 	cancel_delayed_work_sync(&hdev->interleave_scan);
403 
404 	hdev->interleave_scan_state = INTERLEAVE_SCAN_NONE;
405 }
406 
407 /* Return true if interleave_scan wasn't started until exiting this function,
408  * otherwise, return false
409  */
410 static bool __hci_update_interleaved_scan(struct hci_dev *hdev)
411 {
412 	/* Do interleaved scan only if all of the following are true:
413 	 * - There is at least one ADV monitor
414 	 * - At least one pending LE connection or one device to be scanned for
415 	 * - Monitor offloading is not supported
416 	 * If so, we should alternate between allowlist scan and one without
417 	 * any filters to save power.
418 	 */
419 	bool use_interleaving = hci_is_adv_monitoring(hdev) &&
420 				!(list_empty(&hdev->pend_le_conns) &&
421 				  list_empty(&hdev->pend_le_reports)) &&
422 				hci_get_adv_monitor_offload_ext(hdev) ==
423 				    HCI_ADV_MONITOR_EXT_NONE;
424 	bool is_interleaving = is_interleave_scanning(hdev);
425 
426 	if (use_interleaving && !is_interleaving) {
427 		start_interleave_scan(hdev);
428 		bt_dev_dbg(hdev, "starting interleave scan");
429 		return true;
430 	}
431 
432 	if (!use_interleaving && is_interleaving)
433 		cancel_interleave_scan(hdev);
434 
435 	return false;
436 }
437 
438 /* This function controls the background scanning based on hdev->pend_le_conns
439  * list. If there are pending LE connection we start the background scanning,
440  * otherwise we stop it.
441  *
442  * This function requires the caller holds hdev->lock.
443  */
444 static void __hci_update_background_scan(struct hci_request *req)
445 {
446 	struct hci_dev *hdev = req->hdev;
447 
448 	if (!test_bit(HCI_UP, &hdev->flags) ||
449 	    test_bit(HCI_INIT, &hdev->flags) ||
450 	    hci_dev_test_flag(hdev, HCI_SETUP) ||
451 	    hci_dev_test_flag(hdev, HCI_CONFIG) ||
452 	    hci_dev_test_flag(hdev, HCI_AUTO_OFF) ||
453 	    hci_dev_test_flag(hdev, HCI_UNREGISTER))
454 		return;
455 
456 	/* No point in doing scanning if LE support hasn't been enabled */
457 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
458 		return;
459 
460 	/* If discovery is active don't interfere with it */
461 	if (hdev->discovery.state != DISCOVERY_STOPPED)
462 		return;
463 
464 	/* Reset RSSI and UUID filters when starting background scanning
465 	 * since these filters are meant for service discovery only.
466 	 *
467 	 * The Start Discovery and Start Service Discovery operations
468 	 * ensure to set proper values for RSSI threshold and UUID
469 	 * filter list. So it is safe to just reset them here.
470 	 */
471 	hci_discovery_filter_clear(hdev);
472 
473 	bt_dev_dbg(hdev, "ADV monitoring is %s",
474 		   hci_is_adv_monitoring(hdev) ? "on" : "off");
475 
476 	if (list_empty(&hdev->pend_le_conns) &&
477 	    list_empty(&hdev->pend_le_reports) &&
478 	    !hci_is_adv_monitoring(hdev)) {
479 		/* If there is no pending LE connections or devices
480 		 * to be scanned for or no ADV monitors, we should stop the
481 		 * background scanning.
482 		 */
483 
484 		/* If controller is not scanning we are done. */
485 		if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
486 			return;
487 
488 		hci_req_add_le_scan_disable(req, false);
489 
490 		bt_dev_dbg(hdev, "stopping background scanning");
491 	} else {
492 		/* If there is at least one pending LE connection, we should
493 		 * keep the background scan running.
494 		 */
495 
496 		/* If controller is connecting, we should not start scanning
497 		 * since some controllers are not able to scan and connect at
498 		 * the same time.
499 		 */
500 		if (hci_lookup_le_connect(hdev))
501 			return;
502 
503 		/* If controller is currently scanning, we stop it to ensure we
504 		 * don't miss any advertising (due to duplicates filter).
505 		 */
506 		if (hci_dev_test_flag(hdev, HCI_LE_SCAN))
507 			hci_req_add_le_scan_disable(req, false);
508 
509 		hci_req_add_le_passive_scan(req);
510 		bt_dev_dbg(hdev, "starting background scanning");
511 	}
512 }
513 
514 void __hci_req_update_name(struct hci_request *req)
515 {
516 	struct hci_dev *hdev = req->hdev;
517 	struct hci_cp_write_local_name cp;
518 
519 	memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
520 
521 	hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
522 }
523 
524 #define PNP_INFO_SVCLASS_ID		0x1200
525 
526 static u8 *create_uuid16_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
527 {
528 	u8 *ptr = data, *uuids_start = NULL;
529 	struct bt_uuid *uuid;
530 
531 	if (len < 4)
532 		return ptr;
533 
534 	list_for_each_entry(uuid, &hdev->uuids, list) {
535 		u16 uuid16;
536 
537 		if (uuid->size != 16)
538 			continue;
539 
540 		uuid16 = get_unaligned_le16(&uuid->uuid[12]);
541 		if (uuid16 < 0x1100)
542 			continue;
543 
544 		if (uuid16 == PNP_INFO_SVCLASS_ID)
545 			continue;
546 
547 		if (!uuids_start) {
548 			uuids_start = ptr;
549 			uuids_start[0] = 1;
550 			uuids_start[1] = EIR_UUID16_ALL;
551 			ptr += 2;
552 		}
553 
554 		/* Stop if not enough space to put next UUID */
555 		if ((ptr - data) + sizeof(u16) > len) {
556 			uuids_start[1] = EIR_UUID16_SOME;
557 			break;
558 		}
559 
560 		*ptr++ = (uuid16 & 0x00ff);
561 		*ptr++ = (uuid16 & 0xff00) >> 8;
562 		uuids_start[0] += sizeof(uuid16);
563 	}
564 
565 	return ptr;
566 }
567 
568 static u8 *create_uuid32_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
569 {
570 	u8 *ptr = data, *uuids_start = NULL;
571 	struct bt_uuid *uuid;
572 
573 	if (len < 6)
574 		return ptr;
575 
576 	list_for_each_entry(uuid, &hdev->uuids, list) {
577 		if (uuid->size != 32)
578 			continue;
579 
580 		if (!uuids_start) {
581 			uuids_start = ptr;
582 			uuids_start[0] = 1;
583 			uuids_start[1] = EIR_UUID32_ALL;
584 			ptr += 2;
585 		}
586 
587 		/* Stop if not enough space to put next UUID */
588 		if ((ptr - data) + sizeof(u32) > len) {
589 			uuids_start[1] = EIR_UUID32_SOME;
590 			break;
591 		}
592 
593 		memcpy(ptr, &uuid->uuid[12], sizeof(u32));
594 		ptr += sizeof(u32);
595 		uuids_start[0] += sizeof(u32);
596 	}
597 
598 	return ptr;
599 }
600 
601 static u8 *create_uuid128_list(struct hci_dev *hdev, u8 *data, ptrdiff_t len)
602 {
603 	u8 *ptr = data, *uuids_start = NULL;
604 	struct bt_uuid *uuid;
605 
606 	if (len < 18)
607 		return ptr;
608 
609 	list_for_each_entry(uuid, &hdev->uuids, list) {
610 		if (uuid->size != 128)
611 			continue;
612 
613 		if (!uuids_start) {
614 			uuids_start = ptr;
615 			uuids_start[0] = 1;
616 			uuids_start[1] = EIR_UUID128_ALL;
617 			ptr += 2;
618 		}
619 
620 		/* Stop if not enough space to put next UUID */
621 		if ((ptr - data) + 16 > len) {
622 			uuids_start[1] = EIR_UUID128_SOME;
623 			break;
624 		}
625 
626 		memcpy(ptr, uuid->uuid, 16);
627 		ptr += 16;
628 		uuids_start[0] += 16;
629 	}
630 
631 	return ptr;
632 }
633 
634 static void create_eir(struct hci_dev *hdev, u8 *data)
635 {
636 	u8 *ptr = data;
637 	size_t name_len;
638 
639 	name_len = strlen(hdev->dev_name);
640 
641 	if (name_len > 0) {
642 		/* EIR Data type */
643 		if (name_len > 48) {
644 			name_len = 48;
645 			ptr[1] = EIR_NAME_SHORT;
646 		} else
647 			ptr[1] = EIR_NAME_COMPLETE;
648 
649 		/* EIR Data length */
650 		ptr[0] = name_len + 1;
651 
652 		memcpy(ptr + 2, hdev->dev_name, name_len);
653 
654 		ptr += (name_len + 2);
655 	}
656 
657 	if (hdev->inq_tx_power != HCI_TX_POWER_INVALID) {
658 		ptr[0] = 2;
659 		ptr[1] = EIR_TX_POWER;
660 		ptr[2] = (u8) hdev->inq_tx_power;
661 
662 		ptr += 3;
663 	}
664 
665 	if (hdev->devid_source > 0) {
666 		ptr[0] = 9;
667 		ptr[1] = EIR_DEVICE_ID;
668 
669 		put_unaligned_le16(hdev->devid_source, ptr + 2);
670 		put_unaligned_le16(hdev->devid_vendor, ptr + 4);
671 		put_unaligned_le16(hdev->devid_product, ptr + 6);
672 		put_unaligned_le16(hdev->devid_version, ptr + 8);
673 
674 		ptr += 10;
675 	}
676 
677 	ptr = create_uuid16_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
678 	ptr = create_uuid32_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
679 	ptr = create_uuid128_list(hdev, ptr, HCI_MAX_EIR_LENGTH - (ptr - data));
680 }
681 
682 void __hci_req_update_eir(struct hci_request *req)
683 {
684 	struct hci_dev *hdev = req->hdev;
685 	struct hci_cp_write_eir cp;
686 
687 	if (!hdev_is_powered(hdev))
688 		return;
689 
690 	if (!lmp_ext_inq_capable(hdev))
691 		return;
692 
693 	if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
694 		return;
695 
696 	if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE))
697 		return;
698 
699 	memset(&cp, 0, sizeof(cp));
700 
701 	create_eir(hdev, cp.data);
702 
703 	if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
704 		return;
705 
706 	memcpy(hdev->eir, cp.data, sizeof(cp.data));
707 
708 	hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
709 }
710 
711 void hci_req_add_le_scan_disable(struct hci_request *req, bool rpa_le_conn)
712 {
713 	struct hci_dev *hdev = req->hdev;
714 
715 	if (hdev->scanning_paused) {
716 		bt_dev_dbg(hdev, "Scanning is paused for suspend");
717 		return;
718 	}
719 
720 	if (hdev->suspended)
721 		set_bit(SUSPEND_SCAN_DISABLE, hdev->suspend_tasks);
722 
723 	if (use_ext_scan(hdev)) {
724 		struct hci_cp_le_set_ext_scan_enable cp;
725 
726 		memset(&cp, 0, sizeof(cp));
727 		cp.enable = LE_SCAN_DISABLE;
728 		hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE, sizeof(cp),
729 			    &cp);
730 	} else {
731 		struct hci_cp_le_set_scan_enable cp;
732 
733 		memset(&cp, 0, sizeof(cp));
734 		cp.enable = LE_SCAN_DISABLE;
735 		hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
736 	}
737 
738 	/* Disable address resolution */
739 	if (use_ll_privacy(hdev) &&
740 	    hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
741 	    hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION) && !rpa_le_conn) {
742 		__u8 enable = 0x00;
743 
744 		hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable);
745 	}
746 }
747 
748 static void del_from_accept_list(struct hci_request *req, bdaddr_t *bdaddr,
749 				 u8 bdaddr_type)
750 {
751 	struct hci_cp_le_del_from_accept_list cp;
752 
753 	cp.bdaddr_type = bdaddr_type;
754 	bacpy(&cp.bdaddr, bdaddr);
755 
756 	bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from accept list", &cp.bdaddr,
757 		   cp.bdaddr_type);
758 	hci_req_add(req, HCI_OP_LE_DEL_FROM_ACCEPT_LIST, sizeof(cp), &cp);
759 
760 	if (use_ll_privacy(req->hdev) &&
761 	    hci_dev_test_flag(req->hdev, HCI_ENABLE_LL_PRIVACY)) {
762 		struct smp_irk *irk;
763 
764 		irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
765 		if (irk) {
766 			struct hci_cp_le_del_from_resolv_list cp;
767 
768 			cp.bdaddr_type = bdaddr_type;
769 			bacpy(&cp.bdaddr, bdaddr);
770 
771 			hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST,
772 				    sizeof(cp), &cp);
773 		}
774 	}
775 }
776 
777 /* Adds connection to accept list if needed. On error, returns -1. */
778 static int add_to_accept_list(struct hci_request *req,
779 			      struct hci_conn_params *params, u8 *num_entries,
780 			      bool allow_rpa)
781 {
782 	struct hci_cp_le_add_to_accept_list cp;
783 	struct hci_dev *hdev = req->hdev;
784 
785 	/* Already in accept list */
786 	if (hci_bdaddr_list_lookup(&hdev->le_accept_list, &params->addr,
787 				   params->addr_type))
788 		return 0;
789 
790 	/* Select filter policy to accept all advertising */
791 	if (*num_entries >= hdev->le_accept_list_size)
792 		return -1;
793 
794 	/* Accept list can not be used with RPAs */
795 	if (!allow_rpa &&
796 	    !hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
797 	    hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
798 		return -1;
799 	}
800 
801 	/* During suspend, only wakeable devices can be in accept list */
802 	if (hdev->suspended && !hci_conn_test_flag(HCI_CONN_FLAG_REMOTE_WAKEUP,
803 						   params->current_flags))
804 		return 0;
805 
806 	*num_entries += 1;
807 	cp.bdaddr_type = params->addr_type;
808 	bacpy(&cp.bdaddr, &params->addr);
809 
810 	bt_dev_dbg(hdev, "Add %pMR (0x%x) to accept list", &cp.bdaddr,
811 		   cp.bdaddr_type);
812 	hci_req_add(req, HCI_OP_LE_ADD_TO_ACCEPT_LIST, sizeof(cp), &cp);
813 
814 	if (use_ll_privacy(hdev) &&
815 	    hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY)) {
816 		struct smp_irk *irk;
817 
818 		irk = hci_find_irk_by_addr(hdev, &params->addr,
819 					   params->addr_type);
820 		if (irk) {
821 			struct hci_cp_le_add_to_resolv_list cp;
822 
823 			cp.bdaddr_type = params->addr_type;
824 			bacpy(&cp.bdaddr, &params->addr);
825 			memcpy(cp.peer_irk, irk->val, 16);
826 
827 			if (hci_dev_test_flag(hdev, HCI_PRIVACY))
828 				memcpy(cp.local_irk, hdev->irk, 16);
829 			else
830 				memset(cp.local_irk, 0, 16);
831 
832 			hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST,
833 				    sizeof(cp), &cp);
834 		}
835 	}
836 
837 	return 0;
838 }
839 
840 static u8 update_accept_list(struct hci_request *req)
841 {
842 	struct hci_dev *hdev = req->hdev;
843 	struct hci_conn_params *params;
844 	struct bdaddr_list *b;
845 	u8 num_entries = 0;
846 	bool pend_conn, pend_report;
847 	/* We allow usage of accept list even with RPAs in suspend. In the worst
848 	 * case, we won't be able to wake from devices that use the privacy1.2
849 	 * features. Additionally, once we support privacy1.2 and IRK
850 	 * offloading, we can update this to also check for those conditions.
851 	 */
852 	bool allow_rpa = hdev->suspended;
853 
854 	if (use_ll_privacy(hdev) &&
855 	    hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY))
856 		allow_rpa = true;
857 
858 	/* Go through the current accept list programmed into the
859 	 * controller one by one and check if that address is still
860 	 * in the list of pending connections or list of devices to
861 	 * report. If not present in either list, then queue the
862 	 * command to remove it from the controller.
863 	 */
864 	list_for_each_entry(b, &hdev->le_accept_list, list) {
865 		pend_conn = hci_pend_le_action_lookup(&hdev->pend_le_conns,
866 						      &b->bdaddr,
867 						      b->bdaddr_type);
868 		pend_report = hci_pend_le_action_lookup(&hdev->pend_le_reports,
869 							&b->bdaddr,
870 							b->bdaddr_type);
871 
872 		/* If the device is not likely to connect or report,
873 		 * remove it from the accept list.
874 		 */
875 		if (!pend_conn && !pend_report) {
876 			del_from_accept_list(req, &b->bdaddr, b->bdaddr_type);
877 			continue;
878 		}
879 
880 		/* Accept list can not be used with RPAs */
881 		if (!allow_rpa &&
882 		    !hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
883 		    hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
884 			return 0x00;
885 		}
886 
887 		num_entries++;
888 	}
889 
890 	/* Since all no longer valid accept list entries have been
891 	 * removed, walk through the list of pending connections
892 	 * and ensure that any new device gets programmed into
893 	 * the controller.
894 	 *
895 	 * If the list of the devices is larger than the list of
896 	 * available accept list entries in the controller, then
897 	 * just abort and return filer policy value to not use the
898 	 * accept list.
899 	 */
900 	list_for_each_entry(params, &hdev->pend_le_conns, action) {
901 		if (add_to_accept_list(req, params, &num_entries, allow_rpa))
902 			return 0x00;
903 	}
904 
905 	/* After adding all new pending connections, walk through
906 	 * the list of pending reports and also add these to the
907 	 * accept list if there is still space. Abort if space runs out.
908 	 */
909 	list_for_each_entry(params, &hdev->pend_le_reports, action) {
910 		if (add_to_accept_list(req, params, &num_entries, allow_rpa))
911 			return 0x00;
912 	}
913 
914 	/* Use the allowlist unless the following conditions are all true:
915 	 * - We are not currently suspending
916 	 * - There are 1 or more ADV monitors registered and it's not offloaded
917 	 * - Interleaved scanning is not currently using the allowlist
918 	 */
919 	if (!idr_is_empty(&hdev->adv_monitors_idr) && !hdev->suspended &&
920 	    hci_get_adv_monitor_offload_ext(hdev) == HCI_ADV_MONITOR_EXT_NONE &&
921 	    hdev->interleave_scan_state != INTERLEAVE_SCAN_ALLOWLIST)
922 		return 0x00;
923 
924 	/* Select filter policy to use accept list */
925 	return 0x01;
926 }
927 
928 static bool scan_use_rpa(struct hci_dev *hdev)
929 {
930 	return hci_dev_test_flag(hdev, HCI_PRIVACY);
931 }
932 
933 static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval,
934 			       u16 window, u8 own_addr_type, u8 filter_policy,
935 			       bool filter_dup, bool addr_resolv)
936 {
937 	struct hci_dev *hdev = req->hdev;
938 
939 	if (hdev->scanning_paused) {
940 		bt_dev_dbg(hdev, "Scanning is paused for suspend");
941 		return;
942 	}
943 
944 	if (use_ll_privacy(hdev) &&
945 	    hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
946 	    addr_resolv) {
947 		u8 enable = 0x01;
948 
949 		hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable);
950 	}
951 
952 	/* Use ext scanning if set ext scan param and ext scan enable is
953 	 * supported
954 	 */
955 	if (use_ext_scan(hdev)) {
956 		struct hci_cp_le_set_ext_scan_params *ext_param_cp;
957 		struct hci_cp_le_set_ext_scan_enable ext_enable_cp;
958 		struct hci_cp_le_scan_phy_params *phy_params;
959 		u8 data[sizeof(*ext_param_cp) + sizeof(*phy_params) * 2];
960 		u32 plen;
961 
962 		ext_param_cp = (void *)data;
963 		phy_params = (void *)ext_param_cp->data;
964 
965 		memset(ext_param_cp, 0, sizeof(*ext_param_cp));
966 		ext_param_cp->own_addr_type = own_addr_type;
967 		ext_param_cp->filter_policy = filter_policy;
968 
969 		plen = sizeof(*ext_param_cp);
970 
971 		if (scan_1m(hdev) || scan_2m(hdev)) {
972 			ext_param_cp->scanning_phys |= LE_SCAN_PHY_1M;
973 
974 			memset(phy_params, 0, sizeof(*phy_params));
975 			phy_params->type = type;
976 			phy_params->interval = cpu_to_le16(interval);
977 			phy_params->window = cpu_to_le16(window);
978 
979 			plen += sizeof(*phy_params);
980 			phy_params++;
981 		}
982 
983 		if (scan_coded(hdev)) {
984 			ext_param_cp->scanning_phys |= LE_SCAN_PHY_CODED;
985 
986 			memset(phy_params, 0, sizeof(*phy_params));
987 			phy_params->type = type;
988 			phy_params->interval = cpu_to_le16(interval);
989 			phy_params->window = cpu_to_le16(window);
990 
991 			plen += sizeof(*phy_params);
992 			phy_params++;
993 		}
994 
995 		hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_PARAMS,
996 			    plen, ext_param_cp);
997 
998 		memset(&ext_enable_cp, 0, sizeof(ext_enable_cp));
999 		ext_enable_cp.enable = LE_SCAN_ENABLE;
1000 		ext_enable_cp.filter_dup = filter_dup;
1001 
1002 		hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE,
1003 			    sizeof(ext_enable_cp), &ext_enable_cp);
1004 	} else {
1005 		struct hci_cp_le_set_scan_param param_cp;
1006 		struct hci_cp_le_set_scan_enable enable_cp;
1007 
1008 		memset(&param_cp, 0, sizeof(param_cp));
1009 		param_cp.type = type;
1010 		param_cp.interval = cpu_to_le16(interval);
1011 		param_cp.window = cpu_to_le16(window);
1012 		param_cp.own_address_type = own_addr_type;
1013 		param_cp.filter_policy = filter_policy;
1014 		hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp),
1015 			    &param_cp);
1016 
1017 		memset(&enable_cp, 0, sizeof(enable_cp));
1018 		enable_cp.enable = LE_SCAN_ENABLE;
1019 		enable_cp.filter_dup = filter_dup;
1020 		hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp),
1021 			    &enable_cp);
1022 	}
1023 }
1024 
1025 /* Returns true if an le connection is in the scanning state */
1026 static inline bool hci_is_le_conn_scanning(struct hci_dev *hdev)
1027 {
1028 	struct hci_conn_hash *h = &hdev->conn_hash;
1029 	struct hci_conn  *c;
1030 
1031 	rcu_read_lock();
1032 
1033 	list_for_each_entry_rcu(c, &h->list, list) {
1034 		if (c->type == LE_LINK && c->state == BT_CONNECT &&
1035 		    test_bit(HCI_CONN_SCANNING, &c->flags)) {
1036 			rcu_read_unlock();
1037 			return true;
1038 		}
1039 	}
1040 
1041 	rcu_read_unlock();
1042 
1043 	return false;
1044 }
1045 
1046 /* Ensure to call hci_req_add_le_scan_disable() first to disable the
1047  * controller based address resolution to be able to reconfigure
1048  * resolving list.
1049  */
1050 void hci_req_add_le_passive_scan(struct hci_request *req)
1051 {
1052 	struct hci_dev *hdev = req->hdev;
1053 	u8 own_addr_type;
1054 	u8 filter_policy;
1055 	u16 window, interval;
1056 	/* Default is to enable duplicates filter */
1057 	u8 filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
1058 	/* Background scanning should run with address resolution */
1059 	bool addr_resolv = true;
1060 
1061 	if (hdev->scanning_paused) {
1062 		bt_dev_dbg(hdev, "Scanning is paused for suspend");
1063 		return;
1064 	}
1065 
1066 	/* Set require_privacy to false since no SCAN_REQ are send
1067 	 * during passive scanning. Not using an non-resolvable address
1068 	 * here is important so that peer devices using direct
1069 	 * advertising with our address will be correctly reported
1070 	 * by the controller.
1071 	 */
1072 	if (hci_update_random_address(req, false, scan_use_rpa(hdev),
1073 				      &own_addr_type))
1074 		return;
1075 
1076 	if (hdev->enable_advmon_interleave_scan &&
1077 	    __hci_update_interleaved_scan(hdev))
1078 		return;
1079 
1080 	bt_dev_dbg(hdev, "interleave state %d", hdev->interleave_scan_state);
1081 	/* Adding or removing entries from the accept list must
1082 	 * happen before enabling scanning. The controller does
1083 	 * not allow accept list modification while scanning.
1084 	 */
1085 	filter_policy = update_accept_list(req);
1086 
1087 	/* When the controller is using random resolvable addresses and
1088 	 * with that having LE privacy enabled, then controllers with
1089 	 * Extended Scanner Filter Policies support can now enable support
1090 	 * for handling directed advertising.
1091 	 *
1092 	 * So instead of using filter polices 0x00 (no accept list)
1093 	 * and 0x01 (accept list enabled) use the new filter policies
1094 	 * 0x02 (no accept list) and 0x03 (accept list enabled).
1095 	 */
1096 	if (hci_dev_test_flag(hdev, HCI_PRIVACY) &&
1097 	    (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY))
1098 		filter_policy |= 0x02;
1099 
1100 	if (hdev->suspended) {
1101 		window = hdev->le_scan_window_suspend;
1102 		interval = hdev->le_scan_int_suspend;
1103 
1104 		set_bit(SUSPEND_SCAN_ENABLE, hdev->suspend_tasks);
1105 	} else if (hci_is_le_conn_scanning(hdev)) {
1106 		window = hdev->le_scan_window_connect;
1107 		interval = hdev->le_scan_int_connect;
1108 	} else if (hci_is_adv_monitoring(hdev)) {
1109 		window = hdev->le_scan_window_adv_monitor;
1110 		interval = hdev->le_scan_int_adv_monitor;
1111 
1112 		/* Disable duplicates filter when scanning for advertisement
1113 		 * monitor for the following reasons.
1114 		 *
1115 		 * For HW pattern filtering (ex. MSFT), Realtek and Qualcomm
1116 		 * controllers ignore RSSI_Sampling_Period when the duplicates
1117 		 * filter is enabled.
1118 		 *
1119 		 * For SW pattern filtering, when we're not doing interleaved
1120 		 * scanning, it is necessary to disable duplicates filter,
1121 		 * otherwise hosts can only receive one advertisement and it's
1122 		 * impossible to know if a peer is still in range.
1123 		 */
1124 		filter_dup = LE_SCAN_FILTER_DUP_DISABLE;
1125 	} else {
1126 		window = hdev->le_scan_window;
1127 		interval = hdev->le_scan_interval;
1128 	}
1129 
1130 	bt_dev_dbg(hdev, "LE passive scan with accept list = %d",
1131 		   filter_policy);
1132 	hci_req_start_scan(req, LE_SCAN_PASSIVE, interval, window,
1133 			   own_addr_type, filter_policy, filter_dup,
1134 			   addr_resolv);
1135 }
1136 
1137 static bool adv_instance_is_scannable(struct hci_dev *hdev, u8 instance)
1138 {
1139 	struct adv_info *adv_instance;
1140 
1141 	/* Instance 0x00 always set local name */
1142 	if (instance == 0x00)
1143 		return true;
1144 
1145 	adv_instance = hci_find_adv_instance(hdev, instance);
1146 	if (!adv_instance)
1147 		return false;
1148 
1149 	if (adv_instance->flags & MGMT_ADV_FLAG_APPEARANCE ||
1150 	    adv_instance->flags & MGMT_ADV_FLAG_LOCAL_NAME)
1151 		return true;
1152 
1153 	return adv_instance->scan_rsp_len ? true : false;
1154 }
1155 
1156 static void hci_req_clear_event_filter(struct hci_request *req)
1157 {
1158 	struct hci_cp_set_event_filter f;
1159 
1160 	if (!hci_dev_test_flag(req->hdev, HCI_BREDR_ENABLED))
1161 		return;
1162 
1163 	if (hci_dev_test_flag(req->hdev, HCI_EVENT_FILTER_CONFIGURED)) {
1164 		memset(&f, 0, sizeof(f));
1165 		f.flt_type = HCI_FLT_CLEAR_ALL;
1166 		hci_req_add(req, HCI_OP_SET_EVENT_FLT, 1, &f);
1167 	}
1168 }
1169 
1170 static void hci_req_set_event_filter(struct hci_request *req)
1171 {
1172 	struct bdaddr_list_with_flags *b;
1173 	struct hci_cp_set_event_filter f;
1174 	struct hci_dev *hdev = req->hdev;
1175 	u8 scan = SCAN_DISABLED;
1176 	bool scanning = test_bit(HCI_PSCAN, &hdev->flags);
1177 
1178 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
1179 		return;
1180 
1181 	/* Always clear event filter when starting */
1182 	hci_req_clear_event_filter(req);
1183 
1184 	list_for_each_entry(b, &hdev->accept_list, list) {
1185 		if (!hci_conn_test_flag(HCI_CONN_FLAG_REMOTE_WAKEUP,
1186 					b->current_flags))
1187 			continue;
1188 
1189 		memset(&f, 0, sizeof(f));
1190 		bacpy(&f.addr_conn_flt.bdaddr, &b->bdaddr);
1191 		f.flt_type = HCI_FLT_CONN_SETUP;
1192 		f.cond_type = HCI_CONN_SETUP_ALLOW_BDADDR;
1193 		f.addr_conn_flt.auto_accept = HCI_CONN_SETUP_AUTO_ON;
1194 
1195 		bt_dev_dbg(hdev, "Adding event filters for %pMR", &b->bdaddr);
1196 		hci_req_add(req, HCI_OP_SET_EVENT_FLT, sizeof(f), &f);
1197 		scan = SCAN_PAGE;
1198 	}
1199 
1200 	if (scan && !scanning) {
1201 		set_bit(SUSPEND_SCAN_ENABLE, hdev->suspend_tasks);
1202 		hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1203 	} else if (!scan && scanning) {
1204 		set_bit(SUSPEND_SCAN_DISABLE, hdev->suspend_tasks);
1205 		hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
1206 	}
1207 }
1208 
1209 static void cancel_adv_timeout(struct hci_dev *hdev)
1210 {
1211 	if (hdev->adv_instance_timeout) {
1212 		hdev->adv_instance_timeout = 0;
1213 		cancel_delayed_work(&hdev->adv_instance_expire);
1214 	}
1215 }
1216 
1217 /* This function requires the caller holds hdev->lock */
1218 void __hci_req_pause_adv_instances(struct hci_request *req)
1219 {
1220 	bt_dev_dbg(req->hdev, "Pausing advertising instances");
1221 
1222 	/* Call to disable any advertisements active on the controller.
1223 	 * This will succeed even if no advertisements are configured.
1224 	 */
1225 	__hci_req_disable_advertising(req);
1226 
1227 	/* If we are using software rotation, pause the loop */
1228 	if (!ext_adv_capable(req->hdev))
1229 		cancel_adv_timeout(req->hdev);
1230 }
1231 
1232 /* This function requires the caller holds hdev->lock */
1233 static void __hci_req_resume_adv_instances(struct hci_request *req)
1234 {
1235 	struct adv_info *adv;
1236 
1237 	bt_dev_dbg(req->hdev, "Resuming advertising instances");
1238 
1239 	if (ext_adv_capable(req->hdev)) {
1240 		/* Call for each tracked instance to be re-enabled */
1241 		list_for_each_entry(adv, &req->hdev->adv_instances, list) {
1242 			__hci_req_enable_ext_advertising(req,
1243 							 adv->instance);
1244 		}
1245 
1246 	} else {
1247 		/* Schedule for most recent instance to be restarted and begin
1248 		 * the software rotation loop
1249 		 */
1250 		__hci_req_schedule_adv_instance(req,
1251 						req->hdev->cur_adv_instance,
1252 						true);
1253 	}
1254 }
1255 
1256 /* This function requires the caller holds hdev->lock */
1257 int hci_req_resume_adv_instances(struct hci_dev *hdev)
1258 {
1259 	struct hci_request req;
1260 
1261 	hci_req_init(&req, hdev);
1262 	__hci_req_resume_adv_instances(&req);
1263 
1264 	return hci_req_run(&req, NULL);
1265 }
1266 
1267 static void suspend_req_complete(struct hci_dev *hdev, u8 status, u16 opcode)
1268 {
1269 	bt_dev_dbg(hdev, "Request complete opcode=0x%x, status=0x%x", opcode,
1270 		   status);
1271 	if (test_bit(SUSPEND_SCAN_ENABLE, hdev->suspend_tasks) ||
1272 	    test_bit(SUSPEND_SCAN_DISABLE, hdev->suspend_tasks)) {
1273 		clear_bit(SUSPEND_SCAN_ENABLE, hdev->suspend_tasks);
1274 		clear_bit(SUSPEND_SCAN_DISABLE, hdev->suspend_tasks);
1275 		wake_up(&hdev->suspend_wait_q);
1276 	}
1277 
1278 	if (test_bit(SUSPEND_SET_ADV_FILTER, hdev->suspend_tasks)) {
1279 		clear_bit(SUSPEND_SET_ADV_FILTER, hdev->suspend_tasks);
1280 		wake_up(&hdev->suspend_wait_q);
1281 	}
1282 }
1283 
1284 static void hci_req_add_set_adv_filter_enable(struct hci_request *req,
1285 					      bool enable)
1286 {
1287 	struct hci_dev *hdev = req->hdev;
1288 
1289 	switch (hci_get_adv_monitor_offload_ext(hdev)) {
1290 	case HCI_ADV_MONITOR_EXT_MSFT:
1291 		msft_req_add_set_filter_enable(req, enable);
1292 		break;
1293 	default:
1294 		return;
1295 	}
1296 
1297 	/* No need to block when enabling since it's on resume path */
1298 	if (hdev->suspended && !enable)
1299 		set_bit(SUSPEND_SET_ADV_FILTER, hdev->suspend_tasks);
1300 }
1301 
1302 /* Call with hci_dev_lock */
1303 void hci_req_prepare_suspend(struct hci_dev *hdev, enum suspended_state next)
1304 {
1305 	int old_state;
1306 	struct hci_conn *conn;
1307 	struct hci_request req;
1308 	u8 page_scan;
1309 	int disconnect_counter;
1310 
1311 	if (next == hdev->suspend_state) {
1312 		bt_dev_dbg(hdev, "Same state before and after: %d", next);
1313 		goto done;
1314 	}
1315 
1316 	hdev->suspend_state = next;
1317 	hci_req_init(&req, hdev);
1318 
1319 	if (next == BT_SUSPEND_DISCONNECT) {
1320 		/* Mark device as suspended */
1321 		hdev->suspended = true;
1322 
1323 		/* Pause discovery if not already stopped */
1324 		old_state = hdev->discovery.state;
1325 		if (old_state != DISCOVERY_STOPPED) {
1326 			set_bit(SUSPEND_PAUSE_DISCOVERY, hdev->suspend_tasks);
1327 			hci_discovery_set_state(hdev, DISCOVERY_STOPPING);
1328 			queue_work(hdev->req_workqueue, &hdev->discov_update);
1329 		}
1330 
1331 		hdev->discovery_paused = true;
1332 		hdev->discovery_old_state = old_state;
1333 
1334 		/* Stop directed advertising */
1335 		old_state = hci_dev_test_flag(hdev, HCI_ADVERTISING);
1336 		if (old_state) {
1337 			set_bit(SUSPEND_PAUSE_ADVERTISING, hdev->suspend_tasks);
1338 			cancel_delayed_work(&hdev->discov_off);
1339 			queue_delayed_work(hdev->req_workqueue,
1340 					   &hdev->discov_off, 0);
1341 		}
1342 
1343 		/* Pause other advertisements */
1344 		if (hdev->adv_instance_cnt)
1345 			__hci_req_pause_adv_instances(&req);
1346 
1347 		hdev->advertising_paused = true;
1348 		hdev->advertising_old_state = old_state;
1349 
1350 		/* Disable page scan if enabled */
1351 		if (test_bit(HCI_PSCAN, &hdev->flags)) {
1352 			page_scan = SCAN_DISABLED;
1353 			hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1,
1354 				    &page_scan);
1355 			set_bit(SUSPEND_SCAN_DISABLE, hdev->suspend_tasks);
1356 		}
1357 
1358 		/* Disable LE passive scan if enabled */
1359 		if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
1360 			cancel_interleave_scan(hdev);
1361 			hci_req_add_le_scan_disable(&req, false);
1362 		}
1363 
1364 		/* Disable advertisement filters */
1365 		hci_req_add_set_adv_filter_enable(&req, false);
1366 
1367 		/* Prevent disconnects from causing scanning to be re-enabled */
1368 		hdev->scanning_paused = true;
1369 
1370 		/* Run commands before disconnecting */
1371 		hci_req_run(&req, suspend_req_complete);
1372 
1373 		disconnect_counter = 0;
1374 		/* Soft disconnect everything (power off) */
1375 		list_for_each_entry(conn, &hdev->conn_hash.list, list) {
1376 			hci_disconnect(conn, HCI_ERROR_REMOTE_POWER_OFF);
1377 			disconnect_counter++;
1378 		}
1379 
1380 		if (disconnect_counter > 0) {
1381 			bt_dev_dbg(hdev,
1382 				   "Had %d disconnects. Will wait on them",
1383 				   disconnect_counter);
1384 			set_bit(SUSPEND_DISCONNECTING, hdev->suspend_tasks);
1385 		}
1386 	} else if (next == BT_SUSPEND_CONFIGURE_WAKE) {
1387 		/* Unpause to take care of updating scanning params */
1388 		hdev->scanning_paused = false;
1389 		/* Enable event filter for paired devices */
1390 		hci_req_set_event_filter(&req);
1391 		/* Enable passive scan at lower duty cycle */
1392 		__hci_update_background_scan(&req);
1393 		/* Pause scan changes again. */
1394 		hdev->scanning_paused = true;
1395 		hci_req_run(&req, suspend_req_complete);
1396 	} else {
1397 		hdev->suspended = false;
1398 		hdev->scanning_paused = false;
1399 
1400 		/* Clear any event filters and restore scan state */
1401 		hci_req_clear_event_filter(&req);
1402 		__hci_req_update_scan(&req);
1403 
1404 		/* Reset passive/background scanning to normal */
1405 		__hci_update_background_scan(&req);
1406 		/* Enable all of the advertisement filters */
1407 		hci_req_add_set_adv_filter_enable(&req, true);
1408 
1409 		/* Unpause directed advertising */
1410 		hdev->advertising_paused = false;
1411 		if (hdev->advertising_old_state) {
1412 			set_bit(SUSPEND_UNPAUSE_ADVERTISING,
1413 				hdev->suspend_tasks);
1414 			hci_dev_set_flag(hdev, HCI_ADVERTISING);
1415 			queue_work(hdev->req_workqueue,
1416 				   &hdev->discoverable_update);
1417 			hdev->advertising_old_state = 0;
1418 		}
1419 
1420 		/* Resume other advertisements */
1421 		if (hdev->adv_instance_cnt)
1422 			__hci_req_resume_adv_instances(&req);
1423 
1424 		/* Unpause discovery */
1425 		hdev->discovery_paused = false;
1426 		if (hdev->discovery_old_state != DISCOVERY_STOPPED &&
1427 		    hdev->discovery_old_state != DISCOVERY_STOPPING) {
1428 			set_bit(SUSPEND_UNPAUSE_DISCOVERY, hdev->suspend_tasks);
1429 			hci_discovery_set_state(hdev, DISCOVERY_STARTING);
1430 			queue_work(hdev->req_workqueue, &hdev->discov_update);
1431 		}
1432 
1433 		hci_req_run(&req, suspend_req_complete);
1434 	}
1435 
1436 	hdev->suspend_state = next;
1437 
1438 done:
1439 	clear_bit(SUSPEND_PREPARE_NOTIFIER, hdev->suspend_tasks);
1440 	wake_up(&hdev->suspend_wait_q);
1441 }
1442 
1443 static bool adv_cur_instance_is_scannable(struct hci_dev *hdev)
1444 {
1445 	return adv_instance_is_scannable(hdev, hdev->cur_adv_instance);
1446 }
1447 
1448 void __hci_req_disable_advertising(struct hci_request *req)
1449 {
1450 	if (ext_adv_capable(req->hdev)) {
1451 		__hci_req_disable_ext_adv_instance(req, 0x00);
1452 
1453 	} else {
1454 		u8 enable = 0x00;
1455 
1456 		hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1457 	}
1458 }
1459 
1460 static u32 get_adv_instance_flags(struct hci_dev *hdev, u8 instance)
1461 {
1462 	u32 flags;
1463 	struct adv_info *adv_instance;
1464 
1465 	if (instance == 0x00) {
1466 		/* Instance 0 always manages the "Tx Power" and "Flags"
1467 		 * fields
1468 		 */
1469 		flags = MGMT_ADV_FLAG_TX_POWER | MGMT_ADV_FLAG_MANAGED_FLAGS;
1470 
1471 		/* For instance 0, the HCI_ADVERTISING_CONNECTABLE setting
1472 		 * corresponds to the "connectable" instance flag.
1473 		 */
1474 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE))
1475 			flags |= MGMT_ADV_FLAG_CONNECTABLE;
1476 
1477 		if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
1478 			flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
1479 		else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
1480 			flags |= MGMT_ADV_FLAG_DISCOV;
1481 
1482 		return flags;
1483 	}
1484 
1485 	adv_instance = hci_find_adv_instance(hdev, instance);
1486 
1487 	/* Return 0 when we got an invalid instance identifier. */
1488 	if (!adv_instance)
1489 		return 0;
1490 
1491 	return adv_instance->flags;
1492 }
1493 
1494 static bool adv_use_rpa(struct hci_dev *hdev, uint32_t flags)
1495 {
1496 	/* If privacy is not enabled don't use RPA */
1497 	if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
1498 		return false;
1499 
1500 	/* If basic privacy mode is enabled use RPA */
1501 	if (!hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY))
1502 		return true;
1503 
1504 	/* If limited privacy mode is enabled don't use RPA if we're
1505 	 * both discoverable and bondable.
1506 	 */
1507 	if ((flags & MGMT_ADV_FLAG_DISCOV) &&
1508 	    hci_dev_test_flag(hdev, HCI_BONDABLE))
1509 		return false;
1510 
1511 	/* We're neither bondable nor discoverable in the limited
1512 	 * privacy mode, therefore use RPA.
1513 	 */
1514 	return true;
1515 }
1516 
1517 static bool is_advertising_allowed(struct hci_dev *hdev, bool connectable)
1518 {
1519 	/* If there is no connection we are OK to advertise. */
1520 	if (hci_conn_num(hdev, LE_LINK) == 0)
1521 		return true;
1522 
1523 	/* Check le_states if there is any connection in peripheral role. */
1524 	if (hdev->conn_hash.le_num_peripheral > 0) {
1525 		/* Peripheral connection state and non connectable mode bit 20.
1526 		 */
1527 		if (!connectable && !(hdev->le_states[2] & 0x10))
1528 			return false;
1529 
1530 		/* Peripheral connection state and connectable mode bit 38
1531 		 * and scannable bit 21.
1532 		 */
1533 		if (connectable && (!(hdev->le_states[4] & 0x40) ||
1534 				    !(hdev->le_states[2] & 0x20)))
1535 			return false;
1536 	}
1537 
1538 	/* Check le_states if there is any connection in central role. */
1539 	if (hci_conn_num(hdev, LE_LINK) != hdev->conn_hash.le_num_peripheral) {
1540 		/* Central connection state and non connectable mode bit 18. */
1541 		if (!connectable && !(hdev->le_states[2] & 0x02))
1542 			return false;
1543 
1544 		/* Central connection state and connectable mode bit 35 and
1545 		 * scannable 19.
1546 		 */
1547 		if (connectable && (!(hdev->le_states[4] & 0x08) ||
1548 				    !(hdev->le_states[2] & 0x08)))
1549 			return false;
1550 	}
1551 
1552 	return true;
1553 }
1554 
1555 void __hci_req_enable_advertising(struct hci_request *req)
1556 {
1557 	struct hci_dev *hdev = req->hdev;
1558 	struct adv_info *adv_instance;
1559 	struct hci_cp_le_set_adv_param cp;
1560 	u8 own_addr_type, enable = 0x01;
1561 	bool connectable;
1562 	u16 adv_min_interval, adv_max_interval;
1563 	u32 flags;
1564 
1565 	flags = get_adv_instance_flags(hdev, hdev->cur_adv_instance);
1566 	adv_instance = hci_find_adv_instance(hdev, hdev->cur_adv_instance);
1567 
1568 	/* If the "connectable" instance flag was not set, then choose between
1569 	 * ADV_IND and ADV_NONCONN_IND based on the global connectable setting.
1570 	 */
1571 	connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) ||
1572 		      mgmt_get_connectable(hdev);
1573 
1574 	if (!is_advertising_allowed(hdev, connectable))
1575 		return;
1576 
1577 	if (hci_dev_test_flag(hdev, HCI_LE_ADV))
1578 		__hci_req_disable_advertising(req);
1579 
1580 	/* Clear the HCI_LE_ADV bit temporarily so that the
1581 	 * hci_update_random_address knows that it's safe to go ahead
1582 	 * and write a new random address. The flag will be set back on
1583 	 * as soon as the SET_ADV_ENABLE HCI command completes.
1584 	 */
1585 	hci_dev_clear_flag(hdev, HCI_LE_ADV);
1586 
1587 	/* Set require_privacy to true only when non-connectable
1588 	 * advertising is used. In that case it is fine to use a
1589 	 * non-resolvable private address.
1590 	 */
1591 	if (hci_update_random_address(req, !connectable,
1592 				      adv_use_rpa(hdev, flags),
1593 				      &own_addr_type) < 0)
1594 		return;
1595 
1596 	memset(&cp, 0, sizeof(cp));
1597 
1598 	if (adv_instance) {
1599 		adv_min_interval = adv_instance->min_interval;
1600 		adv_max_interval = adv_instance->max_interval;
1601 	} else {
1602 		adv_min_interval = hdev->le_adv_min_interval;
1603 		adv_max_interval = hdev->le_adv_max_interval;
1604 	}
1605 
1606 	if (connectable) {
1607 		cp.type = LE_ADV_IND;
1608 	} else {
1609 		if (adv_cur_instance_is_scannable(hdev))
1610 			cp.type = LE_ADV_SCAN_IND;
1611 		else
1612 			cp.type = LE_ADV_NONCONN_IND;
1613 
1614 		if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE) ||
1615 		    hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) {
1616 			adv_min_interval = DISCOV_LE_FAST_ADV_INT_MIN;
1617 			adv_max_interval = DISCOV_LE_FAST_ADV_INT_MAX;
1618 		}
1619 	}
1620 
1621 	cp.min_interval = cpu_to_le16(adv_min_interval);
1622 	cp.max_interval = cpu_to_le16(adv_max_interval);
1623 	cp.own_address_type = own_addr_type;
1624 	cp.channel_map = hdev->le_adv_channel_map;
1625 
1626 	hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
1627 
1628 	hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
1629 }
1630 
1631 u8 append_local_name(struct hci_dev *hdev, u8 *ptr, u8 ad_len)
1632 {
1633 	size_t short_len;
1634 	size_t complete_len;
1635 
1636 	/* no space left for name (+ NULL + type + len) */
1637 	if ((HCI_MAX_AD_LENGTH - ad_len) < HCI_MAX_SHORT_NAME_LENGTH + 3)
1638 		return ad_len;
1639 
1640 	/* use complete name if present and fits */
1641 	complete_len = strlen(hdev->dev_name);
1642 	if (complete_len && complete_len <= HCI_MAX_SHORT_NAME_LENGTH)
1643 		return eir_append_data(ptr, ad_len, EIR_NAME_COMPLETE,
1644 				       hdev->dev_name, complete_len + 1);
1645 
1646 	/* use short name if present */
1647 	short_len = strlen(hdev->short_name);
1648 	if (short_len)
1649 		return eir_append_data(ptr, ad_len, EIR_NAME_SHORT,
1650 				       hdev->short_name, short_len + 1);
1651 
1652 	/* use shortened full name if present, we already know that name
1653 	 * is longer then HCI_MAX_SHORT_NAME_LENGTH
1654 	 */
1655 	if (complete_len) {
1656 		u8 name[HCI_MAX_SHORT_NAME_LENGTH + 1];
1657 
1658 		memcpy(name, hdev->dev_name, HCI_MAX_SHORT_NAME_LENGTH);
1659 		name[HCI_MAX_SHORT_NAME_LENGTH] = '\0';
1660 
1661 		return eir_append_data(ptr, ad_len, EIR_NAME_SHORT, name,
1662 				       sizeof(name));
1663 	}
1664 
1665 	return ad_len;
1666 }
1667 
1668 static u8 append_appearance(struct hci_dev *hdev, u8 *ptr, u8 ad_len)
1669 {
1670 	return eir_append_le16(ptr, ad_len, EIR_APPEARANCE, hdev->appearance);
1671 }
1672 
1673 static u8 create_default_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
1674 {
1675 	u8 scan_rsp_len = 0;
1676 
1677 	if (hdev->appearance)
1678 		scan_rsp_len = append_appearance(hdev, ptr, scan_rsp_len);
1679 
1680 	return append_local_name(hdev, ptr, scan_rsp_len);
1681 }
1682 
1683 static u8 create_instance_scan_rsp_data(struct hci_dev *hdev, u8 instance,
1684 					u8 *ptr)
1685 {
1686 	struct adv_info *adv_instance;
1687 	u32 instance_flags;
1688 	u8 scan_rsp_len = 0;
1689 
1690 	adv_instance = hci_find_adv_instance(hdev, instance);
1691 	if (!adv_instance)
1692 		return 0;
1693 
1694 	instance_flags = adv_instance->flags;
1695 
1696 	if ((instance_flags & MGMT_ADV_FLAG_APPEARANCE) && hdev->appearance)
1697 		scan_rsp_len = append_appearance(hdev, ptr, scan_rsp_len);
1698 
1699 	memcpy(&ptr[scan_rsp_len], adv_instance->scan_rsp_data,
1700 	       adv_instance->scan_rsp_len);
1701 
1702 	scan_rsp_len += adv_instance->scan_rsp_len;
1703 
1704 	if (instance_flags & MGMT_ADV_FLAG_LOCAL_NAME)
1705 		scan_rsp_len = append_local_name(hdev, ptr, scan_rsp_len);
1706 
1707 	return scan_rsp_len;
1708 }
1709 
1710 void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance)
1711 {
1712 	struct hci_dev *hdev = req->hdev;
1713 	u8 len;
1714 
1715 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1716 		return;
1717 
1718 	if (ext_adv_capable(hdev)) {
1719 		struct {
1720 			struct hci_cp_le_set_ext_scan_rsp_data cp;
1721 			u8 data[HCI_MAX_EXT_AD_LENGTH];
1722 		} pdu;
1723 
1724 		memset(&pdu, 0, sizeof(pdu));
1725 
1726 		if (instance)
1727 			len = create_instance_scan_rsp_data(hdev, instance,
1728 							    pdu.data);
1729 		else
1730 			len = create_default_scan_rsp_data(hdev, pdu.data);
1731 
1732 		if (hdev->scan_rsp_data_len == len &&
1733 		    !memcmp(pdu.data, hdev->scan_rsp_data, len))
1734 			return;
1735 
1736 		memcpy(hdev->scan_rsp_data, pdu.data, len);
1737 		hdev->scan_rsp_data_len = len;
1738 
1739 		pdu.cp.handle = instance;
1740 		pdu.cp.length = len;
1741 		pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1742 		pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
1743 
1744 		hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_RSP_DATA,
1745 			    sizeof(pdu.cp) + len, &pdu.cp);
1746 	} else {
1747 		struct hci_cp_le_set_scan_rsp_data cp;
1748 
1749 		memset(&cp, 0, sizeof(cp));
1750 
1751 		if (instance)
1752 			len = create_instance_scan_rsp_data(hdev, instance,
1753 							    cp.data);
1754 		else
1755 			len = create_default_scan_rsp_data(hdev, cp.data);
1756 
1757 		if (hdev->scan_rsp_data_len == len &&
1758 		    !memcmp(cp.data, hdev->scan_rsp_data, len))
1759 			return;
1760 
1761 		memcpy(hdev->scan_rsp_data, cp.data, sizeof(cp.data));
1762 		hdev->scan_rsp_data_len = len;
1763 
1764 		cp.length = len;
1765 
1766 		hci_req_add(req, HCI_OP_LE_SET_SCAN_RSP_DATA, sizeof(cp), &cp);
1767 	}
1768 }
1769 
1770 static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
1771 {
1772 	struct adv_info *adv_instance = NULL;
1773 	u8 ad_len = 0, flags = 0;
1774 	u32 instance_flags;
1775 
1776 	/* Return 0 when the current instance identifier is invalid. */
1777 	if (instance) {
1778 		adv_instance = hci_find_adv_instance(hdev, instance);
1779 		if (!adv_instance)
1780 			return 0;
1781 	}
1782 
1783 	instance_flags = get_adv_instance_flags(hdev, instance);
1784 
1785 	/* If instance already has the flags set skip adding it once
1786 	 * again.
1787 	 */
1788 	if (adv_instance && eir_get_data(adv_instance->adv_data,
1789 					 adv_instance->adv_data_len, EIR_FLAGS,
1790 					 NULL))
1791 		goto skip_flags;
1792 
1793 	/* The Add Advertising command allows userspace to set both the general
1794 	 * and limited discoverable flags.
1795 	 */
1796 	if (instance_flags & MGMT_ADV_FLAG_DISCOV)
1797 		flags |= LE_AD_GENERAL;
1798 
1799 	if (instance_flags & MGMT_ADV_FLAG_LIMITED_DISCOV)
1800 		flags |= LE_AD_LIMITED;
1801 
1802 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
1803 		flags |= LE_AD_NO_BREDR;
1804 
1805 	if (flags || (instance_flags & MGMT_ADV_FLAG_MANAGED_FLAGS)) {
1806 		/* If a discovery flag wasn't provided, simply use the global
1807 		 * settings.
1808 		 */
1809 		if (!flags)
1810 			flags |= mgmt_get_adv_discov_flags(hdev);
1811 
1812 		/* If flags would still be empty, then there is no need to
1813 		 * include the "Flags" AD field".
1814 		 */
1815 		if (flags) {
1816 			ptr[0] = 0x02;
1817 			ptr[1] = EIR_FLAGS;
1818 			ptr[2] = flags;
1819 
1820 			ad_len += 3;
1821 			ptr += 3;
1822 		}
1823 	}
1824 
1825 skip_flags:
1826 	if (adv_instance) {
1827 		memcpy(ptr, adv_instance->adv_data,
1828 		       adv_instance->adv_data_len);
1829 		ad_len += adv_instance->adv_data_len;
1830 		ptr += adv_instance->adv_data_len;
1831 	}
1832 
1833 	if (instance_flags & MGMT_ADV_FLAG_TX_POWER) {
1834 		s8 adv_tx_power;
1835 
1836 		if (ext_adv_capable(hdev)) {
1837 			if (adv_instance)
1838 				adv_tx_power = adv_instance->tx_power;
1839 			else
1840 				adv_tx_power = hdev->adv_tx_power;
1841 		} else {
1842 			adv_tx_power = hdev->adv_tx_power;
1843 		}
1844 
1845 		/* Provide Tx Power only if we can provide a valid value for it */
1846 		if (adv_tx_power != HCI_TX_POWER_INVALID) {
1847 			ptr[0] = 0x02;
1848 			ptr[1] = EIR_TX_POWER;
1849 			ptr[2] = (u8)adv_tx_power;
1850 
1851 			ad_len += 3;
1852 			ptr += 3;
1853 		}
1854 	}
1855 
1856 	return ad_len;
1857 }
1858 
1859 void __hci_req_update_adv_data(struct hci_request *req, u8 instance)
1860 {
1861 	struct hci_dev *hdev = req->hdev;
1862 	u8 len;
1863 
1864 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1865 		return;
1866 
1867 	if (ext_adv_capable(hdev)) {
1868 		struct {
1869 			struct hci_cp_le_set_ext_adv_data cp;
1870 			u8 data[HCI_MAX_EXT_AD_LENGTH];
1871 		} pdu;
1872 
1873 		memset(&pdu, 0, sizeof(pdu));
1874 
1875 		len = create_instance_adv_data(hdev, instance, pdu.data);
1876 
1877 		/* There's nothing to do if the data hasn't changed */
1878 		if (hdev->adv_data_len == len &&
1879 		    memcmp(pdu.data, hdev->adv_data, len) == 0)
1880 			return;
1881 
1882 		memcpy(hdev->adv_data, pdu.data, len);
1883 		hdev->adv_data_len = len;
1884 
1885 		pdu.cp.length = len;
1886 		pdu.cp.handle = instance;
1887 		pdu.cp.operation = LE_SET_ADV_DATA_OP_COMPLETE;
1888 		pdu.cp.frag_pref = LE_SET_ADV_DATA_NO_FRAG;
1889 
1890 		hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_DATA,
1891 			    sizeof(pdu.cp) + len, &pdu.cp);
1892 	} else {
1893 		struct hci_cp_le_set_adv_data cp;
1894 
1895 		memset(&cp, 0, sizeof(cp));
1896 
1897 		len = create_instance_adv_data(hdev, instance, cp.data);
1898 
1899 		/* There's nothing to do if the data hasn't changed */
1900 		if (hdev->adv_data_len == len &&
1901 		    memcmp(cp.data, hdev->adv_data, len) == 0)
1902 			return;
1903 
1904 		memcpy(hdev->adv_data, cp.data, sizeof(cp.data));
1905 		hdev->adv_data_len = len;
1906 
1907 		cp.length = len;
1908 
1909 		hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp);
1910 	}
1911 }
1912 
1913 int hci_req_update_adv_data(struct hci_dev *hdev, u8 instance)
1914 {
1915 	struct hci_request req;
1916 
1917 	hci_req_init(&req, hdev);
1918 	__hci_req_update_adv_data(&req, instance);
1919 
1920 	return hci_req_run(&req, NULL);
1921 }
1922 
1923 static void enable_addr_resolution_complete(struct hci_dev *hdev, u8 status,
1924 					    u16 opcode)
1925 {
1926 	BT_DBG("%s status %u", hdev->name, status);
1927 }
1928 
1929 void hci_req_disable_address_resolution(struct hci_dev *hdev)
1930 {
1931 	struct hci_request req;
1932 	__u8 enable = 0x00;
1933 
1934 	if (!use_ll_privacy(hdev) &&
1935 	    !hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
1936 		return;
1937 
1938 	hci_req_init(&req, hdev);
1939 
1940 	hci_req_add(&req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable);
1941 
1942 	hci_req_run(&req, enable_addr_resolution_complete);
1943 }
1944 
1945 static void adv_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode)
1946 {
1947 	bt_dev_dbg(hdev, "status %u", status);
1948 }
1949 
1950 void hci_req_reenable_advertising(struct hci_dev *hdev)
1951 {
1952 	struct hci_request req;
1953 
1954 	if (!hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
1955 	    list_empty(&hdev->adv_instances))
1956 		return;
1957 
1958 	hci_req_init(&req, hdev);
1959 
1960 	if (hdev->cur_adv_instance) {
1961 		__hci_req_schedule_adv_instance(&req, hdev->cur_adv_instance,
1962 						true);
1963 	} else {
1964 		if (ext_adv_capable(hdev)) {
1965 			__hci_req_start_ext_adv(&req, 0x00);
1966 		} else {
1967 			__hci_req_update_adv_data(&req, 0x00);
1968 			__hci_req_update_scan_rsp_data(&req, 0x00);
1969 			__hci_req_enable_advertising(&req);
1970 		}
1971 	}
1972 
1973 	hci_req_run(&req, adv_enable_complete);
1974 }
1975 
1976 static void adv_timeout_expire(struct work_struct *work)
1977 {
1978 	struct hci_dev *hdev = container_of(work, struct hci_dev,
1979 					    adv_instance_expire.work);
1980 
1981 	struct hci_request req;
1982 	u8 instance;
1983 
1984 	bt_dev_dbg(hdev, "");
1985 
1986 	hci_dev_lock(hdev);
1987 
1988 	hdev->adv_instance_timeout = 0;
1989 
1990 	instance = hdev->cur_adv_instance;
1991 	if (instance == 0x00)
1992 		goto unlock;
1993 
1994 	hci_req_init(&req, hdev);
1995 
1996 	hci_req_clear_adv_instance(hdev, NULL, &req, instance, false);
1997 
1998 	if (list_empty(&hdev->adv_instances))
1999 		__hci_req_disable_advertising(&req);
2000 
2001 	hci_req_run(&req, NULL);
2002 
2003 unlock:
2004 	hci_dev_unlock(hdev);
2005 }
2006 
2007 static int hci_req_add_le_interleaved_scan(struct hci_request *req,
2008 					   unsigned long opt)
2009 {
2010 	struct hci_dev *hdev = req->hdev;
2011 	int ret = 0;
2012 
2013 	hci_dev_lock(hdev);
2014 
2015 	if (hci_dev_test_flag(hdev, HCI_LE_SCAN))
2016 		hci_req_add_le_scan_disable(req, false);
2017 	hci_req_add_le_passive_scan(req);
2018 
2019 	switch (hdev->interleave_scan_state) {
2020 	case INTERLEAVE_SCAN_ALLOWLIST:
2021 		bt_dev_dbg(hdev, "next state: allowlist");
2022 		hdev->interleave_scan_state = INTERLEAVE_SCAN_NO_FILTER;
2023 		break;
2024 	case INTERLEAVE_SCAN_NO_FILTER:
2025 		bt_dev_dbg(hdev, "next state: no filter");
2026 		hdev->interleave_scan_state = INTERLEAVE_SCAN_ALLOWLIST;
2027 		break;
2028 	case INTERLEAVE_SCAN_NONE:
2029 		BT_ERR("unexpected error");
2030 		ret = -1;
2031 	}
2032 
2033 	hci_dev_unlock(hdev);
2034 
2035 	return ret;
2036 }
2037 
2038 static void interleave_scan_work(struct work_struct *work)
2039 {
2040 	struct hci_dev *hdev = container_of(work, struct hci_dev,
2041 					    interleave_scan.work);
2042 	u8 status;
2043 	unsigned long timeout;
2044 
2045 	if (hdev->interleave_scan_state == INTERLEAVE_SCAN_ALLOWLIST) {
2046 		timeout = msecs_to_jiffies(hdev->advmon_allowlist_duration);
2047 	} else if (hdev->interleave_scan_state == INTERLEAVE_SCAN_NO_FILTER) {
2048 		timeout = msecs_to_jiffies(hdev->advmon_no_filter_duration);
2049 	} else {
2050 		bt_dev_err(hdev, "unexpected error");
2051 		return;
2052 	}
2053 
2054 	hci_req_sync(hdev, hci_req_add_le_interleaved_scan, 0,
2055 		     HCI_CMD_TIMEOUT, &status);
2056 
2057 	/* Don't continue interleaving if it was canceled */
2058 	if (is_interleave_scanning(hdev))
2059 		queue_delayed_work(hdev->req_workqueue,
2060 				   &hdev->interleave_scan, timeout);
2061 }
2062 
2063 int hci_get_random_address(struct hci_dev *hdev, bool require_privacy,
2064 			   bool use_rpa, struct adv_info *adv_instance,
2065 			   u8 *own_addr_type, bdaddr_t *rand_addr)
2066 {
2067 	int err;
2068 
2069 	bacpy(rand_addr, BDADDR_ANY);
2070 
2071 	/* If privacy is enabled use a resolvable private address. If
2072 	 * current RPA has expired then generate a new one.
2073 	 */
2074 	if (use_rpa) {
2075 		int to;
2076 
2077 		/* If Controller supports LL Privacy use own address type is
2078 		 * 0x03
2079 		 */
2080 		if (use_ll_privacy(hdev) &&
2081 		    hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY))
2082 			*own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED;
2083 		else
2084 			*own_addr_type = ADDR_LE_DEV_RANDOM;
2085 
2086 		if (adv_instance) {
2087 			if (!adv_instance->rpa_expired &&
2088 			    !bacmp(&adv_instance->random_addr, &hdev->rpa))
2089 				return 0;
2090 
2091 			adv_instance->rpa_expired = false;
2092 		} else {
2093 			if (!hci_dev_test_and_clear_flag(hdev, HCI_RPA_EXPIRED) &&
2094 			    !bacmp(&hdev->random_addr, &hdev->rpa))
2095 				return 0;
2096 		}
2097 
2098 		err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa);
2099 		if (err < 0) {
2100 			bt_dev_err(hdev, "failed to generate new RPA");
2101 			return err;
2102 		}
2103 
2104 		bacpy(rand_addr, &hdev->rpa);
2105 
2106 		to = msecs_to_jiffies(hdev->rpa_timeout * 1000);
2107 		if (adv_instance)
2108 			queue_delayed_work(hdev->workqueue,
2109 					   &adv_instance->rpa_expired_cb, to);
2110 		else
2111 			queue_delayed_work(hdev->workqueue,
2112 					   &hdev->rpa_expired, to);
2113 
2114 		return 0;
2115 	}
2116 
2117 	/* In case of required privacy without resolvable private address,
2118 	 * use an non-resolvable private address. This is useful for
2119 	 * non-connectable advertising.
2120 	 */
2121 	if (require_privacy) {
2122 		bdaddr_t nrpa;
2123 
2124 		while (true) {
2125 			/* The non-resolvable private address is generated
2126 			 * from random six bytes with the two most significant
2127 			 * bits cleared.
2128 			 */
2129 			get_random_bytes(&nrpa, 6);
2130 			nrpa.b[5] &= 0x3f;
2131 
2132 			/* The non-resolvable private address shall not be
2133 			 * equal to the public address.
2134 			 */
2135 			if (bacmp(&hdev->bdaddr, &nrpa))
2136 				break;
2137 		}
2138 
2139 		*own_addr_type = ADDR_LE_DEV_RANDOM;
2140 		bacpy(rand_addr, &nrpa);
2141 
2142 		return 0;
2143 	}
2144 
2145 	/* No privacy so use a public address. */
2146 	*own_addr_type = ADDR_LE_DEV_PUBLIC;
2147 
2148 	return 0;
2149 }
2150 
2151 void __hci_req_clear_ext_adv_sets(struct hci_request *req)
2152 {
2153 	hci_req_add(req, HCI_OP_LE_CLEAR_ADV_SETS, 0, NULL);
2154 }
2155 
2156 int __hci_req_setup_ext_adv_instance(struct hci_request *req, u8 instance)
2157 {
2158 	struct hci_cp_le_set_ext_adv_params cp;
2159 	struct hci_dev *hdev = req->hdev;
2160 	bool connectable;
2161 	u32 flags;
2162 	bdaddr_t random_addr;
2163 	u8 own_addr_type;
2164 	int err;
2165 	struct adv_info *adv_instance;
2166 	bool secondary_adv;
2167 
2168 	if (instance > 0) {
2169 		adv_instance = hci_find_adv_instance(hdev, instance);
2170 		if (!adv_instance)
2171 			return -EINVAL;
2172 	} else {
2173 		adv_instance = NULL;
2174 	}
2175 
2176 	flags = get_adv_instance_flags(hdev, instance);
2177 
2178 	/* If the "connectable" instance flag was not set, then choose between
2179 	 * ADV_IND and ADV_NONCONN_IND based on the global connectable setting.
2180 	 */
2181 	connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) ||
2182 		      mgmt_get_connectable(hdev);
2183 
2184 	if (!is_advertising_allowed(hdev, connectable))
2185 		return -EPERM;
2186 
2187 	/* Set require_privacy to true only when non-connectable
2188 	 * advertising is used. In that case it is fine to use a
2189 	 * non-resolvable private address.
2190 	 */
2191 	err = hci_get_random_address(hdev, !connectable,
2192 				     adv_use_rpa(hdev, flags), adv_instance,
2193 				     &own_addr_type, &random_addr);
2194 	if (err < 0)
2195 		return err;
2196 
2197 	memset(&cp, 0, sizeof(cp));
2198 
2199 	if (adv_instance) {
2200 		hci_cpu_to_le24(adv_instance->min_interval, cp.min_interval);
2201 		hci_cpu_to_le24(adv_instance->max_interval, cp.max_interval);
2202 		cp.tx_power = adv_instance->tx_power;
2203 	} else {
2204 		hci_cpu_to_le24(hdev->le_adv_min_interval, cp.min_interval);
2205 		hci_cpu_to_le24(hdev->le_adv_max_interval, cp.max_interval);
2206 		cp.tx_power = HCI_ADV_TX_POWER_NO_PREFERENCE;
2207 	}
2208 
2209 	secondary_adv = (flags & MGMT_ADV_FLAG_SEC_MASK);
2210 
2211 	if (connectable) {
2212 		if (secondary_adv)
2213 			cp.evt_properties = cpu_to_le16(LE_EXT_ADV_CONN_IND);
2214 		else
2215 			cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_IND);
2216 	} else if (adv_instance_is_scannable(hdev, instance) ||
2217 		   (flags & MGMT_ADV_PARAM_SCAN_RSP)) {
2218 		if (secondary_adv)
2219 			cp.evt_properties = cpu_to_le16(LE_EXT_ADV_SCAN_IND);
2220 		else
2221 			cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_SCAN_IND);
2222 	} else {
2223 		if (secondary_adv)
2224 			cp.evt_properties = cpu_to_le16(LE_EXT_ADV_NON_CONN_IND);
2225 		else
2226 			cp.evt_properties = cpu_to_le16(LE_LEGACY_NONCONN_IND);
2227 	}
2228 
2229 	cp.own_addr_type = own_addr_type;
2230 	cp.channel_map = hdev->le_adv_channel_map;
2231 	cp.handle = instance;
2232 
2233 	if (flags & MGMT_ADV_FLAG_SEC_2M) {
2234 		cp.primary_phy = HCI_ADV_PHY_1M;
2235 		cp.secondary_phy = HCI_ADV_PHY_2M;
2236 	} else if (flags & MGMT_ADV_FLAG_SEC_CODED) {
2237 		cp.primary_phy = HCI_ADV_PHY_CODED;
2238 		cp.secondary_phy = HCI_ADV_PHY_CODED;
2239 	} else {
2240 		/* In all other cases use 1M */
2241 		cp.primary_phy = HCI_ADV_PHY_1M;
2242 		cp.secondary_phy = HCI_ADV_PHY_1M;
2243 	}
2244 
2245 	hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(cp), &cp);
2246 
2247 	if (own_addr_type == ADDR_LE_DEV_RANDOM &&
2248 	    bacmp(&random_addr, BDADDR_ANY)) {
2249 		struct hci_cp_le_set_adv_set_rand_addr cp;
2250 
2251 		/* Check if random address need to be updated */
2252 		if (adv_instance) {
2253 			if (!bacmp(&random_addr, &adv_instance->random_addr))
2254 				return 0;
2255 		} else {
2256 			if (!bacmp(&random_addr, &hdev->random_addr))
2257 				return 0;
2258 		}
2259 
2260 		memset(&cp, 0, sizeof(cp));
2261 
2262 		cp.handle = instance;
2263 		bacpy(&cp.bdaddr, &random_addr);
2264 
2265 		hci_req_add(req,
2266 			    HCI_OP_LE_SET_ADV_SET_RAND_ADDR,
2267 			    sizeof(cp), &cp);
2268 	}
2269 
2270 	return 0;
2271 }
2272 
2273 int __hci_req_enable_ext_advertising(struct hci_request *req, u8 instance)
2274 {
2275 	struct hci_dev *hdev = req->hdev;
2276 	struct hci_cp_le_set_ext_adv_enable *cp;
2277 	struct hci_cp_ext_adv_set *adv_set;
2278 	u8 data[sizeof(*cp) + sizeof(*adv_set) * 1];
2279 	struct adv_info *adv_instance;
2280 
2281 	if (instance > 0) {
2282 		adv_instance = hci_find_adv_instance(hdev, instance);
2283 		if (!adv_instance)
2284 			return -EINVAL;
2285 	} else {
2286 		adv_instance = NULL;
2287 	}
2288 
2289 	cp = (void *) data;
2290 	adv_set = (void *) cp->data;
2291 
2292 	memset(cp, 0, sizeof(*cp));
2293 
2294 	cp->enable = 0x01;
2295 	cp->num_of_sets = 0x01;
2296 
2297 	memset(adv_set, 0, sizeof(*adv_set));
2298 
2299 	adv_set->handle = instance;
2300 
2301 	/* Set duration per instance since controller is responsible for
2302 	 * scheduling it.
2303 	 */
2304 	if (adv_instance && adv_instance->duration) {
2305 		u16 duration = adv_instance->timeout * MSEC_PER_SEC;
2306 
2307 		/* Time = N * 10 ms */
2308 		adv_set->duration = cpu_to_le16(duration / 10);
2309 	}
2310 
2311 	hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_ENABLE,
2312 		    sizeof(*cp) + sizeof(*adv_set) * cp->num_of_sets,
2313 		    data);
2314 
2315 	return 0;
2316 }
2317 
2318 int __hci_req_disable_ext_adv_instance(struct hci_request *req, u8 instance)
2319 {
2320 	struct hci_dev *hdev = req->hdev;
2321 	struct hci_cp_le_set_ext_adv_enable *cp;
2322 	struct hci_cp_ext_adv_set *adv_set;
2323 	u8 data[sizeof(*cp) + sizeof(*adv_set) * 1];
2324 	u8 req_size;
2325 
2326 	/* If request specifies an instance that doesn't exist, fail */
2327 	if (instance > 0 && !hci_find_adv_instance(hdev, instance))
2328 		return -EINVAL;
2329 
2330 	memset(data, 0, sizeof(data));
2331 
2332 	cp = (void *)data;
2333 	adv_set = (void *)cp->data;
2334 
2335 	/* Instance 0x00 indicates all advertising instances will be disabled */
2336 	cp->num_of_sets = !!instance;
2337 	cp->enable = 0x00;
2338 
2339 	adv_set->handle = instance;
2340 
2341 	req_size = sizeof(*cp) + sizeof(*adv_set) * cp->num_of_sets;
2342 	hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_ENABLE, req_size, data);
2343 
2344 	return 0;
2345 }
2346 
2347 int __hci_req_remove_ext_adv_instance(struct hci_request *req, u8 instance)
2348 {
2349 	struct hci_dev *hdev = req->hdev;
2350 
2351 	/* If request specifies an instance that doesn't exist, fail */
2352 	if (instance > 0 && !hci_find_adv_instance(hdev, instance))
2353 		return -EINVAL;
2354 
2355 	hci_req_add(req, HCI_OP_LE_REMOVE_ADV_SET, sizeof(instance), &instance);
2356 
2357 	return 0;
2358 }
2359 
2360 int __hci_req_start_ext_adv(struct hci_request *req, u8 instance)
2361 {
2362 	struct hci_dev *hdev = req->hdev;
2363 	struct adv_info *adv_instance = hci_find_adv_instance(hdev, instance);
2364 	int err;
2365 
2366 	/* If instance isn't pending, the chip knows about it, and it's safe to
2367 	 * disable
2368 	 */
2369 	if (adv_instance && !adv_instance->pending)
2370 		__hci_req_disable_ext_adv_instance(req, instance);
2371 
2372 	err = __hci_req_setup_ext_adv_instance(req, instance);
2373 	if (err < 0)
2374 		return err;
2375 
2376 	__hci_req_update_scan_rsp_data(req, instance);
2377 	__hci_req_enable_ext_advertising(req, instance);
2378 
2379 	return 0;
2380 }
2381 
2382 int __hci_req_schedule_adv_instance(struct hci_request *req, u8 instance,
2383 				    bool force)
2384 {
2385 	struct hci_dev *hdev = req->hdev;
2386 	struct adv_info *adv_instance = NULL;
2387 	u16 timeout;
2388 
2389 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
2390 	    list_empty(&hdev->adv_instances))
2391 		return -EPERM;
2392 
2393 	if (hdev->adv_instance_timeout)
2394 		return -EBUSY;
2395 
2396 	adv_instance = hci_find_adv_instance(hdev, instance);
2397 	if (!adv_instance)
2398 		return -ENOENT;
2399 
2400 	/* A zero timeout means unlimited advertising. As long as there is
2401 	 * only one instance, duration should be ignored. We still set a timeout
2402 	 * in case further instances are being added later on.
2403 	 *
2404 	 * If the remaining lifetime of the instance is more than the duration
2405 	 * then the timeout corresponds to the duration, otherwise it will be
2406 	 * reduced to the remaining instance lifetime.
2407 	 */
2408 	if (adv_instance->timeout == 0 ||
2409 	    adv_instance->duration <= adv_instance->remaining_time)
2410 		timeout = adv_instance->duration;
2411 	else
2412 		timeout = adv_instance->remaining_time;
2413 
2414 	/* The remaining time is being reduced unless the instance is being
2415 	 * advertised without time limit.
2416 	 */
2417 	if (adv_instance->timeout)
2418 		adv_instance->remaining_time =
2419 				adv_instance->remaining_time - timeout;
2420 
2421 	/* Only use work for scheduling instances with legacy advertising */
2422 	if (!ext_adv_capable(hdev)) {
2423 		hdev->adv_instance_timeout = timeout;
2424 		queue_delayed_work(hdev->req_workqueue,
2425 			   &hdev->adv_instance_expire,
2426 			   msecs_to_jiffies(timeout * 1000));
2427 	}
2428 
2429 	/* If we're just re-scheduling the same instance again then do not
2430 	 * execute any HCI commands. This happens when a single instance is
2431 	 * being advertised.
2432 	 */
2433 	if (!force && hdev->cur_adv_instance == instance &&
2434 	    hci_dev_test_flag(hdev, HCI_LE_ADV))
2435 		return 0;
2436 
2437 	hdev->cur_adv_instance = instance;
2438 	if (ext_adv_capable(hdev)) {
2439 		__hci_req_start_ext_adv(req, instance);
2440 	} else {
2441 		__hci_req_update_adv_data(req, instance);
2442 		__hci_req_update_scan_rsp_data(req, instance);
2443 		__hci_req_enable_advertising(req);
2444 	}
2445 
2446 	return 0;
2447 }
2448 
2449 /* For a single instance:
2450  * - force == true: The instance will be removed even when its remaining
2451  *   lifetime is not zero.
2452  * - force == false: the instance will be deactivated but kept stored unless
2453  *   the remaining lifetime is zero.
2454  *
2455  * For instance == 0x00:
2456  * - force == true: All instances will be removed regardless of their timeout
2457  *   setting.
2458  * - force == false: Only instances that have a timeout will be removed.
2459  */
2460 void hci_req_clear_adv_instance(struct hci_dev *hdev, struct sock *sk,
2461 				struct hci_request *req, u8 instance,
2462 				bool force)
2463 {
2464 	struct adv_info *adv_instance, *n, *next_instance = NULL;
2465 	int err;
2466 	u8 rem_inst;
2467 
2468 	/* Cancel any timeout concerning the removed instance(s). */
2469 	if (!instance || hdev->cur_adv_instance == instance)
2470 		cancel_adv_timeout(hdev);
2471 
2472 	/* Get the next instance to advertise BEFORE we remove
2473 	 * the current one. This can be the same instance again
2474 	 * if there is only one instance.
2475 	 */
2476 	if (instance && hdev->cur_adv_instance == instance)
2477 		next_instance = hci_get_next_instance(hdev, instance);
2478 
2479 	if (instance == 0x00) {
2480 		list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances,
2481 					 list) {
2482 			if (!(force || adv_instance->timeout))
2483 				continue;
2484 
2485 			rem_inst = adv_instance->instance;
2486 			err = hci_remove_adv_instance(hdev, rem_inst);
2487 			if (!err)
2488 				mgmt_advertising_removed(sk, hdev, rem_inst);
2489 		}
2490 	} else {
2491 		adv_instance = hci_find_adv_instance(hdev, instance);
2492 
2493 		if (force || (adv_instance && adv_instance->timeout &&
2494 			      !adv_instance->remaining_time)) {
2495 			/* Don't advertise a removed instance. */
2496 			if (next_instance &&
2497 			    next_instance->instance == instance)
2498 				next_instance = NULL;
2499 
2500 			err = hci_remove_adv_instance(hdev, instance);
2501 			if (!err)
2502 				mgmt_advertising_removed(sk, hdev, instance);
2503 		}
2504 	}
2505 
2506 	if (!req || !hdev_is_powered(hdev) ||
2507 	    hci_dev_test_flag(hdev, HCI_ADVERTISING))
2508 		return;
2509 
2510 	if (next_instance && !ext_adv_capable(hdev))
2511 		__hci_req_schedule_adv_instance(req, next_instance->instance,
2512 						false);
2513 }
2514 
2515 static void set_random_addr(struct hci_request *req, bdaddr_t *rpa)
2516 {
2517 	struct hci_dev *hdev = req->hdev;
2518 
2519 	/* If we're advertising or initiating an LE connection we can't
2520 	 * go ahead and change the random address at this time. This is
2521 	 * because the eventual initiator address used for the
2522 	 * subsequently created connection will be undefined (some
2523 	 * controllers use the new address and others the one we had
2524 	 * when the operation started).
2525 	 *
2526 	 * In this kind of scenario skip the update and let the random
2527 	 * address be updated at the next cycle.
2528 	 */
2529 	if (hci_dev_test_flag(hdev, HCI_LE_ADV) ||
2530 	    hci_lookup_le_connect(hdev)) {
2531 		bt_dev_dbg(hdev, "Deferring random address update");
2532 		hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
2533 		return;
2534 	}
2535 
2536 	hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, rpa);
2537 }
2538 
2539 int hci_update_random_address(struct hci_request *req, bool require_privacy,
2540 			      bool use_rpa, u8 *own_addr_type)
2541 {
2542 	struct hci_dev *hdev = req->hdev;
2543 	int err;
2544 
2545 	/* If privacy is enabled use a resolvable private address. If
2546 	 * current RPA has expired or there is something else than
2547 	 * the current RPA in use, then generate a new one.
2548 	 */
2549 	if (use_rpa) {
2550 		int to;
2551 
2552 		/* If Controller supports LL Privacy use own address type is
2553 		 * 0x03
2554 		 */
2555 		if (use_ll_privacy(hdev) &&
2556 		    hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY))
2557 			*own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED;
2558 		else
2559 			*own_addr_type = ADDR_LE_DEV_RANDOM;
2560 
2561 		if (!hci_dev_test_and_clear_flag(hdev, HCI_RPA_EXPIRED) &&
2562 		    !bacmp(&hdev->random_addr, &hdev->rpa))
2563 			return 0;
2564 
2565 		err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa);
2566 		if (err < 0) {
2567 			bt_dev_err(hdev, "failed to generate new RPA");
2568 			return err;
2569 		}
2570 
2571 		set_random_addr(req, &hdev->rpa);
2572 
2573 		to = msecs_to_jiffies(hdev->rpa_timeout * 1000);
2574 		queue_delayed_work(hdev->workqueue, &hdev->rpa_expired, to);
2575 
2576 		return 0;
2577 	}
2578 
2579 	/* In case of required privacy without resolvable private address,
2580 	 * use an non-resolvable private address. This is useful for active
2581 	 * scanning and non-connectable advertising.
2582 	 */
2583 	if (require_privacy) {
2584 		bdaddr_t nrpa;
2585 
2586 		while (true) {
2587 			/* The non-resolvable private address is generated
2588 			 * from random six bytes with the two most significant
2589 			 * bits cleared.
2590 			 */
2591 			get_random_bytes(&nrpa, 6);
2592 			nrpa.b[5] &= 0x3f;
2593 
2594 			/* The non-resolvable private address shall not be
2595 			 * equal to the public address.
2596 			 */
2597 			if (bacmp(&hdev->bdaddr, &nrpa))
2598 				break;
2599 		}
2600 
2601 		*own_addr_type = ADDR_LE_DEV_RANDOM;
2602 		set_random_addr(req, &nrpa);
2603 		return 0;
2604 	}
2605 
2606 	/* If forcing static address is in use or there is no public
2607 	 * address use the static address as random address (but skip
2608 	 * the HCI command if the current random address is already the
2609 	 * static one.
2610 	 *
2611 	 * In case BR/EDR has been disabled on a dual-mode controller
2612 	 * and a static address has been configured, then use that
2613 	 * address instead of the public BR/EDR address.
2614 	 */
2615 	if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
2616 	    !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
2617 	    (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
2618 	     bacmp(&hdev->static_addr, BDADDR_ANY))) {
2619 		*own_addr_type = ADDR_LE_DEV_RANDOM;
2620 		if (bacmp(&hdev->static_addr, &hdev->random_addr))
2621 			hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6,
2622 				    &hdev->static_addr);
2623 		return 0;
2624 	}
2625 
2626 	/* Neither privacy nor static address is being used so use a
2627 	 * public address.
2628 	 */
2629 	*own_addr_type = ADDR_LE_DEV_PUBLIC;
2630 
2631 	return 0;
2632 }
2633 
2634 static bool disconnected_accept_list_entries(struct hci_dev *hdev)
2635 {
2636 	struct bdaddr_list *b;
2637 
2638 	list_for_each_entry(b, &hdev->accept_list, list) {
2639 		struct hci_conn *conn;
2640 
2641 		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &b->bdaddr);
2642 		if (!conn)
2643 			return true;
2644 
2645 		if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
2646 			return true;
2647 	}
2648 
2649 	return false;
2650 }
2651 
2652 void __hci_req_update_scan(struct hci_request *req)
2653 {
2654 	struct hci_dev *hdev = req->hdev;
2655 	u8 scan;
2656 
2657 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
2658 		return;
2659 
2660 	if (!hdev_is_powered(hdev))
2661 		return;
2662 
2663 	if (mgmt_powering_down(hdev))
2664 		return;
2665 
2666 	if (hdev->scanning_paused)
2667 		return;
2668 
2669 	if (hci_dev_test_flag(hdev, HCI_CONNECTABLE) ||
2670 	    disconnected_accept_list_entries(hdev))
2671 		scan = SCAN_PAGE;
2672 	else
2673 		scan = SCAN_DISABLED;
2674 
2675 	if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
2676 		scan |= SCAN_INQUIRY;
2677 
2678 	if (test_bit(HCI_PSCAN, &hdev->flags) == !!(scan & SCAN_PAGE) &&
2679 	    test_bit(HCI_ISCAN, &hdev->flags) == !!(scan & SCAN_INQUIRY))
2680 		return;
2681 
2682 	hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
2683 }
2684 
2685 static int update_scan(struct hci_request *req, unsigned long opt)
2686 {
2687 	hci_dev_lock(req->hdev);
2688 	__hci_req_update_scan(req);
2689 	hci_dev_unlock(req->hdev);
2690 	return 0;
2691 }
2692 
2693 static void scan_update_work(struct work_struct *work)
2694 {
2695 	struct hci_dev *hdev = container_of(work, struct hci_dev, scan_update);
2696 
2697 	hci_req_sync(hdev, update_scan, 0, HCI_CMD_TIMEOUT, NULL);
2698 }
2699 
2700 static int connectable_update(struct hci_request *req, unsigned long opt)
2701 {
2702 	struct hci_dev *hdev = req->hdev;
2703 
2704 	hci_dev_lock(hdev);
2705 
2706 	__hci_req_update_scan(req);
2707 
2708 	/* If BR/EDR is not enabled and we disable advertising as a
2709 	 * by-product of disabling connectable, we need to update the
2710 	 * advertising flags.
2711 	 */
2712 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
2713 		__hci_req_update_adv_data(req, hdev->cur_adv_instance);
2714 
2715 	/* Update the advertising parameters if necessary */
2716 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
2717 	    !list_empty(&hdev->adv_instances)) {
2718 		if (ext_adv_capable(hdev))
2719 			__hci_req_start_ext_adv(req, hdev->cur_adv_instance);
2720 		else
2721 			__hci_req_enable_advertising(req);
2722 	}
2723 
2724 	__hci_update_background_scan(req);
2725 
2726 	hci_dev_unlock(hdev);
2727 
2728 	return 0;
2729 }
2730 
2731 static void connectable_update_work(struct work_struct *work)
2732 {
2733 	struct hci_dev *hdev = container_of(work, struct hci_dev,
2734 					    connectable_update);
2735 	u8 status;
2736 
2737 	hci_req_sync(hdev, connectable_update, 0, HCI_CMD_TIMEOUT, &status);
2738 	mgmt_set_connectable_complete(hdev, status);
2739 }
2740 
2741 static u8 get_service_classes(struct hci_dev *hdev)
2742 {
2743 	struct bt_uuid *uuid;
2744 	u8 val = 0;
2745 
2746 	list_for_each_entry(uuid, &hdev->uuids, list)
2747 		val |= uuid->svc_hint;
2748 
2749 	return val;
2750 }
2751 
2752 void __hci_req_update_class(struct hci_request *req)
2753 {
2754 	struct hci_dev *hdev = req->hdev;
2755 	u8 cod[3];
2756 
2757 	bt_dev_dbg(hdev, "");
2758 
2759 	if (!hdev_is_powered(hdev))
2760 		return;
2761 
2762 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED))
2763 		return;
2764 
2765 	if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE))
2766 		return;
2767 
2768 	cod[0] = hdev->minor_class;
2769 	cod[1] = hdev->major_class;
2770 	cod[2] = get_service_classes(hdev);
2771 
2772 	if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
2773 		cod[1] |= 0x20;
2774 
2775 	if (memcmp(cod, hdev->dev_class, 3) == 0)
2776 		return;
2777 
2778 	hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
2779 }
2780 
2781 static void write_iac(struct hci_request *req)
2782 {
2783 	struct hci_dev *hdev = req->hdev;
2784 	struct hci_cp_write_current_iac_lap cp;
2785 
2786 	if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
2787 		return;
2788 
2789 	if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) {
2790 		/* Limited discoverable mode */
2791 		cp.num_iac = min_t(u8, hdev->num_iac, 2);
2792 		cp.iac_lap[0] = 0x00;	/* LIAC */
2793 		cp.iac_lap[1] = 0x8b;
2794 		cp.iac_lap[2] = 0x9e;
2795 		cp.iac_lap[3] = 0x33;	/* GIAC */
2796 		cp.iac_lap[4] = 0x8b;
2797 		cp.iac_lap[5] = 0x9e;
2798 	} else {
2799 		/* General discoverable mode */
2800 		cp.num_iac = 1;
2801 		cp.iac_lap[0] = 0x33;	/* GIAC */
2802 		cp.iac_lap[1] = 0x8b;
2803 		cp.iac_lap[2] = 0x9e;
2804 	}
2805 
2806 	hci_req_add(req, HCI_OP_WRITE_CURRENT_IAC_LAP,
2807 		    (cp.num_iac * 3) + 1, &cp);
2808 }
2809 
2810 static int discoverable_update(struct hci_request *req, unsigned long opt)
2811 {
2812 	struct hci_dev *hdev = req->hdev;
2813 
2814 	hci_dev_lock(hdev);
2815 
2816 	if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
2817 		write_iac(req);
2818 		__hci_req_update_scan(req);
2819 		__hci_req_update_class(req);
2820 	}
2821 
2822 	/* Advertising instances don't use the global discoverable setting, so
2823 	 * only update AD if advertising was enabled using Set Advertising.
2824 	 */
2825 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
2826 		__hci_req_update_adv_data(req, 0x00);
2827 
2828 		/* Discoverable mode affects the local advertising
2829 		 * address in limited privacy mode.
2830 		 */
2831 		if (hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY)) {
2832 			if (ext_adv_capable(hdev))
2833 				__hci_req_start_ext_adv(req, 0x00);
2834 			else
2835 				__hci_req_enable_advertising(req);
2836 		}
2837 	}
2838 
2839 	hci_dev_unlock(hdev);
2840 
2841 	return 0;
2842 }
2843 
2844 static void discoverable_update_work(struct work_struct *work)
2845 {
2846 	struct hci_dev *hdev = container_of(work, struct hci_dev,
2847 					    discoverable_update);
2848 	u8 status;
2849 
2850 	hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, &status);
2851 	mgmt_set_discoverable_complete(hdev, status);
2852 }
2853 
2854 void __hci_abort_conn(struct hci_request *req, struct hci_conn *conn,
2855 		      u8 reason)
2856 {
2857 	switch (conn->state) {
2858 	case BT_CONNECTED:
2859 	case BT_CONFIG:
2860 		if (conn->type == AMP_LINK) {
2861 			struct hci_cp_disconn_phy_link cp;
2862 
2863 			cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
2864 			cp.reason = reason;
2865 			hci_req_add(req, HCI_OP_DISCONN_PHY_LINK, sizeof(cp),
2866 				    &cp);
2867 		} else {
2868 			struct hci_cp_disconnect dc;
2869 
2870 			dc.handle = cpu_to_le16(conn->handle);
2871 			dc.reason = reason;
2872 			hci_req_add(req, HCI_OP_DISCONNECT, sizeof(dc), &dc);
2873 		}
2874 
2875 		conn->state = BT_DISCONN;
2876 
2877 		break;
2878 	case BT_CONNECT:
2879 		if (conn->type == LE_LINK) {
2880 			if (test_bit(HCI_CONN_SCANNING, &conn->flags))
2881 				break;
2882 			hci_req_add(req, HCI_OP_LE_CREATE_CONN_CANCEL,
2883 				    0, NULL);
2884 		} else if (conn->type == ACL_LINK) {
2885 			if (req->hdev->hci_ver < BLUETOOTH_VER_1_2)
2886 				break;
2887 			hci_req_add(req, HCI_OP_CREATE_CONN_CANCEL,
2888 				    6, &conn->dst);
2889 		}
2890 		break;
2891 	case BT_CONNECT2:
2892 		if (conn->type == ACL_LINK) {
2893 			struct hci_cp_reject_conn_req rej;
2894 
2895 			bacpy(&rej.bdaddr, &conn->dst);
2896 			rej.reason = reason;
2897 
2898 			hci_req_add(req, HCI_OP_REJECT_CONN_REQ,
2899 				    sizeof(rej), &rej);
2900 		} else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
2901 			struct hci_cp_reject_sync_conn_req rej;
2902 
2903 			bacpy(&rej.bdaddr, &conn->dst);
2904 
2905 			/* SCO rejection has its own limited set of
2906 			 * allowed error values (0x0D-0x0F) which isn't
2907 			 * compatible with most values passed to this
2908 			 * function. To be safe hard-code one of the
2909 			 * values that's suitable for SCO.
2910 			 */
2911 			rej.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
2912 
2913 			hci_req_add(req, HCI_OP_REJECT_SYNC_CONN_REQ,
2914 				    sizeof(rej), &rej);
2915 		}
2916 		break;
2917 	default:
2918 		conn->state = BT_CLOSED;
2919 		break;
2920 	}
2921 }
2922 
2923 static void abort_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode)
2924 {
2925 	if (status)
2926 		bt_dev_dbg(hdev, "Failed to abort connection: status 0x%2.2x", status);
2927 }
2928 
2929 int hci_abort_conn(struct hci_conn *conn, u8 reason)
2930 {
2931 	struct hci_request req;
2932 	int err;
2933 
2934 	hci_req_init(&req, conn->hdev);
2935 
2936 	__hci_abort_conn(&req, conn, reason);
2937 
2938 	err = hci_req_run(&req, abort_conn_complete);
2939 	if (err && err != -ENODATA) {
2940 		bt_dev_err(conn->hdev, "failed to run HCI request: err %d", err);
2941 		return err;
2942 	}
2943 
2944 	return 0;
2945 }
2946 
2947 static int update_bg_scan(struct hci_request *req, unsigned long opt)
2948 {
2949 	hci_dev_lock(req->hdev);
2950 	__hci_update_background_scan(req);
2951 	hci_dev_unlock(req->hdev);
2952 	return 0;
2953 }
2954 
2955 static void bg_scan_update(struct work_struct *work)
2956 {
2957 	struct hci_dev *hdev = container_of(work, struct hci_dev,
2958 					    bg_scan_update);
2959 	struct hci_conn *conn;
2960 	u8 status;
2961 	int err;
2962 
2963 	err = hci_req_sync(hdev, update_bg_scan, 0, HCI_CMD_TIMEOUT, &status);
2964 	if (!err)
2965 		return;
2966 
2967 	hci_dev_lock(hdev);
2968 
2969 	conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
2970 	if (conn)
2971 		hci_le_conn_failed(conn, status);
2972 
2973 	hci_dev_unlock(hdev);
2974 }
2975 
2976 static int le_scan_disable(struct hci_request *req, unsigned long opt)
2977 {
2978 	hci_req_add_le_scan_disable(req, false);
2979 	return 0;
2980 }
2981 
2982 static int bredr_inquiry(struct hci_request *req, unsigned long opt)
2983 {
2984 	u8 length = opt;
2985 	const u8 giac[3] = { 0x33, 0x8b, 0x9e };
2986 	const u8 liac[3] = { 0x00, 0x8b, 0x9e };
2987 	struct hci_cp_inquiry cp;
2988 
2989 	if (test_bit(HCI_INQUIRY, &req->hdev->flags))
2990 		return 0;
2991 
2992 	bt_dev_dbg(req->hdev, "");
2993 
2994 	hci_dev_lock(req->hdev);
2995 	hci_inquiry_cache_flush(req->hdev);
2996 	hci_dev_unlock(req->hdev);
2997 
2998 	memset(&cp, 0, sizeof(cp));
2999 
3000 	if (req->hdev->discovery.limited)
3001 		memcpy(&cp.lap, liac, sizeof(cp.lap));
3002 	else
3003 		memcpy(&cp.lap, giac, sizeof(cp.lap));
3004 
3005 	cp.length = length;
3006 
3007 	hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
3008 
3009 	return 0;
3010 }
3011 
3012 static void le_scan_disable_work(struct work_struct *work)
3013 {
3014 	struct hci_dev *hdev = container_of(work, struct hci_dev,
3015 					    le_scan_disable.work);
3016 	u8 status;
3017 
3018 	bt_dev_dbg(hdev, "");
3019 
3020 	if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
3021 		return;
3022 
3023 	cancel_delayed_work(&hdev->le_scan_restart);
3024 
3025 	hci_req_sync(hdev, le_scan_disable, 0, HCI_CMD_TIMEOUT, &status);
3026 	if (status) {
3027 		bt_dev_err(hdev, "failed to disable LE scan: status 0x%02x",
3028 			   status);
3029 		return;
3030 	}
3031 
3032 	hdev->discovery.scan_start = 0;
3033 
3034 	/* If we were running LE only scan, change discovery state. If
3035 	 * we were running both LE and BR/EDR inquiry simultaneously,
3036 	 * and BR/EDR inquiry is already finished, stop discovery,
3037 	 * otherwise BR/EDR inquiry will stop discovery when finished.
3038 	 * If we will resolve remote device name, do not change
3039 	 * discovery state.
3040 	 */
3041 
3042 	if (hdev->discovery.type == DISCOV_TYPE_LE)
3043 		goto discov_stopped;
3044 
3045 	if (hdev->discovery.type != DISCOV_TYPE_INTERLEAVED)
3046 		return;
3047 
3048 	if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks)) {
3049 		if (!test_bit(HCI_INQUIRY, &hdev->flags) &&
3050 		    hdev->discovery.state != DISCOVERY_RESOLVING)
3051 			goto discov_stopped;
3052 
3053 		return;
3054 	}
3055 
3056 	hci_req_sync(hdev, bredr_inquiry, DISCOV_INTERLEAVED_INQUIRY_LEN,
3057 		     HCI_CMD_TIMEOUT, &status);
3058 	if (status) {
3059 		bt_dev_err(hdev, "inquiry failed: status 0x%02x", status);
3060 		goto discov_stopped;
3061 	}
3062 
3063 	return;
3064 
3065 discov_stopped:
3066 	hci_dev_lock(hdev);
3067 	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3068 	hci_dev_unlock(hdev);
3069 }
3070 
3071 static int le_scan_restart(struct hci_request *req, unsigned long opt)
3072 {
3073 	struct hci_dev *hdev = req->hdev;
3074 
3075 	/* If controller is not scanning we are done. */
3076 	if (!hci_dev_test_flag(hdev, HCI_LE_SCAN))
3077 		return 0;
3078 
3079 	if (hdev->scanning_paused) {
3080 		bt_dev_dbg(hdev, "Scanning is paused for suspend");
3081 		return 0;
3082 	}
3083 
3084 	hci_req_add_le_scan_disable(req, false);
3085 
3086 	if (use_ext_scan(hdev)) {
3087 		struct hci_cp_le_set_ext_scan_enable ext_enable_cp;
3088 
3089 		memset(&ext_enable_cp, 0, sizeof(ext_enable_cp));
3090 		ext_enable_cp.enable = LE_SCAN_ENABLE;
3091 		ext_enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
3092 
3093 		hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE,
3094 			    sizeof(ext_enable_cp), &ext_enable_cp);
3095 	} else {
3096 		struct hci_cp_le_set_scan_enable cp;
3097 
3098 		memset(&cp, 0, sizeof(cp));
3099 		cp.enable = LE_SCAN_ENABLE;
3100 		cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
3101 		hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
3102 	}
3103 
3104 	return 0;
3105 }
3106 
3107 static void le_scan_restart_work(struct work_struct *work)
3108 {
3109 	struct hci_dev *hdev = container_of(work, struct hci_dev,
3110 					    le_scan_restart.work);
3111 	unsigned long timeout, duration, scan_start, now;
3112 	u8 status;
3113 
3114 	bt_dev_dbg(hdev, "");
3115 
3116 	hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status);
3117 	if (status) {
3118 		bt_dev_err(hdev, "failed to restart LE scan: status %d",
3119 			   status);
3120 		return;
3121 	}
3122 
3123 	hci_dev_lock(hdev);
3124 
3125 	if (!test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) ||
3126 	    !hdev->discovery.scan_start)
3127 		goto unlock;
3128 
3129 	/* When the scan was started, hdev->le_scan_disable has been queued
3130 	 * after duration from scan_start. During scan restart this job
3131 	 * has been canceled, and we need to queue it again after proper
3132 	 * timeout, to make sure that scan does not run indefinitely.
3133 	 */
3134 	duration = hdev->discovery.scan_duration;
3135 	scan_start = hdev->discovery.scan_start;
3136 	now = jiffies;
3137 	if (now - scan_start <= duration) {
3138 		int elapsed;
3139 
3140 		if (now >= scan_start)
3141 			elapsed = now - scan_start;
3142 		else
3143 			elapsed = ULONG_MAX - scan_start + now;
3144 
3145 		timeout = duration - elapsed;
3146 	} else {
3147 		timeout = 0;
3148 	}
3149 
3150 	queue_delayed_work(hdev->req_workqueue,
3151 			   &hdev->le_scan_disable, timeout);
3152 
3153 unlock:
3154 	hci_dev_unlock(hdev);
3155 }
3156 
3157 static int active_scan(struct hci_request *req, unsigned long opt)
3158 {
3159 	uint16_t interval = opt;
3160 	struct hci_dev *hdev = req->hdev;
3161 	u8 own_addr_type;
3162 	/* Accept list is not used for discovery */
3163 	u8 filter_policy = 0x00;
3164 	/* Default is to enable duplicates filter */
3165 	u8 filter_dup = LE_SCAN_FILTER_DUP_ENABLE;
3166 	/* Discovery doesn't require controller address resolution */
3167 	bool addr_resolv = false;
3168 	int err;
3169 
3170 	bt_dev_dbg(hdev, "");
3171 
3172 	/* If controller is scanning, it means the background scanning is
3173 	 * running. Thus, we should temporarily stop it in order to set the
3174 	 * discovery scanning parameters.
3175 	 */
3176 	if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
3177 		hci_req_add_le_scan_disable(req, false);
3178 		cancel_interleave_scan(hdev);
3179 	}
3180 
3181 	/* All active scans will be done with either a resolvable private
3182 	 * address (when privacy feature has been enabled) or non-resolvable
3183 	 * private address.
3184 	 */
3185 	err = hci_update_random_address(req, true, scan_use_rpa(hdev),
3186 					&own_addr_type);
3187 	if (err < 0)
3188 		own_addr_type = ADDR_LE_DEV_PUBLIC;
3189 
3190 	if (hci_is_adv_monitoring(hdev)) {
3191 		/* Duplicate filter should be disabled when some advertisement
3192 		 * monitor is activated, otherwise AdvMon can only receive one
3193 		 * advertisement for one peer(*) during active scanning, and
3194 		 * might report loss to these peers.
3195 		 *
3196 		 * Note that different controllers have different meanings of
3197 		 * |duplicate|. Some of them consider packets with the same
3198 		 * address as duplicate, and others consider packets with the
3199 		 * same address and the same RSSI as duplicate. Although in the
3200 		 * latter case we don't need to disable duplicate filter, but
3201 		 * it is common to have active scanning for a short period of
3202 		 * time, the power impact should be neglectable.
3203 		 */
3204 		filter_dup = LE_SCAN_FILTER_DUP_DISABLE;
3205 	}
3206 
3207 	hci_req_start_scan(req, LE_SCAN_ACTIVE, interval,
3208 			   hdev->le_scan_window_discovery, own_addr_type,
3209 			   filter_policy, filter_dup, addr_resolv);
3210 	return 0;
3211 }
3212 
3213 static int interleaved_discov(struct hci_request *req, unsigned long opt)
3214 {
3215 	int err;
3216 
3217 	bt_dev_dbg(req->hdev, "");
3218 
3219 	err = active_scan(req, opt);
3220 	if (err)
3221 		return err;
3222 
3223 	return bredr_inquiry(req, DISCOV_BREDR_INQUIRY_LEN);
3224 }
3225 
3226 static void start_discovery(struct hci_dev *hdev, u8 *status)
3227 {
3228 	unsigned long timeout;
3229 
3230 	bt_dev_dbg(hdev, "type %u", hdev->discovery.type);
3231 
3232 	switch (hdev->discovery.type) {
3233 	case DISCOV_TYPE_BREDR:
3234 		if (!hci_dev_test_flag(hdev, HCI_INQUIRY))
3235 			hci_req_sync(hdev, bredr_inquiry,
3236 				     DISCOV_BREDR_INQUIRY_LEN, HCI_CMD_TIMEOUT,
3237 				     status);
3238 		return;
3239 	case DISCOV_TYPE_INTERLEAVED:
3240 		/* When running simultaneous discovery, the LE scanning time
3241 		 * should occupy the whole discovery time sine BR/EDR inquiry
3242 		 * and LE scanning are scheduled by the controller.
3243 		 *
3244 		 * For interleaving discovery in comparison, BR/EDR inquiry
3245 		 * and LE scanning are done sequentially with separate
3246 		 * timeouts.
3247 		 */
3248 		if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
3249 			     &hdev->quirks)) {
3250 			timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
3251 			/* During simultaneous discovery, we double LE scan
3252 			 * interval. We must leave some time for the controller
3253 			 * to do BR/EDR inquiry.
3254 			 */
3255 			hci_req_sync(hdev, interleaved_discov,
3256 				     hdev->le_scan_int_discovery * 2, HCI_CMD_TIMEOUT,
3257 				     status);
3258 			break;
3259 		}
3260 
3261 		timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout);
3262 		hci_req_sync(hdev, active_scan, hdev->le_scan_int_discovery,
3263 			     HCI_CMD_TIMEOUT, status);
3264 		break;
3265 	case DISCOV_TYPE_LE:
3266 		timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT);
3267 		hci_req_sync(hdev, active_scan, hdev->le_scan_int_discovery,
3268 			     HCI_CMD_TIMEOUT, status);
3269 		break;
3270 	default:
3271 		*status = HCI_ERROR_UNSPECIFIED;
3272 		return;
3273 	}
3274 
3275 	if (*status)
3276 		return;
3277 
3278 	bt_dev_dbg(hdev, "timeout %u ms", jiffies_to_msecs(timeout));
3279 
3280 	/* When service discovery is used and the controller has a
3281 	 * strict duplicate filter, it is important to remember the
3282 	 * start and duration of the scan. This is required for
3283 	 * restarting scanning during the discovery phase.
3284 	 */
3285 	if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) &&
3286 		     hdev->discovery.result_filtering) {
3287 		hdev->discovery.scan_start = jiffies;
3288 		hdev->discovery.scan_duration = timeout;
3289 	}
3290 
3291 	queue_delayed_work(hdev->req_workqueue, &hdev->le_scan_disable,
3292 			   timeout);
3293 }
3294 
3295 bool hci_req_stop_discovery(struct hci_request *req)
3296 {
3297 	struct hci_dev *hdev = req->hdev;
3298 	struct discovery_state *d = &hdev->discovery;
3299 	struct hci_cp_remote_name_req_cancel cp;
3300 	struct inquiry_entry *e;
3301 	bool ret = false;
3302 
3303 	bt_dev_dbg(hdev, "state %u", hdev->discovery.state);
3304 
3305 	if (d->state == DISCOVERY_FINDING || d->state == DISCOVERY_STOPPING) {
3306 		if (test_bit(HCI_INQUIRY, &hdev->flags))
3307 			hci_req_add(req, HCI_OP_INQUIRY_CANCEL, 0, NULL);
3308 
3309 		if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
3310 			cancel_delayed_work(&hdev->le_scan_disable);
3311 			cancel_delayed_work(&hdev->le_scan_restart);
3312 			hci_req_add_le_scan_disable(req, false);
3313 		}
3314 
3315 		ret = true;
3316 	} else {
3317 		/* Passive scanning */
3318 		if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
3319 			hci_req_add_le_scan_disable(req, false);
3320 			ret = true;
3321 		}
3322 	}
3323 
3324 	/* No further actions needed for LE-only discovery */
3325 	if (d->type == DISCOV_TYPE_LE)
3326 		return ret;
3327 
3328 	if (d->state == DISCOVERY_RESOLVING || d->state == DISCOVERY_STOPPING) {
3329 		e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY,
3330 						     NAME_PENDING);
3331 		if (!e)
3332 			return ret;
3333 
3334 		bacpy(&cp.bdaddr, &e->data.bdaddr);
3335 		hci_req_add(req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp),
3336 			    &cp);
3337 		ret = true;
3338 	}
3339 
3340 	return ret;
3341 }
3342 
3343 static int stop_discovery(struct hci_request *req, unsigned long opt)
3344 {
3345 	hci_dev_lock(req->hdev);
3346 	hci_req_stop_discovery(req);
3347 	hci_dev_unlock(req->hdev);
3348 
3349 	return 0;
3350 }
3351 
3352 static void discov_update(struct work_struct *work)
3353 {
3354 	struct hci_dev *hdev = container_of(work, struct hci_dev,
3355 					    discov_update);
3356 	u8 status = 0;
3357 
3358 	switch (hdev->discovery.state) {
3359 	case DISCOVERY_STARTING:
3360 		start_discovery(hdev, &status);
3361 		mgmt_start_discovery_complete(hdev, status);
3362 		if (status)
3363 			hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3364 		else
3365 			hci_discovery_set_state(hdev, DISCOVERY_FINDING);
3366 		break;
3367 	case DISCOVERY_STOPPING:
3368 		hci_req_sync(hdev, stop_discovery, 0, HCI_CMD_TIMEOUT, &status);
3369 		mgmt_stop_discovery_complete(hdev, status);
3370 		if (!status)
3371 			hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
3372 		break;
3373 	case DISCOVERY_STOPPED:
3374 	default:
3375 		return;
3376 	}
3377 }
3378 
3379 static void discov_off(struct work_struct *work)
3380 {
3381 	struct hci_dev *hdev = container_of(work, struct hci_dev,
3382 					    discov_off.work);
3383 
3384 	bt_dev_dbg(hdev, "");
3385 
3386 	hci_dev_lock(hdev);
3387 
3388 	/* When discoverable timeout triggers, then just make sure
3389 	 * the limited discoverable flag is cleared. Even in the case
3390 	 * of a timeout triggered from general discoverable, it is
3391 	 * safe to unconditionally clear the flag.
3392 	 */
3393 	hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
3394 	hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
3395 	hdev->discov_timeout = 0;
3396 
3397 	hci_dev_unlock(hdev);
3398 
3399 	hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, NULL);
3400 	mgmt_new_settings(hdev);
3401 }
3402 
3403 static int powered_update_hci(struct hci_request *req, unsigned long opt)
3404 {
3405 	struct hci_dev *hdev = req->hdev;
3406 	u8 link_sec;
3407 
3408 	hci_dev_lock(hdev);
3409 
3410 	if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
3411 	    !lmp_host_ssp_capable(hdev)) {
3412 		u8 mode = 0x01;
3413 
3414 		hci_req_add(req, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
3415 
3416 		if (bredr_sc_enabled(hdev) && !lmp_host_sc_capable(hdev)) {
3417 			u8 support = 0x01;
3418 
3419 			hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT,
3420 				    sizeof(support), &support);
3421 		}
3422 	}
3423 
3424 	if (hci_dev_test_flag(hdev, HCI_LE_ENABLED) &&
3425 	    lmp_bredr_capable(hdev)) {
3426 		struct hci_cp_write_le_host_supported cp;
3427 
3428 		cp.le = 0x01;
3429 		cp.simul = 0x00;
3430 
3431 		/* Check first if we already have the right
3432 		 * host state (host features set)
3433 		 */
3434 		if (cp.le != lmp_host_le_capable(hdev) ||
3435 		    cp.simul != lmp_host_le_br_capable(hdev))
3436 			hci_req_add(req, HCI_OP_WRITE_LE_HOST_SUPPORTED,
3437 				    sizeof(cp), &cp);
3438 	}
3439 
3440 	if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
3441 		/* Make sure the controller has a good default for
3442 		 * advertising data. This also applies to the case
3443 		 * where BR/EDR was toggled during the AUTO_OFF phase.
3444 		 */
3445 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
3446 		    list_empty(&hdev->adv_instances)) {
3447 			int err;
3448 
3449 			if (ext_adv_capable(hdev)) {
3450 				err = __hci_req_setup_ext_adv_instance(req,
3451 								       0x00);
3452 				if (!err)
3453 					__hci_req_update_scan_rsp_data(req,
3454 								       0x00);
3455 			} else {
3456 				err = 0;
3457 				__hci_req_update_adv_data(req, 0x00);
3458 				__hci_req_update_scan_rsp_data(req, 0x00);
3459 			}
3460 
3461 			if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) {
3462 				if (!ext_adv_capable(hdev))
3463 					__hci_req_enable_advertising(req);
3464 				else if (!err)
3465 					__hci_req_enable_ext_advertising(req,
3466 									 0x00);
3467 			}
3468 		} else if (!list_empty(&hdev->adv_instances)) {
3469 			struct adv_info *adv_instance;
3470 
3471 			adv_instance = list_first_entry(&hdev->adv_instances,
3472 							struct adv_info, list);
3473 			__hci_req_schedule_adv_instance(req,
3474 							adv_instance->instance,
3475 							true);
3476 		}
3477 	}
3478 
3479 	link_sec = hci_dev_test_flag(hdev, HCI_LINK_SECURITY);
3480 	if (link_sec != test_bit(HCI_AUTH, &hdev->flags))
3481 		hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE,
3482 			    sizeof(link_sec), &link_sec);
3483 
3484 	if (lmp_bredr_capable(hdev)) {
3485 		if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE))
3486 			__hci_req_write_fast_connectable(req, true);
3487 		else
3488 			__hci_req_write_fast_connectable(req, false);
3489 		__hci_req_update_scan(req);
3490 		__hci_req_update_class(req);
3491 		__hci_req_update_name(req);
3492 		__hci_req_update_eir(req);
3493 	}
3494 
3495 	hci_dev_unlock(hdev);
3496 	return 0;
3497 }
3498 
3499 int __hci_req_hci_power_on(struct hci_dev *hdev)
3500 {
3501 	/* Register the available SMP channels (BR/EDR and LE) only when
3502 	 * successfully powering on the controller. This late
3503 	 * registration is required so that LE SMP can clearly decide if
3504 	 * the public address or static address is used.
3505 	 */
3506 	smp_register(hdev);
3507 
3508 	return __hci_req_sync(hdev, powered_update_hci, 0, HCI_CMD_TIMEOUT,
3509 			      NULL);
3510 }
3511 
3512 void hci_request_setup(struct hci_dev *hdev)
3513 {
3514 	INIT_WORK(&hdev->discov_update, discov_update);
3515 	INIT_WORK(&hdev->bg_scan_update, bg_scan_update);
3516 	INIT_WORK(&hdev->scan_update, scan_update_work);
3517 	INIT_WORK(&hdev->connectable_update, connectable_update_work);
3518 	INIT_WORK(&hdev->discoverable_update, discoverable_update_work);
3519 	INIT_DELAYED_WORK(&hdev->discov_off, discov_off);
3520 	INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work);
3521 	INIT_DELAYED_WORK(&hdev->le_scan_restart, le_scan_restart_work);
3522 	INIT_DELAYED_WORK(&hdev->adv_instance_expire, adv_timeout_expire);
3523 	INIT_DELAYED_WORK(&hdev->interleave_scan, interleave_scan_work);
3524 }
3525 
3526 void hci_request_cancel_all(struct hci_dev *hdev)
3527 {
3528 	hci_req_sync_cancel(hdev, ENODEV);
3529 
3530 	cancel_work_sync(&hdev->discov_update);
3531 	cancel_work_sync(&hdev->bg_scan_update);
3532 	cancel_work_sync(&hdev->scan_update);
3533 	cancel_work_sync(&hdev->connectable_update);
3534 	cancel_work_sync(&hdev->discoverable_update);
3535 	cancel_delayed_work_sync(&hdev->discov_off);
3536 	cancel_delayed_work_sync(&hdev->le_scan_disable);
3537 	cancel_delayed_work_sync(&hdev->le_scan_restart);
3538 
3539 	if (hdev->adv_instance_timeout) {
3540 		cancel_delayed_work_sync(&hdev->adv_instance_expire);
3541 		hdev->adv_instance_timeout = 0;
3542 	}
3543 
3544 	cancel_interleave_scan(hdev);
3545 }
3546