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, ¶ms->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, ¶ms->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, ¶ms->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, ¶ms->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, ¶ms->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(¶m_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 ¶m_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 /* If Controller supports LL Privacy use own address type is 2076 * 0x03 2077 */ 2078 if (use_ll_privacy(hdev) && 2079 hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY)) 2080 *own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED; 2081 else 2082 *own_addr_type = ADDR_LE_DEV_RANDOM; 2083 2084 if (adv_instance) { 2085 if (adv_rpa_valid(adv_instance)) 2086 return 0; 2087 } else { 2088 if (rpa_valid(hdev)) 2089 return 0; 2090 } 2091 2092 err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa); 2093 if (err < 0) { 2094 bt_dev_err(hdev, "failed to generate new RPA"); 2095 return err; 2096 } 2097 2098 bacpy(rand_addr, &hdev->rpa); 2099 2100 return 0; 2101 } 2102 2103 /* In case of required privacy without resolvable private address, 2104 * use an non-resolvable private address. This is useful for 2105 * non-connectable advertising. 2106 */ 2107 if (require_privacy) { 2108 bdaddr_t nrpa; 2109 2110 while (true) { 2111 /* The non-resolvable private address is generated 2112 * from random six bytes with the two most significant 2113 * bits cleared. 2114 */ 2115 get_random_bytes(&nrpa, 6); 2116 nrpa.b[5] &= 0x3f; 2117 2118 /* The non-resolvable private address shall not be 2119 * equal to the public address. 2120 */ 2121 if (bacmp(&hdev->bdaddr, &nrpa)) 2122 break; 2123 } 2124 2125 *own_addr_type = ADDR_LE_DEV_RANDOM; 2126 bacpy(rand_addr, &nrpa); 2127 2128 return 0; 2129 } 2130 2131 /* No privacy so use a public address. */ 2132 *own_addr_type = ADDR_LE_DEV_PUBLIC; 2133 2134 return 0; 2135 } 2136 2137 void __hci_req_clear_ext_adv_sets(struct hci_request *req) 2138 { 2139 hci_req_add(req, HCI_OP_LE_CLEAR_ADV_SETS, 0, NULL); 2140 } 2141 2142 static void set_random_addr(struct hci_request *req, bdaddr_t *rpa) 2143 { 2144 struct hci_dev *hdev = req->hdev; 2145 2146 /* If we're advertising or initiating an LE connection we can't 2147 * go ahead and change the random address at this time. This is 2148 * because the eventual initiator address used for the 2149 * subsequently created connection will be undefined (some 2150 * controllers use the new address and others the one we had 2151 * when the operation started). 2152 * 2153 * In this kind of scenario skip the update and let the random 2154 * address be updated at the next cycle. 2155 */ 2156 if (hci_dev_test_flag(hdev, HCI_LE_ADV) || 2157 hci_lookup_le_connect(hdev)) { 2158 bt_dev_dbg(hdev, "Deferring random address update"); 2159 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 2160 return; 2161 } 2162 2163 hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, rpa); 2164 } 2165 2166 int __hci_req_setup_ext_adv_instance(struct hci_request *req, u8 instance) 2167 { 2168 struct hci_cp_le_set_ext_adv_params cp; 2169 struct hci_dev *hdev = req->hdev; 2170 bool connectable; 2171 u32 flags; 2172 bdaddr_t random_addr; 2173 u8 own_addr_type; 2174 int err; 2175 struct adv_info *adv_instance; 2176 bool secondary_adv; 2177 2178 if (instance > 0) { 2179 adv_instance = hci_find_adv_instance(hdev, instance); 2180 if (!adv_instance) 2181 return -EINVAL; 2182 } else { 2183 adv_instance = NULL; 2184 } 2185 2186 flags = get_adv_instance_flags(hdev, instance); 2187 2188 /* If the "connectable" instance flag was not set, then choose between 2189 * ADV_IND and ADV_NONCONN_IND based on the global connectable setting. 2190 */ 2191 connectable = (flags & MGMT_ADV_FLAG_CONNECTABLE) || 2192 mgmt_get_connectable(hdev); 2193 2194 if (!is_advertising_allowed(hdev, connectable)) 2195 return -EPERM; 2196 2197 /* Set require_privacy to true only when non-connectable 2198 * advertising is used. In that case it is fine to use a 2199 * non-resolvable private address. 2200 */ 2201 err = hci_get_random_address(hdev, !connectable, 2202 adv_use_rpa(hdev, flags), adv_instance, 2203 &own_addr_type, &random_addr); 2204 if (err < 0) 2205 return err; 2206 2207 memset(&cp, 0, sizeof(cp)); 2208 2209 if (adv_instance) { 2210 hci_cpu_to_le24(adv_instance->min_interval, cp.min_interval); 2211 hci_cpu_to_le24(adv_instance->max_interval, cp.max_interval); 2212 cp.tx_power = adv_instance->tx_power; 2213 } else { 2214 hci_cpu_to_le24(hdev->le_adv_min_interval, cp.min_interval); 2215 hci_cpu_to_le24(hdev->le_adv_max_interval, cp.max_interval); 2216 cp.tx_power = HCI_ADV_TX_POWER_NO_PREFERENCE; 2217 } 2218 2219 secondary_adv = (flags & MGMT_ADV_FLAG_SEC_MASK); 2220 2221 if (connectable) { 2222 if (secondary_adv) 2223 cp.evt_properties = cpu_to_le16(LE_EXT_ADV_CONN_IND); 2224 else 2225 cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_IND); 2226 } else if (adv_instance_is_scannable(hdev, instance) || 2227 (flags & MGMT_ADV_PARAM_SCAN_RSP)) { 2228 if (secondary_adv) 2229 cp.evt_properties = cpu_to_le16(LE_EXT_ADV_SCAN_IND); 2230 else 2231 cp.evt_properties = cpu_to_le16(LE_LEGACY_ADV_SCAN_IND); 2232 } else { 2233 if (secondary_adv) 2234 cp.evt_properties = cpu_to_le16(LE_EXT_ADV_NON_CONN_IND); 2235 else 2236 cp.evt_properties = cpu_to_le16(LE_LEGACY_NONCONN_IND); 2237 } 2238 2239 cp.own_addr_type = own_addr_type; 2240 cp.channel_map = hdev->le_adv_channel_map; 2241 cp.handle = instance; 2242 2243 if (flags & MGMT_ADV_FLAG_SEC_2M) { 2244 cp.primary_phy = HCI_ADV_PHY_1M; 2245 cp.secondary_phy = HCI_ADV_PHY_2M; 2246 } else if (flags & MGMT_ADV_FLAG_SEC_CODED) { 2247 cp.primary_phy = HCI_ADV_PHY_CODED; 2248 cp.secondary_phy = HCI_ADV_PHY_CODED; 2249 } else { 2250 /* In all other cases use 1M */ 2251 cp.primary_phy = HCI_ADV_PHY_1M; 2252 cp.secondary_phy = HCI_ADV_PHY_1M; 2253 } 2254 2255 hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_PARAMS, sizeof(cp), &cp); 2256 2257 if (own_addr_type == ADDR_LE_DEV_RANDOM && 2258 bacmp(&random_addr, BDADDR_ANY)) { 2259 struct hci_cp_le_set_adv_set_rand_addr cp; 2260 2261 /* Check if random address need to be updated */ 2262 if (adv_instance) { 2263 if (!bacmp(&random_addr, &adv_instance->random_addr)) 2264 return 0; 2265 } else { 2266 if (!bacmp(&random_addr, &hdev->random_addr)) 2267 return 0; 2268 /* Instance 0x00 doesn't have an adv_info, instead it 2269 * uses hdev->random_addr to track its address so 2270 * whenever it needs to be updated this also set the 2271 * random address since hdev->random_addr is shared with 2272 * scan state machine. 2273 */ 2274 set_random_addr(req, &random_addr); 2275 } 2276 2277 memset(&cp, 0, sizeof(cp)); 2278 2279 cp.handle = instance; 2280 bacpy(&cp.bdaddr, &random_addr); 2281 2282 hci_req_add(req, 2283 HCI_OP_LE_SET_ADV_SET_RAND_ADDR, 2284 sizeof(cp), &cp); 2285 } 2286 2287 return 0; 2288 } 2289 2290 int __hci_req_enable_ext_advertising(struct hci_request *req, u8 instance) 2291 { 2292 struct hci_dev *hdev = req->hdev; 2293 struct hci_cp_le_set_ext_adv_enable *cp; 2294 struct hci_cp_ext_adv_set *adv_set; 2295 u8 data[sizeof(*cp) + sizeof(*adv_set) * 1]; 2296 struct adv_info *adv_instance; 2297 2298 if (instance > 0) { 2299 adv_instance = hci_find_adv_instance(hdev, instance); 2300 if (!adv_instance) 2301 return -EINVAL; 2302 } else { 2303 adv_instance = NULL; 2304 } 2305 2306 cp = (void *) data; 2307 adv_set = (void *) cp->data; 2308 2309 memset(cp, 0, sizeof(*cp)); 2310 2311 cp->enable = 0x01; 2312 cp->num_of_sets = 0x01; 2313 2314 memset(adv_set, 0, sizeof(*adv_set)); 2315 2316 adv_set->handle = instance; 2317 2318 /* Set duration per instance since controller is responsible for 2319 * scheduling it. 2320 */ 2321 if (adv_instance && adv_instance->duration) { 2322 u16 duration = adv_instance->timeout * MSEC_PER_SEC; 2323 2324 /* Time = N * 10 ms */ 2325 adv_set->duration = cpu_to_le16(duration / 10); 2326 } 2327 2328 hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_ENABLE, 2329 sizeof(*cp) + sizeof(*adv_set) * cp->num_of_sets, 2330 data); 2331 2332 return 0; 2333 } 2334 2335 int __hci_req_disable_ext_adv_instance(struct hci_request *req, u8 instance) 2336 { 2337 struct hci_dev *hdev = req->hdev; 2338 struct hci_cp_le_set_ext_adv_enable *cp; 2339 struct hci_cp_ext_adv_set *adv_set; 2340 u8 data[sizeof(*cp) + sizeof(*adv_set) * 1]; 2341 u8 req_size; 2342 2343 /* If request specifies an instance that doesn't exist, fail */ 2344 if (instance > 0 && !hci_find_adv_instance(hdev, instance)) 2345 return -EINVAL; 2346 2347 memset(data, 0, sizeof(data)); 2348 2349 cp = (void *)data; 2350 adv_set = (void *)cp->data; 2351 2352 /* Instance 0x00 indicates all advertising instances will be disabled */ 2353 cp->num_of_sets = !!instance; 2354 cp->enable = 0x00; 2355 2356 adv_set->handle = instance; 2357 2358 req_size = sizeof(*cp) + sizeof(*adv_set) * cp->num_of_sets; 2359 hci_req_add(req, HCI_OP_LE_SET_EXT_ADV_ENABLE, req_size, data); 2360 2361 return 0; 2362 } 2363 2364 int __hci_req_remove_ext_adv_instance(struct hci_request *req, u8 instance) 2365 { 2366 struct hci_dev *hdev = req->hdev; 2367 2368 /* If request specifies an instance that doesn't exist, fail */ 2369 if (instance > 0 && !hci_find_adv_instance(hdev, instance)) 2370 return -EINVAL; 2371 2372 hci_req_add(req, HCI_OP_LE_REMOVE_ADV_SET, sizeof(instance), &instance); 2373 2374 return 0; 2375 } 2376 2377 int __hci_req_start_ext_adv(struct hci_request *req, u8 instance) 2378 { 2379 struct hci_dev *hdev = req->hdev; 2380 struct adv_info *adv_instance = hci_find_adv_instance(hdev, instance); 2381 int err; 2382 2383 /* If instance isn't pending, the chip knows about it, and it's safe to 2384 * disable 2385 */ 2386 if (adv_instance && !adv_instance->pending) 2387 __hci_req_disable_ext_adv_instance(req, instance); 2388 2389 err = __hci_req_setup_ext_adv_instance(req, instance); 2390 if (err < 0) 2391 return err; 2392 2393 __hci_req_update_scan_rsp_data(req, instance); 2394 __hci_req_enable_ext_advertising(req, instance); 2395 2396 return 0; 2397 } 2398 2399 int __hci_req_schedule_adv_instance(struct hci_request *req, u8 instance, 2400 bool force) 2401 { 2402 struct hci_dev *hdev = req->hdev; 2403 struct adv_info *adv_instance = NULL; 2404 u16 timeout; 2405 2406 if (hci_dev_test_flag(hdev, HCI_ADVERTISING) || 2407 list_empty(&hdev->adv_instances)) 2408 return -EPERM; 2409 2410 if (hdev->adv_instance_timeout) 2411 return -EBUSY; 2412 2413 adv_instance = hci_find_adv_instance(hdev, instance); 2414 if (!adv_instance) 2415 return -ENOENT; 2416 2417 /* A zero timeout means unlimited advertising. As long as there is 2418 * only one instance, duration should be ignored. We still set a timeout 2419 * in case further instances are being added later on. 2420 * 2421 * If the remaining lifetime of the instance is more than the duration 2422 * then the timeout corresponds to the duration, otherwise it will be 2423 * reduced to the remaining instance lifetime. 2424 */ 2425 if (adv_instance->timeout == 0 || 2426 adv_instance->duration <= adv_instance->remaining_time) 2427 timeout = adv_instance->duration; 2428 else 2429 timeout = adv_instance->remaining_time; 2430 2431 /* The remaining time is being reduced unless the instance is being 2432 * advertised without time limit. 2433 */ 2434 if (adv_instance->timeout) 2435 adv_instance->remaining_time = 2436 adv_instance->remaining_time - timeout; 2437 2438 /* Only use work for scheduling instances with legacy advertising */ 2439 if (!ext_adv_capable(hdev)) { 2440 hdev->adv_instance_timeout = timeout; 2441 queue_delayed_work(hdev->req_workqueue, 2442 &hdev->adv_instance_expire, 2443 msecs_to_jiffies(timeout * 1000)); 2444 } 2445 2446 /* If we're just re-scheduling the same instance again then do not 2447 * execute any HCI commands. This happens when a single instance is 2448 * being advertised. 2449 */ 2450 if (!force && hdev->cur_adv_instance == instance && 2451 hci_dev_test_flag(hdev, HCI_LE_ADV)) 2452 return 0; 2453 2454 hdev->cur_adv_instance = instance; 2455 if (ext_adv_capable(hdev)) { 2456 __hci_req_start_ext_adv(req, instance); 2457 } else { 2458 __hci_req_update_adv_data(req, instance); 2459 __hci_req_update_scan_rsp_data(req, instance); 2460 __hci_req_enable_advertising(req); 2461 } 2462 2463 return 0; 2464 } 2465 2466 /* For a single instance: 2467 * - force == true: The instance will be removed even when its remaining 2468 * lifetime is not zero. 2469 * - force == false: the instance will be deactivated but kept stored unless 2470 * the remaining lifetime is zero. 2471 * 2472 * For instance == 0x00: 2473 * - force == true: All instances will be removed regardless of their timeout 2474 * setting. 2475 * - force == false: Only instances that have a timeout will be removed. 2476 */ 2477 void hci_req_clear_adv_instance(struct hci_dev *hdev, struct sock *sk, 2478 struct hci_request *req, u8 instance, 2479 bool force) 2480 { 2481 struct adv_info *adv_instance, *n, *next_instance = NULL; 2482 int err; 2483 u8 rem_inst; 2484 2485 /* Cancel any timeout concerning the removed instance(s). */ 2486 if (!instance || hdev->cur_adv_instance == instance) 2487 cancel_adv_timeout(hdev); 2488 2489 /* Get the next instance to advertise BEFORE we remove 2490 * the current one. This can be the same instance again 2491 * if there is only one instance. 2492 */ 2493 if (instance && hdev->cur_adv_instance == instance) 2494 next_instance = hci_get_next_instance(hdev, instance); 2495 2496 if (instance == 0x00) { 2497 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, 2498 list) { 2499 if (!(force || adv_instance->timeout)) 2500 continue; 2501 2502 rem_inst = adv_instance->instance; 2503 err = hci_remove_adv_instance(hdev, rem_inst); 2504 if (!err) 2505 mgmt_advertising_removed(sk, hdev, rem_inst); 2506 } 2507 } else { 2508 adv_instance = hci_find_adv_instance(hdev, instance); 2509 2510 if (force || (adv_instance && adv_instance->timeout && 2511 !adv_instance->remaining_time)) { 2512 /* Don't advertise a removed instance. */ 2513 if (next_instance && 2514 next_instance->instance == instance) 2515 next_instance = NULL; 2516 2517 err = hci_remove_adv_instance(hdev, instance); 2518 if (!err) 2519 mgmt_advertising_removed(sk, hdev, instance); 2520 } 2521 } 2522 2523 if (!req || !hdev_is_powered(hdev) || 2524 hci_dev_test_flag(hdev, HCI_ADVERTISING)) 2525 return; 2526 2527 if (next_instance && !ext_adv_capable(hdev)) 2528 __hci_req_schedule_adv_instance(req, next_instance->instance, 2529 false); 2530 } 2531 2532 int hci_update_random_address(struct hci_request *req, bool require_privacy, 2533 bool use_rpa, u8 *own_addr_type) 2534 { 2535 struct hci_dev *hdev = req->hdev; 2536 int err; 2537 2538 /* If privacy is enabled use a resolvable private address. If 2539 * current RPA has expired or there is something else than 2540 * the current RPA in use, then generate a new one. 2541 */ 2542 if (use_rpa) { 2543 /* If Controller supports LL Privacy use own address type is 2544 * 0x03 2545 */ 2546 if (use_ll_privacy(hdev) && 2547 hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY)) 2548 *own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED; 2549 else 2550 *own_addr_type = ADDR_LE_DEV_RANDOM; 2551 2552 if (rpa_valid(hdev)) 2553 return 0; 2554 2555 err = smp_generate_rpa(hdev, hdev->irk, &hdev->rpa); 2556 if (err < 0) { 2557 bt_dev_err(hdev, "failed to generate new RPA"); 2558 return err; 2559 } 2560 2561 set_random_addr(req, &hdev->rpa); 2562 2563 return 0; 2564 } 2565 2566 /* In case of required privacy without resolvable private address, 2567 * use an non-resolvable private address. This is useful for active 2568 * scanning and non-connectable advertising. 2569 */ 2570 if (require_privacy) { 2571 bdaddr_t nrpa; 2572 2573 while (true) { 2574 /* The non-resolvable private address is generated 2575 * from random six bytes with the two most significant 2576 * bits cleared. 2577 */ 2578 get_random_bytes(&nrpa, 6); 2579 nrpa.b[5] &= 0x3f; 2580 2581 /* The non-resolvable private address shall not be 2582 * equal to the public address. 2583 */ 2584 if (bacmp(&hdev->bdaddr, &nrpa)) 2585 break; 2586 } 2587 2588 *own_addr_type = ADDR_LE_DEV_RANDOM; 2589 set_random_addr(req, &nrpa); 2590 return 0; 2591 } 2592 2593 /* If forcing static address is in use or there is no public 2594 * address use the static address as random address (but skip 2595 * the HCI command if the current random address is already the 2596 * static one. 2597 * 2598 * In case BR/EDR has been disabled on a dual-mode controller 2599 * and a static address has been configured, then use that 2600 * address instead of the public BR/EDR address. 2601 */ 2602 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || 2603 !bacmp(&hdev->bdaddr, BDADDR_ANY) || 2604 (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 2605 bacmp(&hdev->static_addr, BDADDR_ANY))) { 2606 *own_addr_type = ADDR_LE_DEV_RANDOM; 2607 if (bacmp(&hdev->static_addr, &hdev->random_addr)) 2608 hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, 2609 &hdev->static_addr); 2610 return 0; 2611 } 2612 2613 /* Neither privacy nor static address is being used so use a 2614 * public address. 2615 */ 2616 *own_addr_type = ADDR_LE_DEV_PUBLIC; 2617 2618 return 0; 2619 } 2620 2621 static bool disconnected_accept_list_entries(struct hci_dev *hdev) 2622 { 2623 struct bdaddr_list *b; 2624 2625 list_for_each_entry(b, &hdev->accept_list, list) { 2626 struct hci_conn *conn; 2627 2628 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &b->bdaddr); 2629 if (!conn) 2630 return true; 2631 2632 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG) 2633 return true; 2634 } 2635 2636 return false; 2637 } 2638 2639 void __hci_req_update_scan(struct hci_request *req) 2640 { 2641 struct hci_dev *hdev = req->hdev; 2642 u8 scan; 2643 2644 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 2645 return; 2646 2647 if (!hdev_is_powered(hdev)) 2648 return; 2649 2650 if (mgmt_powering_down(hdev)) 2651 return; 2652 2653 if (hdev->scanning_paused) 2654 return; 2655 2656 if (hci_dev_test_flag(hdev, HCI_CONNECTABLE) || 2657 disconnected_accept_list_entries(hdev)) 2658 scan = SCAN_PAGE; 2659 else 2660 scan = SCAN_DISABLED; 2661 2662 if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 2663 scan |= SCAN_INQUIRY; 2664 2665 if (test_bit(HCI_PSCAN, &hdev->flags) == !!(scan & SCAN_PAGE) && 2666 test_bit(HCI_ISCAN, &hdev->flags) == !!(scan & SCAN_INQUIRY)) 2667 return; 2668 2669 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); 2670 } 2671 2672 static int update_scan(struct hci_request *req, unsigned long opt) 2673 { 2674 hci_dev_lock(req->hdev); 2675 __hci_req_update_scan(req); 2676 hci_dev_unlock(req->hdev); 2677 return 0; 2678 } 2679 2680 static void scan_update_work(struct work_struct *work) 2681 { 2682 struct hci_dev *hdev = container_of(work, struct hci_dev, scan_update); 2683 2684 hci_req_sync(hdev, update_scan, 0, HCI_CMD_TIMEOUT, NULL); 2685 } 2686 2687 static int connectable_update(struct hci_request *req, unsigned long opt) 2688 { 2689 struct hci_dev *hdev = req->hdev; 2690 2691 hci_dev_lock(hdev); 2692 2693 __hci_req_update_scan(req); 2694 2695 /* If BR/EDR is not enabled and we disable advertising as a 2696 * by-product of disabling connectable, we need to update the 2697 * advertising flags. 2698 */ 2699 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 2700 __hci_req_update_adv_data(req, hdev->cur_adv_instance); 2701 2702 /* Update the advertising parameters if necessary */ 2703 if (hci_dev_test_flag(hdev, HCI_ADVERTISING) || 2704 !list_empty(&hdev->adv_instances)) { 2705 if (ext_adv_capable(hdev)) 2706 __hci_req_start_ext_adv(req, hdev->cur_adv_instance); 2707 else 2708 __hci_req_enable_advertising(req); 2709 } 2710 2711 __hci_update_background_scan(req); 2712 2713 hci_dev_unlock(hdev); 2714 2715 return 0; 2716 } 2717 2718 static void connectable_update_work(struct work_struct *work) 2719 { 2720 struct hci_dev *hdev = container_of(work, struct hci_dev, 2721 connectable_update); 2722 u8 status; 2723 2724 hci_req_sync(hdev, connectable_update, 0, HCI_CMD_TIMEOUT, &status); 2725 mgmt_set_connectable_complete(hdev, status); 2726 } 2727 2728 static u8 get_service_classes(struct hci_dev *hdev) 2729 { 2730 struct bt_uuid *uuid; 2731 u8 val = 0; 2732 2733 list_for_each_entry(uuid, &hdev->uuids, list) 2734 val |= uuid->svc_hint; 2735 2736 return val; 2737 } 2738 2739 void __hci_req_update_class(struct hci_request *req) 2740 { 2741 struct hci_dev *hdev = req->hdev; 2742 u8 cod[3]; 2743 2744 bt_dev_dbg(hdev, ""); 2745 2746 if (!hdev_is_powered(hdev)) 2747 return; 2748 2749 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 2750 return; 2751 2752 if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE)) 2753 return; 2754 2755 cod[0] = hdev->minor_class; 2756 cod[1] = hdev->major_class; 2757 cod[2] = get_service_classes(hdev); 2758 2759 if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) 2760 cod[1] |= 0x20; 2761 2762 if (memcmp(cod, hdev->dev_class, 3) == 0) 2763 return; 2764 2765 hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod); 2766 } 2767 2768 static void write_iac(struct hci_request *req) 2769 { 2770 struct hci_dev *hdev = req->hdev; 2771 struct hci_cp_write_current_iac_lap cp; 2772 2773 if (!hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 2774 return; 2775 2776 if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) { 2777 /* Limited discoverable mode */ 2778 cp.num_iac = min_t(u8, hdev->num_iac, 2); 2779 cp.iac_lap[0] = 0x00; /* LIAC */ 2780 cp.iac_lap[1] = 0x8b; 2781 cp.iac_lap[2] = 0x9e; 2782 cp.iac_lap[3] = 0x33; /* GIAC */ 2783 cp.iac_lap[4] = 0x8b; 2784 cp.iac_lap[5] = 0x9e; 2785 } else { 2786 /* General discoverable mode */ 2787 cp.num_iac = 1; 2788 cp.iac_lap[0] = 0x33; /* GIAC */ 2789 cp.iac_lap[1] = 0x8b; 2790 cp.iac_lap[2] = 0x9e; 2791 } 2792 2793 hci_req_add(req, HCI_OP_WRITE_CURRENT_IAC_LAP, 2794 (cp.num_iac * 3) + 1, &cp); 2795 } 2796 2797 static int discoverable_update(struct hci_request *req, unsigned long opt) 2798 { 2799 struct hci_dev *hdev = req->hdev; 2800 2801 hci_dev_lock(hdev); 2802 2803 if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 2804 write_iac(req); 2805 __hci_req_update_scan(req); 2806 __hci_req_update_class(req); 2807 } 2808 2809 /* Advertising instances don't use the global discoverable setting, so 2810 * only update AD if advertising was enabled using Set Advertising. 2811 */ 2812 if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) { 2813 __hci_req_update_adv_data(req, 0x00); 2814 2815 /* Discoverable mode affects the local advertising 2816 * address in limited privacy mode. 2817 */ 2818 if (hci_dev_test_flag(hdev, HCI_LIMITED_PRIVACY)) { 2819 if (ext_adv_capable(hdev)) 2820 __hci_req_start_ext_adv(req, 0x00); 2821 else 2822 __hci_req_enable_advertising(req); 2823 } 2824 } 2825 2826 hci_dev_unlock(hdev); 2827 2828 return 0; 2829 } 2830 2831 static void discoverable_update_work(struct work_struct *work) 2832 { 2833 struct hci_dev *hdev = container_of(work, struct hci_dev, 2834 discoverable_update); 2835 u8 status; 2836 2837 hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, &status); 2838 mgmt_set_discoverable_complete(hdev, status); 2839 } 2840 2841 void __hci_abort_conn(struct hci_request *req, struct hci_conn *conn, 2842 u8 reason) 2843 { 2844 switch (conn->state) { 2845 case BT_CONNECTED: 2846 case BT_CONFIG: 2847 if (conn->type == AMP_LINK) { 2848 struct hci_cp_disconn_phy_link cp; 2849 2850 cp.phy_handle = HCI_PHY_HANDLE(conn->handle); 2851 cp.reason = reason; 2852 hci_req_add(req, HCI_OP_DISCONN_PHY_LINK, sizeof(cp), 2853 &cp); 2854 } else { 2855 struct hci_cp_disconnect dc; 2856 2857 dc.handle = cpu_to_le16(conn->handle); 2858 dc.reason = reason; 2859 hci_req_add(req, HCI_OP_DISCONNECT, sizeof(dc), &dc); 2860 } 2861 2862 conn->state = BT_DISCONN; 2863 2864 break; 2865 case BT_CONNECT: 2866 if (conn->type == LE_LINK) { 2867 if (test_bit(HCI_CONN_SCANNING, &conn->flags)) 2868 break; 2869 hci_req_add(req, HCI_OP_LE_CREATE_CONN_CANCEL, 2870 0, NULL); 2871 } else if (conn->type == ACL_LINK) { 2872 if (req->hdev->hci_ver < BLUETOOTH_VER_1_2) 2873 break; 2874 hci_req_add(req, HCI_OP_CREATE_CONN_CANCEL, 2875 6, &conn->dst); 2876 } 2877 break; 2878 case BT_CONNECT2: 2879 if (conn->type == ACL_LINK) { 2880 struct hci_cp_reject_conn_req rej; 2881 2882 bacpy(&rej.bdaddr, &conn->dst); 2883 rej.reason = reason; 2884 2885 hci_req_add(req, HCI_OP_REJECT_CONN_REQ, 2886 sizeof(rej), &rej); 2887 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) { 2888 struct hci_cp_reject_sync_conn_req rej; 2889 2890 bacpy(&rej.bdaddr, &conn->dst); 2891 2892 /* SCO rejection has its own limited set of 2893 * allowed error values (0x0D-0x0F) which isn't 2894 * compatible with most values passed to this 2895 * function. To be safe hard-code one of the 2896 * values that's suitable for SCO. 2897 */ 2898 rej.reason = HCI_ERROR_REJ_LIMITED_RESOURCES; 2899 2900 hci_req_add(req, HCI_OP_REJECT_SYNC_CONN_REQ, 2901 sizeof(rej), &rej); 2902 } 2903 break; 2904 default: 2905 conn->state = BT_CLOSED; 2906 break; 2907 } 2908 } 2909 2910 static void abort_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode) 2911 { 2912 if (status) 2913 bt_dev_dbg(hdev, "Failed to abort connection: status 0x%2.2x", status); 2914 } 2915 2916 int hci_abort_conn(struct hci_conn *conn, u8 reason) 2917 { 2918 struct hci_request req; 2919 int err; 2920 2921 hci_req_init(&req, conn->hdev); 2922 2923 __hci_abort_conn(&req, conn, reason); 2924 2925 err = hci_req_run(&req, abort_conn_complete); 2926 if (err && err != -ENODATA) { 2927 bt_dev_err(conn->hdev, "failed to run HCI request: err %d", err); 2928 return err; 2929 } 2930 2931 return 0; 2932 } 2933 2934 static int update_bg_scan(struct hci_request *req, unsigned long opt) 2935 { 2936 hci_dev_lock(req->hdev); 2937 __hci_update_background_scan(req); 2938 hci_dev_unlock(req->hdev); 2939 return 0; 2940 } 2941 2942 static void bg_scan_update(struct work_struct *work) 2943 { 2944 struct hci_dev *hdev = container_of(work, struct hci_dev, 2945 bg_scan_update); 2946 struct hci_conn *conn; 2947 u8 status; 2948 int err; 2949 2950 err = hci_req_sync(hdev, update_bg_scan, 0, HCI_CMD_TIMEOUT, &status); 2951 if (!err) 2952 return; 2953 2954 hci_dev_lock(hdev); 2955 2956 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT); 2957 if (conn) 2958 hci_le_conn_failed(conn, status); 2959 2960 hci_dev_unlock(hdev); 2961 } 2962 2963 static int le_scan_disable(struct hci_request *req, unsigned long opt) 2964 { 2965 hci_req_add_le_scan_disable(req, false); 2966 return 0; 2967 } 2968 2969 static int bredr_inquiry(struct hci_request *req, unsigned long opt) 2970 { 2971 u8 length = opt; 2972 const u8 giac[3] = { 0x33, 0x8b, 0x9e }; 2973 const u8 liac[3] = { 0x00, 0x8b, 0x9e }; 2974 struct hci_cp_inquiry cp; 2975 2976 if (test_bit(HCI_INQUIRY, &req->hdev->flags)) 2977 return 0; 2978 2979 bt_dev_dbg(req->hdev, ""); 2980 2981 hci_dev_lock(req->hdev); 2982 hci_inquiry_cache_flush(req->hdev); 2983 hci_dev_unlock(req->hdev); 2984 2985 memset(&cp, 0, sizeof(cp)); 2986 2987 if (req->hdev->discovery.limited) 2988 memcpy(&cp.lap, liac, sizeof(cp.lap)); 2989 else 2990 memcpy(&cp.lap, giac, sizeof(cp.lap)); 2991 2992 cp.length = length; 2993 2994 hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp); 2995 2996 return 0; 2997 } 2998 2999 static void le_scan_disable_work(struct work_struct *work) 3000 { 3001 struct hci_dev *hdev = container_of(work, struct hci_dev, 3002 le_scan_disable.work); 3003 u8 status; 3004 3005 bt_dev_dbg(hdev, ""); 3006 3007 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN)) 3008 return; 3009 3010 cancel_delayed_work(&hdev->le_scan_restart); 3011 3012 hci_req_sync(hdev, le_scan_disable, 0, HCI_CMD_TIMEOUT, &status); 3013 if (status) { 3014 bt_dev_err(hdev, "failed to disable LE scan: status 0x%02x", 3015 status); 3016 return; 3017 } 3018 3019 hdev->discovery.scan_start = 0; 3020 3021 /* If we were running LE only scan, change discovery state. If 3022 * we were running both LE and BR/EDR inquiry simultaneously, 3023 * and BR/EDR inquiry is already finished, stop discovery, 3024 * otherwise BR/EDR inquiry will stop discovery when finished. 3025 * If we will resolve remote device name, do not change 3026 * discovery state. 3027 */ 3028 3029 if (hdev->discovery.type == DISCOV_TYPE_LE) 3030 goto discov_stopped; 3031 3032 if (hdev->discovery.type != DISCOV_TYPE_INTERLEAVED) 3033 return; 3034 3035 if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks)) { 3036 if (!test_bit(HCI_INQUIRY, &hdev->flags) && 3037 hdev->discovery.state != DISCOVERY_RESOLVING) 3038 goto discov_stopped; 3039 3040 return; 3041 } 3042 3043 hci_req_sync(hdev, bredr_inquiry, DISCOV_INTERLEAVED_INQUIRY_LEN, 3044 HCI_CMD_TIMEOUT, &status); 3045 if (status) { 3046 bt_dev_err(hdev, "inquiry failed: status 0x%02x", status); 3047 goto discov_stopped; 3048 } 3049 3050 return; 3051 3052 discov_stopped: 3053 hci_dev_lock(hdev); 3054 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 3055 hci_dev_unlock(hdev); 3056 } 3057 3058 static int le_scan_restart(struct hci_request *req, unsigned long opt) 3059 { 3060 struct hci_dev *hdev = req->hdev; 3061 3062 /* If controller is not scanning we are done. */ 3063 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN)) 3064 return 0; 3065 3066 if (hdev->scanning_paused) { 3067 bt_dev_dbg(hdev, "Scanning is paused for suspend"); 3068 return 0; 3069 } 3070 3071 hci_req_add_le_scan_disable(req, false); 3072 3073 if (use_ext_scan(hdev)) { 3074 struct hci_cp_le_set_ext_scan_enable ext_enable_cp; 3075 3076 memset(&ext_enable_cp, 0, sizeof(ext_enable_cp)); 3077 ext_enable_cp.enable = LE_SCAN_ENABLE; 3078 ext_enable_cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE; 3079 3080 hci_req_add(req, HCI_OP_LE_SET_EXT_SCAN_ENABLE, 3081 sizeof(ext_enable_cp), &ext_enable_cp); 3082 } else { 3083 struct hci_cp_le_set_scan_enable cp; 3084 3085 memset(&cp, 0, sizeof(cp)); 3086 cp.enable = LE_SCAN_ENABLE; 3087 cp.filter_dup = LE_SCAN_FILTER_DUP_ENABLE; 3088 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp); 3089 } 3090 3091 return 0; 3092 } 3093 3094 static void le_scan_restart_work(struct work_struct *work) 3095 { 3096 struct hci_dev *hdev = container_of(work, struct hci_dev, 3097 le_scan_restart.work); 3098 unsigned long timeout, duration, scan_start, now; 3099 u8 status; 3100 3101 bt_dev_dbg(hdev, ""); 3102 3103 hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status); 3104 if (status) { 3105 bt_dev_err(hdev, "failed to restart LE scan: status %d", 3106 status); 3107 return; 3108 } 3109 3110 hci_dev_lock(hdev); 3111 3112 if (!test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) || 3113 !hdev->discovery.scan_start) 3114 goto unlock; 3115 3116 /* When the scan was started, hdev->le_scan_disable has been queued 3117 * after duration from scan_start. During scan restart this job 3118 * has been canceled, and we need to queue it again after proper 3119 * timeout, to make sure that scan does not run indefinitely. 3120 */ 3121 duration = hdev->discovery.scan_duration; 3122 scan_start = hdev->discovery.scan_start; 3123 now = jiffies; 3124 if (now - scan_start <= duration) { 3125 int elapsed; 3126 3127 if (now >= scan_start) 3128 elapsed = now - scan_start; 3129 else 3130 elapsed = ULONG_MAX - scan_start + now; 3131 3132 timeout = duration - elapsed; 3133 } else { 3134 timeout = 0; 3135 } 3136 3137 queue_delayed_work(hdev->req_workqueue, 3138 &hdev->le_scan_disable, timeout); 3139 3140 unlock: 3141 hci_dev_unlock(hdev); 3142 } 3143 3144 static int active_scan(struct hci_request *req, unsigned long opt) 3145 { 3146 uint16_t interval = opt; 3147 struct hci_dev *hdev = req->hdev; 3148 u8 own_addr_type; 3149 /* Accept list is not used for discovery */ 3150 u8 filter_policy = 0x00; 3151 /* Default is to enable duplicates filter */ 3152 u8 filter_dup = LE_SCAN_FILTER_DUP_ENABLE; 3153 /* Discovery doesn't require controller address resolution */ 3154 bool addr_resolv = false; 3155 int err; 3156 3157 bt_dev_dbg(hdev, ""); 3158 3159 /* If controller is scanning, it means the background scanning is 3160 * running. Thus, we should temporarily stop it in order to set the 3161 * discovery scanning parameters. 3162 */ 3163 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { 3164 hci_req_add_le_scan_disable(req, false); 3165 cancel_interleave_scan(hdev); 3166 } 3167 3168 /* All active scans will be done with either a resolvable private 3169 * address (when privacy feature has been enabled) or non-resolvable 3170 * private address. 3171 */ 3172 err = hci_update_random_address(req, true, scan_use_rpa(hdev), 3173 &own_addr_type); 3174 if (err < 0) 3175 own_addr_type = ADDR_LE_DEV_PUBLIC; 3176 3177 if (hci_is_adv_monitoring(hdev)) { 3178 /* Duplicate filter should be disabled when some advertisement 3179 * monitor is activated, otherwise AdvMon can only receive one 3180 * advertisement for one peer(*) during active scanning, and 3181 * might report loss to these peers. 3182 * 3183 * Note that different controllers have different meanings of 3184 * |duplicate|. Some of them consider packets with the same 3185 * address as duplicate, and others consider packets with the 3186 * same address and the same RSSI as duplicate. Although in the 3187 * latter case we don't need to disable duplicate filter, but 3188 * it is common to have active scanning for a short period of 3189 * time, the power impact should be neglectable. 3190 */ 3191 filter_dup = LE_SCAN_FILTER_DUP_DISABLE; 3192 } 3193 3194 hci_req_start_scan(req, LE_SCAN_ACTIVE, interval, 3195 hdev->le_scan_window_discovery, own_addr_type, 3196 filter_policy, filter_dup, addr_resolv); 3197 return 0; 3198 } 3199 3200 static int interleaved_discov(struct hci_request *req, unsigned long opt) 3201 { 3202 int err; 3203 3204 bt_dev_dbg(req->hdev, ""); 3205 3206 err = active_scan(req, opt); 3207 if (err) 3208 return err; 3209 3210 return bredr_inquiry(req, DISCOV_BREDR_INQUIRY_LEN); 3211 } 3212 3213 static void start_discovery(struct hci_dev *hdev, u8 *status) 3214 { 3215 unsigned long timeout; 3216 3217 bt_dev_dbg(hdev, "type %u", hdev->discovery.type); 3218 3219 switch (hdev->discovery.type) { 3220 case DISCOV_TYPE_BREDR: 3221 if (!hci_dev_test_flag(hdev, HCI_INQUIRY)) 3222 hci_req_sync(hdev, bredr_inquiry, 3223 DISCOV_BREDR_INQUIRY_LEN, HCI_CMD_TIMEOUT, 3224 status); 3225 return; 3226 case DISCOV_TYPE_INTERLEAVED: 3227 /* When running simultaneous discovery, the LE scanning time 3228 * should occupy the whole discovery time sine BR/EDR inquiry 3229 * and LE scanning are scheduled by the controller. 3230 * 3231 * For interleaving discovery in comparison, BR/EDR inquiry 3232 * and LE scanning are done sequentially with separate 3233 * timeouts. 3234 */ 3235 if (test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, 3236 &hdev->quirks)) { 3237 timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT); 3238 /* During simultaneous discovery, we double LE scan 3239 * interval. We must leave some time for the controller 3240 * to do BR/EDR inquiry. 3241 */ 3242 hci_req_sync(hdev, interleaved_discov, 3243 hdev->le_scan_int_discovery * 2, HCI_CMD_TIMEOUT, 3244 status); 3245 break; 3246 } 3247 3248 timeout = msecs_to_jiffies(hdev->discov_interleaved_timeout); 3249 hci_req_sync(hdev, active_scan, hdev->le_scan_int_discovery, 3250 HCI_CMD_TIMEOUT, status); 3251 break; 3252 case DISCOV_TYPE_LE: 3253 timeout = msecs_to_jiffies(DISCOV_LE_TIMEOUT); 3254 hci_req_sync(hdev, active_scan, hdev->le_scan_int_discovery, 3255 HCI_CMD_TIMEOUT, status); 3256 break; 3257 default: 3258 *status = HCI_ERROR_UNSPECIFIED; 3259 return; 3260 } 3261 3262 if (*status) 3263 return; 3264 3265 bt_dev_dbg(hdev, "timeout %u ms", jiffies_to_msecs(timeout)); 3266 3267 /* When service discovery is used and the controller has a 3268 * strict duplicate filter, it is important to remember the 3269 * start and duration of the scan. This is required for 3270 * restarting scanning during the discovery phase. 3271 */ 3272 if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks) && 3273 hdev->discovery.result_filtering) { 3274 hdev->discovery.scan_start = jiffies; 3275 hdev->discovery.scan_duration = timeout; 3276 } 3277 3278 queue_delayed_work(hdev->req_workqueue, &hdev->le_scan_disable, 3279 timeout); 3280 } 3281 3282 bool hci_req_stop_discovery(struct hci_request *req) 3283 { 3284 struct hci_dev *hdev = req->hdev; 3285 struct discovery_state *d = &hdev->discovery; 3286 struct hci_cp_remote_name_req_cancel cp; 3287 struct inquiry_entry *e; 3288 bool ret = false; 3289 3290 bt_dev_dbg(hdev, "state %u", hdev->discovery.state); 3291 3292 if (d->state == DISCOVERY_FINDING || d->state == DISCOVERY_STOPPING) { 3293 if (test_bit(HCI_INQUIRY, &hdev->flags)) 3294 hci_req_add(req, HCI_OP_INQUIRY_CANCEL, 0, NULL); 3295 3296 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { 3297 cancel_delayed_work(&hdev->le_scan_disable); 3298 cancel_delayed_work(&hdev->le_scan_restart); 3299 hci_req_add_le_scan_disable(req, false); 3300 } 3301 3302 ret = true; 3303 } else { 3304 /* Passive scanning */ 3305 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { 3306 hci_req_add_le_scan_disable(req, false); 3307 ret = true; 3308 } 3309 } 3310 3311 /* No further actions needed for LE-only discovery */ 3312 if (d->type == DISCOV_TYPE_LE) 3313 return ret; 3314 3315 if (d->state == DISCOVERY_RESOLVING || d->state == DISCOVERY_STOPPING) { 3316 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, 3317 NAME_PENDING); 3318 if (!e) 3319 return ret; 3320 3321 bacpy(&cp.bdaddr, &e->data.bdaddr); 3322 hci_req_add(req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp), 3323 &cp); 3324 ret = true; 3325 } 3326 3327 return ret; 3328 } 3329 3330 static int stop_discovery(struct hci_request *req, unsigned long opt) 3331 { 3332 hci_dev_lock(req->hdev); 3333 hci_req_stop_discovery(req); 3334 hci_dev_unlock(req->hdev); 3335 3336 return 0; 3337 } 3338 3339 static void discov_update(struct work_struct *work) 3340 { 3341 struct hci_dev *hdev = container_of(work, struct hci_dev, 3342 discov_update); 3343 u8 status = 0; 3344 3345 switch (hdev->discovery.state) { 3346 case DISCOVERY_STARTING: 3347 start_discovery(hdev, &status); 3348 mgmt_start_discovery_complete(hdev, status); 3349 if (status) 3350 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 3351 else 3352 hci_discovery_set_state(hdev, DISCOVERY_FINDING); 3353 break; 3354 case DISCOVERY_STOPPING: 3355 hci_req_sync(hdev, stop_discovery, 0, HCI_CMD_TIMEOUT, &status); 3356 mgmt_stop_discovery_complete(hdev, status); 3357 if (!status) 3358 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 3359 break; 3360 case DISCOVERY_STOPPED: 3361 default: 3362 return; 3363 } 3364 } 3365 3366 static void discov_off(struct work_struct *work) 3367 { 3368 struct hci_dev *hdev = container_of(work, struct hci_dev, 3369 discov_off.work); 3370 3371 bt_dev_dbg(hdev, ""); 3372 3373 hci_dev_lock(hdev); 3374 3375 /* When discoverable timeout triggers, then just make sure 3376 * the limited discoverable flag is cleared. Even in the case 3377 * of a timeout triggered from general discoverable, it is 3378 * safe to unconditionally clear the flag. 3379 */ 3380 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 3381 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 3382 hdev->discov_timeout = 0; 3383 3384 hci_dev_unlock(hdev); 3385 3386 hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, NULL); 3387 mgmt_new_settings(hdev); 3388 } 3389 3390 static int powered_update_hci(struct hci_request *req, unsigned long opt) 3391 { 3392 struct hci_dev *hdev = req->hdev; 3393 u8 link_sec; 3394 3395 hci_dev_lock(hdev); 3396 3397 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) && 3398 !lmp_host_ssp_capable(hdev)) { 3399 u8 mode = 0x01; 3400 3401 hci_req_add(req, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode); 3402 3403 if (bredr_sc_enabled(hdev) && !lmp_host_sc_capable(hdev)) { 3404 u8 support = 0x01; 3405 3406 hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT, 3407 sizeof(support), &support); 3408 } 3409 } 3410 3411 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED) && 3412 lmp_bredr_capable(hdev)) { 3413 struct hci_cp_write_le_host_supported cp; 3414 3415 cp.le = 0x01; 3416 cp.simul = 0x00; 3417 3418 /* Check first if we already have the right 3419 * host state (host features set) 3420 */ 3421 if (cp.le != lmp_host_le_capable(hdev) || 3422 cp.simul != lmp_host_le_br_capable(hdev)) 3423 hci_req_add(req, HCI_OP_WRITE_LE_HOST_SUPPORTED, 3424 sizeof(cp), &cp); 3425 } 3426 3427 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 3428 /* Make sure the controller has a good default for 3429 * advertising data. This also applies to the case 3430 * where BR/EDR was toggled during the AUTO_OFF phase. 3431 */ 3432 if (hci_dev_test_flag(hdev, HCI_ADVERTISING) || 3433 list_empty(&hdev->adv_instances)) { 3434 int err; 3435 3436 if (ext_adv_capable(hdev)) { 3437 err = __hci_req_setup_ext_adv_instance(req, 3438 0x00); 3439 if (!err) 3440 __hci_req_update_scan_rsp_data(req, 3441 0x00); 3442 } else { 3443 err = 0; 3444 __hci_req_update_adv_data(req, 0x00); 3445 __hci_req_update_scan_rsp_data(req, 0x00); 3446 } 3447 3448 if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) { 3449 if (!ext_adv_capable(hdev)) 3450 __hci_req_enable_advertising(req); 3451 else if (!err) 3452 __hci_req_enable_ext_advertising(req, 3453 0x00); 3454 } 3455 } else if (!list_empty(&hdev->adv_instances)) { 3456 struct adv_info *adv_instance; 3457 3458 adv_instance = list_first_entry(&hdev->adv_instances, 3459 struct adv_info, list); 3460 __hci_req_schedule_adv_instance(req, 3461 adv_instance->instance, 3462 true); 3463 } 3464 } 3465 3466 link_sec = hci_dev_test_flag(hdev, HCI_LINK_SECURITY); 3467 if (link_sec != test_bit(HCI_AUTH, &hdev->flags)) 3468 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, 3469 sizeof(link_sec), &link_sec); 3470 3471 if (lmp_bredr_capable(hdev)) { 3472 if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) 3473 __hci_req_write_fast_connectable(req, true); 3474 else 3475 __hci_req_write_fast_connectable(req, false); 3476 __hci_req_update_scan(req); 3477 __hci_req_update_class(req); 3478 __hci_req_update_name(req); 3479 __hci_req_update_eir(req); 3480 } 3481 3482 hci_dev_unlock(hdev); 3483 return 0; 3484 } 3485 3486 int __hci_req_hci_power_on(struct hci_dev *hdev) 3487 { 3488 /* Register the available SMP channels (BR/EDR and LE) only when 3489 * successfully powering on the controller. This late 3490 * registration is required so that LE SMP can clearly decide if 3491 * the public address or static address is used. 3492 */ 3493 smp_register(hdev); 3494 3495 return __hci_req_sync(hdev, powered_update_hci, 0, HCI_CMD_TIMEOUT, 3496 NULL); 3497 } 3498 3499 void hci_request_setup(struct hci_dev *hdev) 3500 { 3501 INIT_WORK(&hdev->discov_update, discov_update); 3502 INIT_WORK(&hdev->bg_scan_update, bg_scan_update); 3503 INIT_WORK(&hdev->scan_update, scan_update_work); 3504 INIT_WORK(&hdev->connectable_update, connectable_update_work); 3505 INIT_WORK(&hdev->discoverable_update, discoverable_update_work); 3506 INIT_DELAYED_WORK(&hdev->discov_off, discov_off); 3507 INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work); 3508 INIT_DELAYED_WORK(&hdev->le_scan_restart, le_scan_restart_work); 3509 INIT_DELAYED_WORK(&hdev->adv_instance_expire, adv_timeout_expire); 3510 INIT_DELAYED_WORK(&hdev->interleave_scan, interleave_scan_work); 3511 } 3512 3513 void hci_request_cancel_all(struct hci_dev *hdev) 3514 { 3515 hci_req_sync_cancel(hdev, ENODEV); 3516 3517 cancel_work_sync(&hdev->discov_update); 3518 cancel_work_sync(&hdev->bg_scan_update); 3519 cancel_work_sync(&hdev->scan_update); 3520 cancel_work_sync(&hdev->connectable_update); 3521 cancel_work_sync(&hdev->discoverable_update); 3522 cancel_delayed_work_sync(&hdev->discov_off); 3523 cancel_delayed_work_sync(&hdev->le_scan_disable); 3524 cancel_delayed_work_sync(&hdev->le_scan_restart); 3525 3526 if (hdev->adv_instance_timeout) { 3527 cancel_delayed_work_sync(&hdev->adv_instance_expire); 3528 hdev->adv_instance_timeout = 0; 3529 } 3530 3531 cancel_interleave_scan(hdev); 3532 } 3533