Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next

Johan Hedberg says:

====================
Here's another set of Bluetooth & ieee802154 patches intended for 4.1:

- Added support for QCA ROME chipset family in the btusb driver
- at86rf230 driver fixes & cleanups
- ieee802154 cleanups
- Refactoring of Bluetooth mgmt API to allow new users
- New setting for static Bluetooth address exposed to user space
- Refactoring of hci_dev flags to remove limit of 32
- Remove unnecessary fast-connectable setting usage restrictions
- Fix behavior to be consistent when trying to pair already paired device
- Service discovery corner-case fixes

Please let me know if there are any issues pulling. Thanks.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+1893 -1391
+301 -32
drivers/bluetooth/btusb.c
··· 52 52 #define BTUSB_SWAVE 0x1000 53 53 #define BTUSB_INTEL_NEW 0x2000 54 54 #define BTUSB_AMP 0x4000 55 + #define BTUSB_QCA_ROME 0x8000 55 56 56 57 static const struct usb_device_id btusb_table[] = { 57 58 /* Generic Bluetooth USB device */ ··· 214 213 { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 }, 215 214 { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 }, 216 215 216 + /* QCA ROME chipset */ 217 + { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME}, 218 + { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME}, 219 + 217 220 /* Broadcom BCM2035 */ 218 221 { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 }, 219 222 { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU }, ··· 343 338 344 339 int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb); 345 340 int (*recv_bulk)(struct btusb_data *data, void *buffer, int count); 341 + 342 + int (*setup_on_usb)(struct hci_dev *hdev); 346 343 }; 347 344 348 345 static inline void btusb_free_frags(struct btusb_data *data) ··· 886 879 887 880 BT_DBG("%s", hdev->name); 888 881 882 + /* Patching USB firmware files prior to starting any URBs of HCI path 883 + * It is more safe to use USB bulk channel for downloading USB patch 884 + */ 885 + if (data->setup_on_usb) { 886 + err = data->setup_on_usb(hdev); 887 + if (err <0) 888 + return err; 889 + } 890 + 889 891 err = usb_autopm_get_interface(data->intf); 890 892 if (err < 0) 891 893 return err; ··· 1270 1254 usb_autopm_put_interface(data->intf); 1271 1255 } 1272 1256 1257 + static struct sk_buff *btusb_read_local_version(struct hci_dev *hdev) 1258 + { 1259 + struct sk_buff *skb; 1260 + 1261 + skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 1262 + HCI_INIT_TIMEOUT); 1263 + if (IS_ERR(skb)) { 1264 + BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)", 1265 + hdev->name, PTR_ERR(skb)); 1266 + return skb; 1267 + } 1268 + 1269 + if (skb->len != sizeof(struct hci_rp_read_local_version)) { 1270 + BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch", 1271 + hdev->name); 1272 + kfree_skb(skb); 1273 + return ERR_PTR(-EIO); 1274 + } 1275 + 1276 + return skb; 1277 + } 1278 + 1273 1279 static int btusb_setup_bcm92035(struct hci_dev *hdev) 1274 1280 { 1275 1281 struct sk_buff *skb; ··· 1316 1278 1317 1279 BT_DBG("%s", hdev->name); 1318 1280 1319 - skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 1320 - HCI_INIT_TIMEOUT); 1321 - if (IS_ERR(skb)) { 1322 - BT_ERR("Reading local version failed (%ld)", -PTR_ERR(skb)); 1281 + skb = btusb_read_local_version(hdev); 1282 + if (IS_ERR(skb)) 1323 1283 return -PTR_ERR(skb); 1324 - } 1325 1284 1326 1285 rp = (struct hci_rp_read_local_version *)skb->data; 1327 1286 ··· 2449 2414 kfree_skb(skb); 2450 2415 2451 2416 /* Read Local Version Info */ 2452 - skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 2453 - HCI_INIT_TIMEOUT); 2454 - if (IS_ERR(skb)) { 2455 - ret = PTR_ERR(skb); 2456 - BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)", 2457 - hdev->name, ret); 2458 - return ret; 2459 - } 2460 - 2461 - if (skb->len != sizeof(*ver)) { 2462 - BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch", 2463 - hdev->name); 2464 - kfree_skb(skb); 2465 - return -EIO; 2466 - } 2417 + skb = btusb_read_local_version(hdev); 2418 + if (IS_ERR(skb)) 2419 + return PTR_ERR(skb); 2467 2420 2468 2421 ver = (struct hci_rp_read_local_version *)skb->data; 2469 2422 rev = le16_to_cpu(ver->hci_rev); ··· 2539 2516 kfree_skb(skb); 2540 2517 2541 2518 /* Read Local Version Info */ 2542 - skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, 2543 - HCI_INIT_TIMEOUT); 2519 + skb = btusb_read_local_version(hdev); 2544 2520 if (IS_ERR(skb)) { 2545 2521 ret = PTR_ERR(skb); 2546 - BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION failed (%ld)", 2547 - hdev->name, ret); 2548 - goto done; 2549 - } 2550 - 2551 - if (skb->len != sizeof(*ver)) { 2552 - BT_ERR("%s: HCI_OP_READ_LOCAL_VERSION event length mismatch", 2553 - hdev->name); 2554 - kfree_skb(skb); 2555 - ret = -EIO; 2556 2522 goto done; 2557 2523 } 2558 2524 ··· 2636 2624 return ret; 2637 2625 } 2638 2626 kfree_skb(skb); 2627 + 2628 + return 0; 2629 + } 2630 + 2631 + #define QCA_DFU_PACKET_LEN 4096 2632 + 2633 + #define QCA_GET_TARGET_VERSION 0x09 2634 + #define QCA_CHECK_STATUS 0x05 2635 + #define QCA_DFU_DOWNLOAD 0x01 2636 + 2637 + #define QCA_SYSCFG_UPDATED 0x40 2638 + #define QCA_PATCH_UPDATED 0x80 2639 + #define QCA_DFU_TIMEOUT 3000 2640 + 2641 + struct qca_version { 2642 + __le32 rom_version; 2643 + __le32 patch_version; 2644 + __le32 ram_version; 2645 + __le32 ref_clock; 2646 + __u8 reserved[4]; 2647 + } __packed; 2648 + 2649 + struct qca_rampatch_version { 2650 + __le16 rom_version; 2651 + __le16 patch_version; 2652 + } __packed; 2653 + 2654 + struct qca_device_info { 2655 + u32 rom_version; 2656 + u8 rampatch_hdr; /* length of header in rampatch */ 2657 + u8 nvm_hdr; /* length of header in NVM */ 2658 + u8 ver_offset; /* offset of version structure in rampatch */ 2659 + }; 2660 + 2661 + static const struct qca_device_info qca_devices_table[] = { 2662 + { 0x00000100, 20, 4, 10 }, /* Rome 1.0 */ 2663 + { 0x00000101, 20, 4, 10 }, /* Rome 1.1 */ 2664 + { 0x00000201, 28, 4, 18 }, /* Rome 2.1 */ 2665 + { 0x00000300, 28, 4, 18 }, /* Rome 3.0 */ 2666 + { 0x00000302, 28, 4, 18 }, /* Rome 3.2 */ 2667 + }; 2668 + 2669 + static int btusb_qca_send_vendor_req(struct hci_dev *hdev, u8 request, 2670 + void *data, u16 size) 2671 + { 2672 + struct btusb_data *btdata = hci_get_drvdata(hdev); 2673 + struct usb_device *udev = btdata->udev; 2674 + int pipe, err; 2675 + u8 *buf; 2676 + 2677 + buf = kmalloc(size, GFP_KERNEL); 2678 + if (!buf) 2679 + return -ENOMEM; 2680 + 2681 + /* Found some of USB hosts have IOT issues with ours so that we should 2682 + * not wait until HCI layer is ready. 2683 + */ 2684 + pipe = usb_rcvctrlpipe(udev, 0); 2685 + err = usb_control_msg(udev, pipe, request, USB_TYPE_VENDOR | USB_DIR_IN, 2686 + 0, 0, buf, size, USB_CTRL_SET_TIMEOUT); 2687 + if (err < 0) { 2688 + BT_ERR("%s: Failed to access otp area (%d)", hdev->name, err); 2689 + goto done; 2690 + } 2691 + 2692 + memcpy(data, buf, size); 2693 + 2694 + done: 2695 + kfree(buf); 2696 + 2697 + return err; 2698 + } 2699 + 2700 + static int btusb_setup_qca_download_fw(struct hci_dev *hdev, 2701 + const struct firmware *firmware, 2702 + size_t hdr_size) 2703 + { 2704 + struct btusb_data *btdata = hci_get_drvdata(hdev); 2705 + struct usb_device *udev = btdata->udev; 2706 + size_t count, size, sent = 0; 2707 + int pipe, len, err; 2708 + u8 *buf; 2709 + 2710 + buf = kmalloc(QCA_DFU_PACKET_LEN, GFP_KERNEL); 2711 + if (!buf) 2712 + return -ENOMEM; 2713 + 2714 + count = firmware->size; 2715 + 2716 + size = min_t(size_t, count, hdr_size); 2717 + memcpy(buf, firmware->data, size); 2718 + 2719 + /* USB patches should go down to controller through USB path 2720 + * because binary format fits to go down through USB channel. 2721 + * USB control path is for patching headers and USB bulk is for 2722 + * patch body. 2723 + */ 2724 + pipe = usb_sndctrlpipe(udev, 0); 2725 + err = usb_control_msg(udev, pipe, QCA_DFU_DOWNLOAD, USB_TYPE_VENDOR, 2726 + 0, 0, buf, size, USB_CTRL_SET_TIMEOUT); 2727 + if (err < 0) { 2728 + BT_ERR("%s: Failed to send headers (%d)", hdev->name, err); 2729 + goto done; 2730 + } 2731 + 2732 + sent += size; 2733 + count -= size; 2734 + 2735 + while (count) { 2736 + size = min_t(size_t, count, QCA_DFU_PACKET_LEN); 2737 + 2738 + memcpy(buf, firmware->data + sent, size); 2739 + 2740 + pipe = usb_sndbulkpipe(udev, 0x02); 2741 + err = usb_bulk_msg(udev, pipe, buf, size, &len, 2742 + QCA_DFU_TIMEOUT); 2743 + if (err < 0) { 2744 + BT_ERR("%s: Failed to send body at %zd of %zd (%d)", 2745 + hdev->name, sent, firmware->size, err); 2746 + break; 2747 + } 2748 + 2749 + if (size != len) { 2750 + BT_ERR("%s: Failed to get bulk buffer", hdev->name); 2751 + err = -EILSEQ; 2752 + break; 2753 + } 2754 + 2755 + sent += size; 2756 + count -= size; 2757 + } 2758 + 2759 + done: 2760 + kfree(buf); 2761 + return err; 2762 + } 2763 + 2764 + static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev, 2765 + struct qca_version *ver, 2766 + const struct qca_device_info *info) 2767 + { 2768 + struct qca_rampatch_version *rver; 2769 + const struct firmware *fw; 2770 + u32 ver_rom, ver_patch; 2771 + u16 rver_rom, rver_patch; 2772 + char fwname[64]; 2773 + int err; 2774 + 2775 + ver_rom = le32_to_cpu(ver->rom_version); 2776 + ver_patch = le32_to_cpu(ver->patch_version); 2777 + 2778 + snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", ver_rom); 2779 + 2780 + err = request_firmware(&fw, fwname, &hdev->dev); 2781 + if (err) { 2782 + BT_ERR("%s: failed to request rampatch file: %s (%d)", 2783 + hdev->name, fwname, err); 2784 + return err; 2785 + } 2786 + 2787 + BT_INFO("%s: using rampatch file: %s", hdev->name, fwname); 2788 + 2789 + rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset); 2790 + rver_rom = le16_to_cpu(rver->rom_version); 2791 + rver_patch = le16_to_cpu(rver->patch_version); 2792 + 2793 + BT_INFO("%s: QCA: patch rome 0x%x build 0x%x, firmware rome 0x%x " 2794 + "build 0x%x", hdev->name, rver_rom, rver_patch, ver_rom, 2795 + ver_patch); 2796 + 2797 + if (rver_rom != ver_rom || rver_patch <= ver_patch) { 2798 + BT_ERR("%s: rampatch file version did not match with firmware", 2799 + hdev->name); 2800 + err = -EINVAL; 2801 + goto done; 2802 + } 2803 + 2804 + err = btusb_setup_qca_download_fw(hdev, fw, info->rampatch_hdr); 2805 + 2806 + done: 2807 + release_firmware(fw); 2808 + 2809 + return err; 2810 + } 2811 + 2812 + static int btusb_setup_qca_load_nvm(struct hci_dev *hdev, 2813 + struct qca_version *ver, 2814 + const struct qca_device_info *info) 2815 + { 2816 + const struct firmware *fw; 2817 + char fwname[64]; 2818 + int err; 2819 + 2820 + snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin", 2821 + le32_to_cpu(ver->rom_version)); 2822 + 2823 + err = request_firmware(&fw, fwname, &hdev->dev); 2824 + if (err) { 2825 + BT_ERR("%s: failed to request NVM file: %s (%d)", 2826 + hdev->name, fwname, err); 2827 + return err; 2828 + } 2829 + 2830 + BT_INFO("%s: using NVM file: %s", hdev->name, fwname); 2831 + 2832 + err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr); 2833 + 2834 + release_firmware(fw); 2835 + 2836 + return err; 2837 + } 2838 + 2839 + static int btusb_setup_qca(struct hci_dev *hdev) 2840 + { 2841 + const struct qca_device_info *info = NULL; 2842 + struct qca_version ver; 2843 + u32 ver_rom; 2844 + u8 status; 2845 + int i, err; 2846 + 2847 + err = btusb_qca_send_vendor_req(hdev, QCA_GET_TARGET_VERSION, &ver, 2848 + sizeof(ver)); 2849 + if (err < 0) 2850 + return err; 2851 + 2852 + ver_rom = le32_to_cpu(ver.rom_version); 2853 + for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) { 2854 + if (ver_rom == qca_devices_table[i].rom_version) 2855 + info = &qca_devices_table[i]; 2856 + } 2857 + if (!info) { 2858 + BT_ERR("%s: don't support firmware rome 0x%x", hdev->name, 2859 + ver_rom); 2860 + return -ENODEV; 2861 + } 2862 + 2863 + err = btusb_qca_send_vendor_req(hdev, QCA_CHECK_STATUS, &status, 2864 + sizeof(status)); 2865 + if (err < 0) 2866 + return err; 2867 + 2868 + if (!(status & QCA_PATCH_UPDATED)) { 2869 + err = btusb_setup_qca_load_rampatch(hdev, &ver, info); 2870 + if (err < 0) 2871 + return err; 2872 + } 2873 + 2874 + if (!(status & QCA_SYSCFG_UPDATED)) { 2875 + err = btusb_setup_qca_load_nvm(hdev, &ver, info); 2876 + if (err < 0) 2877 + return err; 2878 + } 2639 2879 2640 2880 return 0; 2641 2881 } ··· 3043 2779 if (id->driver_info & BTUSB_ATH3012) { 3044 2780 hdev->set_bdaddr = btusb_set_bdaddr_ath3012; 3045 2781 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); 2782 + } 2783 + 2784 + if (id->driver_info & BTUSB_QCA_ROME) { 2785 + data->setup_on_usb = btusb_setup_qca; 2786 + hdev->set_bdaddr = btusb_set_bdaddr_ath3012; 3046 2787 } 3047 2788 3048 2789 if (id->driver_info & BTUSB_AMP) {
+155 -73
drivers/net/ieee802154/at86rf230.c
··· 19 19 */ 20 20 #include <linux/kernel.h> 21 21 #include <linux/module.h> 22 + #include <linux/hrtimer.h> 23 + #include <linux/jiffies.h> 22 24 #include <linux/interrupt.h> 23 25 #include <linux/irq.h> 24 26 #include <linux/gpio.h> ··· 54 52 int (*get_desense_steps)(struct at86rf230_local *, s32); 55 53 }; 56 54 57 - #define AT86RF2XX_MAX_BUF (127 + 3) 55 + #define AT86RF2XX_MAX_BUF (127 + 3) 56 + /* tx retries to access the TX_ON state 57 + * if it's above then force change will be started. 58 + * 59 + * We assume the max_frame_retries (7) value of 802.15.4 here. 60 + */ 61 + #define AT86RF2XX_MAX_TX_RETRIES 7 62 + /* We use the recommended 5 minutes timeout to recalibrate */ 63 + #define AT86RF2XX_CAL_LOOP_TIMEOUT (5 * 60 * HZ) 58 64 59 65 struct at86rf230_state_change { 60 66 struct at86rf230_local *lp; 67 + int irq; 61 68 69 + struct hrtimer timer; 62 70 struct spi_message msg; 63 71 struct spi_transfer trx; 64 72 u8 buf[AT86RF2XX_MAX_BUF]; ··· 93 81 struct at86rf230_state_change irq; 94 82 95 83 bool tx_aret; 84 + unsigned long cal_timeout; 96 85 s8 max_frame_retries; 97 86 bool is_tx; 98 87 /* spinlock for is_tx protection */ 99 88 spinlock_t lock; 89 + u8 tx_retry; 100 90 struct sk_buff *tx_skb; 101 91 struct at86rf230_state_change tx; 102 92 }; ··· 421 407 case RG_PHY_ED_LEVEL: 422 408 case RG_IRQ_STATUS: 423 409 case RG_VREG_CTRL: 410 + case RG_PLL_CF: 411 + case RG_PLL_DCU: 424 412 return true; 425 413 default: 426 414 return false; ··· 486 470 u8 *tx_buf = ctx->buf; 487 471 488 472 tx_buf[0] = (reg & CMD_REG_MASK) | CMD_REG; 489 - ctx->trx.len = 2; 490 473 ctx->msg.complete = complete; 491 474 ctx->irq_enable = irq_enable; 492 475 rc = spi_async(lp->spi, &ctx->msg); 493 476 if (rc) { 494 477 if (irq_enable) 495 - enable_irq(lp->spi->irq); 478 + enable_irq(ctx->irq); 496 479 497 480 at86rf230_async_error(lp, ctx, rc); 498 481 } 482 + } 483 + 484 + static inline u8 at86rf230_state_to_force(u8 state) 485 + { 486 + if (state == STATE_TX_ON) 487 + return STATE_FORCE_TX_ON; 488 + else 489 + return STATE_FORCE_TRX_OFF; 499 490 } 500 491 501 492 static void ··· 535 512 * in STATE_BUSY_RX_AACK, we run a force state change 536 513 * to STATE_TX_ON. This is a timeout handling, if the 537 514 * transceiver stucks in STATE_BUSY_RX_AACK. 515 + * 516 + * Additional we do several retries to try to get into 517 + * TX_ON state without forcing. If the retries are 518 + * higher or equal than AT86RF2XX_MAX_TX_RETRIES we 519 + * will do a force change. 538 520 */ 539 - if (ctx->to_state == STATE_TX_ON) { 540 - at86rf230_async_state_change(lp, ctx, 541 - STATE_FORCE_TX_ON, 521 + if (ctx->to_state == STATE_TX_ON || 522 + ctx->to_state == STATE_TRX_OFF) { 523 + u8 state = ctx->to_state; 524 + 525 + if (lp->tx_retry >= AT86RF2XX_MAX_TX_RETRIES) 526 + state = at86rf230_state_to_force(state); 527 + lp->tx_retry++; 528 + 529 + at86rf230_async_state_change(lp, ctx, state, 542 530 ctx->complete, 543 531 ctx->irq_enable); 544 532 return; ··· 565 531 ctx->complete(context); 566 532 } 567 533 534 + static enum hrtimer_restart at86rf230_async_state_timer(struct hrtimer *timer) 535 + { 536 + struct at86rf230_state_change *ctx = 537 + container_of(timer, struct at86rf230_state_change, timer); 538 + struct at86rf230_local *lp = ctx->lp; 539 + 540 + at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx, 541 + at86rf230_async_state_assert, 542 + ctx->irq_enable); 543 + 544 + return HRTIMER_NORESTART; 545 + } 546 + 568 547 /* Do state change timing delay. */ 569 548 static void 570 549 at86rf230_async_state_delay(void *context) ··· 586 539 struct at86rf230_local *lp = ctx->lp; 587 540 struct at86rf2xx_chip_data *c = lp->data; 588 541 bool force = false; 542 + ktime_t tim; 589 543 590 544 /* The force state changes are will show as normal states in the 591 545 * state status subregister. We change the to_state to the ··· 610 562 case STATE_TRX_OFF: 611 563 switch (ctx->to_state) { 612 564 case STATE_RX_AACK_ON: 613 - usleep_range(c->t_off_to_aack, c->t_off_to_aack + 10); 565 + tim = ktime_set(0, c->t_off_to_aack * NSEC_PER_USEC); 614 566 goto change; 615 567 case STATE_TX_ON: 616 - usleep_range(c->t_off_to_tx_on, 617 - c->t_off_to_tx_on + 10); 568 + tim = ktime_set(0, c->t_off_to_tx_on * NSEC_PER_USEC); 569 + /* state change from TRX_OFF to TX_ON to do a 570 + * calibration, we need to reset the timeout for the 571 + * next one. 572 + */ 573 + lp->cal_timeout = jiffies + AT86RF2XX_CAL_LOOP_TIMEOUT; 618 574 goto change; 619 575 default: 620 576 break; ··· 626 574 break; 627 575 case STATE_BUSY_RX_AACK: 628 576 switch (ctx->to_state) { 577 + case STATE_TRX_OFF: 629 578 case STATE_TX_ON: 630 579 /* Wait for worst case receiving time if we 631 580 * didn't make a force change from BUSY_RX_AACK 632 - * to TX_ON. 581 + * to TX_ON or TRX_OFF. 633 582 */ 634 583 if (!force) { 635 - usleep_range(c->t_frame + c->t_p_ack, 636 - c->t_frame + c->t_p_ack + 1000); 584 + tim = ktime_set(0, (c->t_frame + c->t_p_ack) * 585 + NSEC_PER_USEC); 637 586 goto change; 638 587 } 639 588 break; ··· 646 593 case STATE_P_ON: 647 594 switch (ctx->to_state) { 648 595 case STATE_TRX_OFF: 649 - usleep_range(c->t_reset_to_off, c->t_reset_to_off + 10); 596 + tim = ktime_set(0, c->t_reset_to_off * NSEC_PER_USEC); 650 597 goto change; 651 598 default: 652 599 break; ··· 657 604 } 658 605 659 606 /* Default delay is 1us in the most cases */ 660 - udelay(1); 607 + tim = ktime_set(0, NSEC_PER_USEC); 661 608 662 609 change: 663 - at86rf230_async_read_reg(lp, RG_TRX_STATUS, ctx, 664 - at86rf230_async_state_assert, 665 - ctx->irq_enable); 610 + hrtimer_start(&ctx->timer, tim, HRTIMER_MODE_REL); 666 611 } 667 612 668 613 static void ··· 696 645 */ 697 646 buf[0] = (RG_TRX_STATE & CMD_REG_MASK) | CMD_REG | CMD_WRITE; 698 647 buf[1] = ctx->to_state; 699 - ctx->trx.len = 2; 700 648 ctx->msg.complete = at86rf230_async_state_delay; 701 649 rc = spi_async(lp->spi, &ctx->msg); 702 650 if (rc) { 703 651 if (ctx->irq_enable) 704 - enable_irq(lp->spi->irq); 652 + enable_irq(ctx->irq); 705 653 706 654 at86rf230_async_error(lp, ctx, rc); 707 655 } ··· 758 708 { 759 709 struct at86rf230_state_change *ctx = context; 760 710 struct at86rf230_local *lp = ctx->lp; 761 - struct sk_buff *skb = lp->tx_skb; 762 711 763 - enable_irq(lp->spi->irq); 712 + enable_irq(ctx->irq); 764 713 765 - ieee802154_xmit_complete(lp->hw, skb, !lp->tx_aret); 714 + ieee802154_xmit_complete(lp->hw, lp->tx_skb, !lp->tx_aret); 766 715 } 767 716 768 717 static void ··· 770 721 struct at86rf230_state_change *ctx = context; 771 722 struct at86rf230_local *lp = ctx->lp; 772 723 773 - at86rf230_async_state_change(lp, &lp->irq, STATE_RX_AACK_ON, 724 + at86rf230_async_state_change(lp, ctx, STATE_RX_AACK_ON, 774 725 at86rf230_tx_complete, true); 775 726 } 776 727 ··· 814 765 } 815 766 816 767 static void 817 - at86rf230_rx(struct at86rf230_local *lp, 818 - const u8 *data, const u8 len, const u8 lqi) 768 + at86rf230_rx_read_frame_complete(void *context) 819 769 { 820 - struct sk_buff *skb; 770 + struct at86rf230_state_change *ctx = context; 771 + struct at86rf230_local *lp = ctx->lp; 821 772 u8 rx_local_buf[AT86RF2XX_MAX_BUF]; 773 + const u8 *buf = ctx->buf; 774 + struct sk_buff *skb; 775 + u8 len, lqi; 822 776 823 - memcpy(rx_local_buf, data, len); 824 - enable_irq(lp->spi->irq); 777 + len = buf[1]; 778 + if (!ieee802154_is_valid_psdu_len(len)) { 779 + dev_vdbg(&lp->spi->dev, "corrupted frame received\n"); 780 + len = IEEE802154_MTU; 781 + } 782 + lqi = buf[2 + len]; 783 + 784 + memcpy(rx_local_buf, buf + 2, len); 785 + ctx->trx.len = 2; 786 + enable_irq(ctx->irq); 825 787 826 788 skb = dev_alloc_skb(IEEE802154_MTU); 827 789 if (!skb) { ··· 845 785 } 846 786 847 787 static void 848 - at86rf230_rx_read_frame_complete(void *context) 788 + at86rf230_rx_read_frame(void *context) 849 789 { 850 790 struct at86rf230_state_change *ctx = context; 851 791 struct at86rf230_local *lp = ctx->lp; 852 - const u8 *buf = lp->irq.buf; 853 - u8 len = buf[1]; 854 - 855 - if (!ieee802154_is_valid_psdu_len(len)) { 856 - dev_vdbg(&lp->spi->dev, "corrupted frame received\n"); 857 - len = IEEE802154_MTU; 858 - } 859 - 860 - at86rf230_rx(lp, buf + 2, len, buf[2 + len]); 861 - } 862 - 863 - static void 864 - at86rf230_rx_read_frame(struct at86rf230_local *lp) 865 - { 792 + u8 *buf = ctx->buf; 866 793 int rc; 867 794 868 - u8 *buf = lp->irq.buf; 869 - 870 795 buf[0] = CMD_FB; 871 - lp->irq.trx.len = AT86RF2XX_MAX_BUF; 872 - lp->irq.msg.complete = at86rf230_rx_read_frame_complete; 873 - rc = spi_async(lp->spi, &lp->irq.msg); 796 + ctx->trx.len = AT86RF2XX_MAX_BUF; 797 + ctx->msg.complete = at86rf230_rx_read_frame_complete; 798 + rc = spi_async(lp->spi, &ctx->msg); 874 799 if (rc) { 875 - enable_irq(lp->spi->irq); 876 - at86rf230_async_error(lp, &lp->irq, rc); 800 + ctx->trx.len = 2; 801 + enable_irq(ctx->irq); 802 + at86rf230_async_error(lp, ctx, rc); 877 803 } 878 804 } 879 805 880 806 static void 881 807 at86rf230_rx_trac_check(void *context) 882 808 { 883 - struct at86rf230_state_change *ctx = context; 884 - struct at86rf230_local *lp = ctx->lp; 885 - 886 809 /* Possible check on trac status here. This could be useful to make 887 810 * some stats why receive is failed. Not used at the moment, but it's 888 811 * maybe timing relevant. Datasheet doesn't say anything about this. 889 812 * The programming guide say do it so. 890 813 */ 891 814 892 - at86rf230_rx_read_frame(lp); 815 + at86rf230_rx_read_frame(context); 893 816 } 894 817 895 818 static void ··· 905 862 { 906 863 struct at86rf230_state_change *ctx = context; 907 864 struct at86rf230_local *lp = ctx->lp; 908 - const u8 *buf = lp->irq.buf; 865 + const u8 *buf = ctx->buf; 909 866 const u8 irq = buf[1]; 910 867 911 868 if (irq & IRQ_TRX_END) { 912 869 at86rf230_irq_trx_end(lp); 913 870 } else { 914 - enable_irq(lp->spi->irq); 871 + enable_irq(ctx->irq); 915 872 dev_err(&lp->spi->dev, "not supported irq %02x received\n", 916 873 irq); 917 874 } ··· 927 884 disable_irq_nosync(irq); 928 885 929 886 buf[0] = (RG_IRQ_STATUS & CMD_REG_MASK) | CMD_REG; 930 - ctx->trx.len = 2; 931 887 ctx->msg.complete = at86rf230_irq_status; 932 888 rc = spi_async(lp->spi, &ctx->msg); 933 889 if (rc) { ··· 961 919 struct at86rf230_state_change *ctx = context; 962 920 struct at86rf230_local *lp = ctx->lp; 963 921 struct sk_buff *skb = lp->tx_skb; 964 - u8 *buf = lp->tx.buf; 922 + u8 *buf = ctx->buf; 965 923 int rc; 966 924 967 925 spin_lock(&lp->lock); ··· 971 929 buf[0] = CMD_FB | CMD_WRITE; 972 930 buf[1] = skb->len + 2; 973 931 memcpy(buf + 2, skb->data, skb->len); 974 - lp->tx.trx.len = skb->len + 2; 975 - lp->tx.msg.complete = at86rf230_write_frame_complete; 976 - rc = spi_async(lp->spi, &lp->tx.msg); 977 - if (rc) 932 + ctx->trx.len = skb->len + 2; 933 + ctx->msg.complete = at86rf230_write_frame_complete; 934 + rc = spi_async(lp->spi, &ctx->msg); 935 + if (rc) { 936 + ctx->trx.len = 2; 978 937 at86rf230_async_error(lp, ctx, rc); 938 + } 979 939 } 980 940 981 941 static void ··· 990 946 at86rf230_write_frame, false); 991 947 } 992 948 993 - static int 994 - at86rf230_xmit(struct ieee802154_hw *hw, struct sk_buff *skb) 949 + static void 950 + at86rf230_xmit_start(void *context) 995 951 { 996 - struct at86rf230_local *lp = hw->priv; 997 - struct at86rf230_state_change *ctx = &lp->tx; 998 - 999 - void (*tx_complete)(void *context) = at86rf230_write_frame; 1000 - 1001 - lp->tx_skb = skb; 952 + struct at86rf230_state_change *ctx = context; 953 + struct at86rf230_local *lp = ctx->lp; 1002 954 1003 955 /* In ARET mode we need to go into STATE_TX_ARET_ON after we 1004 956 * are in STATE_TX_ON. The pfad differs here, so we change 1005 957 * the complete handler. 1006 958 */ 1007 959 if (lp->tx_aret) 1008 - tx_complete = at86rf230_xmit_tx_on; 960 + at86rf230_async_state_change(lp, ctx, STATE_TX_ON, 961 + at86rf230_xmit_tx_on, false); 962 + else 963 + at86rf230_async_state_change(lp, ctx, STATE_TX_ON, 964 + at86rf230_write_frame, false); 965 + } 1009 966 1010 - at86rf230_async_state_change(lp, ctx, STATE_TX_ON, tx_complete, false); 967 + static int 968 + at86rf230_xmit(struct ieee802154_hw *hw, struct sk_buff *skb) 969 + { 970 + struct at86rf230_local *lp = hw->priv; 971 + struct at86rf230_state_change *ctx = &lp->tx; 972 + 973 + lp->tx_skb = skb; 974 + lp->tx_retry = 0; 975 + 976 + /* After 5 minutes in PLL and the same frequency we run again the 977 + * calibration loops which is recommended by at86rf2xx datasheets. 978 + * 979 + * The calibration is initiate by a state change from TRX_OFF 980 + * to TX_ON, the lp->cal_timeout should be reinit by state_delay 981 + * function then to start in the next 5 minutes. 982 + */ 983 + if (time_is_before_jiffies(lp->cal_timeout)) 984 + at86rf230_async_state_change(lp, ctx, STATE_TRX_OFF, 985 + at86rf230_xmit_start, false); 986 + else 987 + at86rf230_xmit_start(ctx); 1011 988 1012 989 return 0; 1013 990 } ··· 1044 979 static int 1045 980 at86rf230_start(struct ieee802154_hw *hw) 1046 981 { 982 + struct at86rf230_local *lp = hw->priv; 983 + 984 + lp->cal_timeout = jiffies + AT86RF2XX_CAL_LOOP_TIMEOUT; 1047 985 return at86rf230_sync_state_change(hw->priv, STATE_RX_AACK_ON); 1048 986 } 1049 987 ··· 1127 1059 /* Wait for PLL */ 1128 1060 usleep_range(lp->data->t_channel_switch, 1129 1061 lp->data->t_channel_switch + 10); 1062 + 1063 + lp->cal_timeout = jiffies + AT86RF2XX_CAL_LOOP_TIMEOUT; 1130 1064 return rc; 1131 1065 } 1132 1066 ··· 1598 1528 at86rf230_setup_spi_messages(struct at86rf230_local *lp) 1599 1529 { 1600 1530 lp->state.lp = lp; 1531 + lp->state.irq = lp->spi->irq; 1601 1532 spi_message_init(&lp->state.msg); 1602 1533 lp->state.msg.context = &lp->state; 1534 + lp->state.trx.len = 2; 1603 1535 lp->state.trx.tx_buf = lp->state.buf; 1604 1536 lp->state.trx.rx_buf = lp->state.buf; 1605 1537 spi_message_add_tail(&lp->state.trx, &lp->state.msg); 1538 + hrtimer_init(&lp->state.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 1539 + lp->state.timer.function = at86rf230_async_state_timer; 1606 1540 1607 1541 lp->irq.lp = lp; 1542 + lp->irq.irq = lp->spi->irq; 1608 1543 spi_message_init(&lp->irq.msg); 1609 1544 lp->irq.msg.context = &lp->irq; 1545 + lp->irq.trx.len = 2; 1610 1546 lp->irq.trx.tx_buf = lp->irq.buf; 1611 1547 lp->irq.trx.rx_buf = lp->irq.buf; 1612 1548 spi_message_add_tail(&lp->irq.trx, &lp->irq.msg); 1549 + hrtimer_init(&lp->irq.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 1550 + lp->irq.timer.function = at86rf230_async_state_timer; 1613 1551 1614 1552 lp->tx.lp = lp; 1553 + lp->tx.irq = lp->spi->irq; 1615 1554 spi_message_init(&lp->tx.msg); 1616 1555 lp->tx.msg.context = &lp->tx; 1556 + lp->tx.trx.len = 2; 1617 1557 lp->tx.trx.tx_buf = lp->tx.buf; 1618 1558 lp->tx.trx.rx_buf = lp->tx.buf; 1619 1559 spi_message_add_tail(&lp->tx.trx, &lp->tx.msg); 1560 + hrtimer_init(&lp->tx.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 1561 + lp->tx.timer.function = at86rf230_async_state_timer; 1620 1562 } 1621 1563 1622 1564 static int at86rf230_probe(struct spi_device *spi) ··· 1637 1555 struct at86rf230_local *lp; 1638 1556 unsigned int status; 1639 1557 int rc, irq_type, rstn, slp_tr; 1640 - u8 xtal_trim; 1558 + u8 xtal_trim = 0; 1641 1559 1642 1560 if (!spi->irq) { 1643 1561 dev_err(&spi->dev, "no IRQ specified\n");
+2
include/linux/ieee802154.h
··· 30 30 #define IEEE802154_MTU 127 31 31 #define IEEE802154_ACK_PSDU_LEN 5 32 32 #define IEEE802154_MIN_PSDU_LEN 9 33 + #define IEEE802154_FCS_LEN 2 33 34 34 35 #define IEEE802154_PAN_ID_BROADCAST 0xffff 35 36 #define IEEE802154_ADDR_SHORT_BROADCAST 0xffff ··· 40 39 41 40 #define IEEE802154_LIFS_PERIOD 40 42 41 #define IEEE802154_SIFS_PERIOD 12 42 + #define IEEE802154_MAX_SIFS_FRAME_SIZE 18 43 43 44 44 #define IEEE802154_MAX_CHANNEL 26 45 45 #define IEEE802154_MAX_PAGE 31
+3
include/net/bluetooth/bluetooth.h
··· 354 354 int sco_init(void); 355 355 void sco_exit(void); 356 356 357 + int mgmt_init(void); 358 + void mgmt_exit(void); 359 + 357 360 void bt_sock_reclassify_lock(struct sock *sk, int proto); 358 361 359 362 #endif /* __BLUETOOTH_H */
+7 -15
include/net/bluetooth/hci.h
··· 179 179 HCI_RESET, 180 180 }; 181 181 182 - /* BR/EDR and/or LE controller flags: the flags defined here should represent 183 - * states configured via debugfs for debugging and testing purposes only. 184 - */ 185 - enum { 186 - HCI_DUT_MODE, 187 - HCI_FORCE_BREDR_SMP, 188 - HCI_FORCE_STATIC_ADDR, 189 - }; 190 - 191 182 /* 192 183 * BR/EDR and/or LE controller flags: the flags defined here should represent 193 184 * states from the controller. ··· 208 217 HCI_HS_ENABLED, 209 218 HCI_LE_ENABLED, 210 219 HCI_ADVERTISING, 220 + HCI_ADVERTISING_CONNECTABLE, 211 221 HCI_CONNECTABLE, 212 222 HCI_DISCOVERABLE, 213 223 HCI_LIMITED_DISCOVERABLE, ··· 217 225 HCI_FAST_CONNECTABLE, 218 226 HCI_BREDR_ENABLED, 219 227 HCI_LE_SCAN_INTERRUPTED, 220 - }; 221 228 222 - /* A mask for the flags that are supposed to remain when a reset happens 223 - * or the HCI device is closed. 224 - */ 225 - #define HCI_PERSISTENT_MASK (BIT(HCI_LE_SCAN) | BIT(HCI_PERIODIC_INQ) | \ 226 - BIT(HCI_FAST_CONNECTABLE) | BIT(HCI_LE_ADV)) 229 + HCI_DUT_MODE, 230 + HCI_FORCE_BREDR_SMP, 231 + HCI_FORCE_STATIC_ADDR, 232 + 233 + __HCI_NUM_FLAGS, 234 + }; 227 235 228 236 /* HCI timeouts */ 229 237 #define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
+50 -9
include/net/bluetooth/hci_core.h
··· 76 76 u8 last_adv_data[HCI_MAX_AD_LENGTH]; 77 77 u8 last_adv_data_len; 78 78 bool report_invalid_rssi; 79 + bool result_filtering; 79 80 s8 rssi; 80 81 u16 uuid_count; 81 82 u8 (*uuids)[16]; ··· 353 352 354 353 struct rfkill *rfkill; 355 354 356 - unsigned long dbg_flags; 357 - unsigned long dev_flags; 355 + DECLARE_BITMAP(dev_flags, __HCI_NUM_FLAGS); 358 356 359 357 struct delayed_work le_scan_disable; 360 358 struct delayed_work le_scan_restart; ··· 501 501 extern rwlock_t hci_dev_list_lock; 502 502 extern struct mutex hci_cb_list_lock; 503 503 504 + #define hci_dev_set_flag(hdev, nr) set_bit((nr), (hdev)->dev_flags) 505 + #define hci_dev_clear_flag(hdev, nr) clear_bit((nr), (hdev)->dev_flags) 506 + #define hci_dev_change_flag(hdev, nr) change_bit((nr), (hdev)->dev_flags) 507 + #define hci_dev_test_flag(hdev, nr) test_bit((nr), (hdev)->dev_flags) 508 + #define hci_dev_test_and_set_flag(hdev, nr) test_and_set_bit((nr), (hdev)->dev_flags) 509 + #define hci_dev_test_and_clear_flag(hdev, nr) test_and_clear_bit((nr), (hdev)->dev_flags) 510 + #define hci_dev_test_and_change_flag(hdev, nr) test_and_change_bit((nr), (hdev)->dev_flags) 511 + 512 + #define hci_dev_clear_volatile_flags(hdev) \ 513 + do { \ 514 + hci_dev_clear_flag(hdev, HCI_LE_SCAN); \ 515 + hci_dev_clear_flag(hdev, HCI_LE_ADV); \ 516 + hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ); \ 517 + } while (0) 518 + 504 519 /* ----- HCI interface to upper protocols ----- */ 505 520 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr); 506 521 int l2cap_disconn_ind(struct hci_conn *hcon); ··· 540 525 541 526 static inline void hci_discovery_filter_clear(struct hci_dev *hdev) 542 527 { 528 + hdev->discovery.result_filtering = false; 543 529 hdev->discovery.report_invalid_rssi = true; 544 530 hdev->discovery.rssi = HCI_RSSI_INVALID; 545 531 hdev->discovery.uuid_count = 0; ··· 612 596 static inline bool hci_conn_ssp_enabled(struct hci_conn *conn) 613 597 { 614 598 struct hci_dev *hdev = conn->hdev; 615 - return test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && 599 + return hci_dev_test_flag(hdev, HCI_SSP_ENABLED) && 616 600 test_bit(HCI_CONN_SSP_ENABLED, &conn->flags); 617 601 } 618 602 619 603 static inline bool hci_conn_sc_enabled(struct hci_conn *conn) 620 604 { 621 605 struct hci_dev *hdev = conn->hdev; 622 - return test_bit(HCI_SC_ENABLED, &hdev->dev_flags) && 606 + return hci_dev_test_flag(hdev, HCI_SC_ENABLED) && 623 607 test_bit(HCI_CONN_SC_ENABLED, &conn->flags); 624 608 } 625 609 ··· 981 965 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type); 982 966 void hci_smp_irks_clear(struct hci_dev *hdev); 983 967 968 + bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); 969 + 984 970 void hci_remote_oob_data_clear(struct hci_dev *hdev); 985 971 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev, 986 972 bdaddr_t *bdaddr, u8 bdaddr_type); ··· 1039 1021 #define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE)) 1040 1022 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR)) 1041 1023 1042 - #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \ 1043 - !test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) 1044 - #define bredr_sc_enabled(dev) (lmp_sc_capable(dev) && \ 1045 - test_bit(HCI_SC_ENABLED, &(dev)->dev_flags)) 1024 + #define hdev_is_powered(dev) (test_bit(HCI_UP, &(dev)->flags) && \ 1025 + !hci_dev_test_flag(dev, HCI_AUTO_OFF)) 1026 + #define bredr_sc_enabled(dev) (lmp_sc_capable(dev) && \ 1027 + hci_dev_test_flag(dev, HCI_SC_ENABLED)) 1046 1028 1047 1029 /* ----- HCI protocols ----- */ 1048 1030 #define HCI_PROTO_DEFER 0x01 ··· 1289 1271 1290 1272 void hci_sock_dev_event(struct hci_dev *hdev, int event); 1291 1273 1274 + #define HCI_MGMT_VAR_LEN (1 << 0) 1275 + #define HCI_MGMT_NO_HDEV (1 << 1) 1276 + #define HCI_MGMT_UNCONFIGURED (1 << 2) 1277 + 1278 + struct hci_mgmt_handler { 1279 + int (*func) (struct sock *sk, struct hci_dev *hdev, void *data, 1280 + u16 data_len); 1281 + size_t data_len; 1282 + unsigned long flags; 1283 + }; 1284 + 1285 + struct hci_mgmt_chan { 1286 + struct list_head list; 1287 + unsigned short channel; 1288 + size_t handler_count; 1289 + const struct hci_mgmt_handler *handlers; 1290 + }; 1291 + 1292 + int hci_mgmt_chan_register(struct hci_mgmt_chan *c); 1293 + void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c); 1294 + 1292 1295 /* Management interface */ 1293 1296 #define DISCOV_TYPE_BREDR (BIT(BDADDR_BREDR)) 1294 1297 #define DISCOV_TYPE_LE (BIT(BDADDR_LE_PUBLIC) | \ ··· 1329 1290 #define DISCOV_BREDR_INQUIRY_LEN 0x08 1330 1291 #define DISCOV_LE_RESTART_DELAY msecs_to_jiffies(200) /* msec */ 1331 1292 1332 - int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); 1293 + int mgmt_control(struct hci_mgmt_chan *chan, struct sock *sk, 1294 + struct msghdr *msg, size_t msglen); 1295 + 1333 1296 int mgmt_new_settings(struct hci_dev *hdev); 1334 1297 void mgmt_index_added(struct hci_dev *hdev); 1335 1298 void mgmt_index_removed(struct hci_dev *hdev);
+2
include/net/bluetooth/mgmt.h
··· 43 43 #define MGMT_STATUS_CANCELLED 0x10 44 44 #define MGMT_STATUS_INVALID_INDEX 0x11 45 45 #define MGMT_STATUS_RFKILLED 0x12 46 + #define MGMT_STATUS_ALREADY_PAIRED 0x13 46 47 47 48 struct mgmt_hdr { 48 49 __le16 opcode; ··· 99 98 #define MGMT_SETTING_DEBUG_KEYS 0x00001000 100 99 #define MGMT_SETTING_PRIVACY 0x00002000 101 100 #define MGMT_SETTING_CONFIGURATION 0x00004000 101 + #define MGMT_SETTING_STATIC_ADDRESS 0x00008000 102 102 103 103 #define MGMT_OP_READ_INFO 0x0004 104 104 #define MGMT_READ_INFO_SIZE 0
+9
net/bluetooth/af_bluetooth.c
··· 749 749 goto sock_err; 750 750 } 751 751 752 + err = mgmt_init(); 753 + if (err < 0) { 754 + sco_exit(); 755 + l2cap_exit(); 756 + goto sock_err; 757 + } 758 + 752 759 return 0; 753 760 754 761 sock_err: ··· 770 763 771 764 static void __exit bt_exit(void) 772 765 { 766 + mgmt_exit(); 767 + 773 768 sco_exit(); 774 769 775 770 l2cap_exit();
+9 -9
net/bluetooth/hci_conn.c
··· 571 571 572 572 list_for_each_entry(d, &hci_dev_list, list) { 573 573 if (!test_bit(HCI_UP, &d->flags) || 574 - test_bit(HCI_USER_CHANNEL, &d->dev_flags) || 574 + hci_dev_test_flag(d, HCI_USER_CHANNEL) || 575 575 d->dev_type != HCI_BREDR) 576 576 continue; 577 577 ··· 700 700 * and write a new random address. The flag will be set back on 701 701 * as soon as the SET_ADV_ENABLE HCI command completes. 702 702 */ 703 - clear_bit(HCI_LE_ADV, &hdev->dev_flags); 703 + hci_dev_clear_flag(hdev, HCI_LE_ADV); 704 704 705 705 /* Set require_privacy to false so that the remote device has a 706 706 * chance of identifying us. ··· 734 734 int err; 735 735 736 736 /* Let's make sure that le is enabled.*/ 737 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { 737 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 738 738 if (lmp_le_capable(hdev)) 739 739 return ERR_PTR(-ECONNREFUSED); 740 740 ··· 799 799 * anyway have to disable it in order to start directed 800 800 * advertising. 801 801 */ 802 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) { 802 + if (hci_dev_test_flag(hdev, HCI_LE_ADV)) { 803 803 u8 enable = 0x00; 804 804 hci_req_add(&req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), 805 805 &enable); ··· 810 810 /* If we're active scanning most controllers are unable 811 811 * to initiate advertising. Simply reject the attempt. 812 812 */ 813 - if (test_bit(HCI_LE_SCAN, &hdev->dev_flags) && 813 + if (hci_dev_test_flag(hdev, HCI_LE_SCAN) && 814 814 hdev->le_scan_type == LE_SCAN_ACTIVE) { 815 815 skb_queue_purge(&req.cmd_q); 816 816 hci_conn_del(conn); ··· 840 840 * handler for scan disabling knows to set the correct discovery 841 841 * state. 842 842 */ 843 - if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) { 843 + if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { 844 844 hci_req_add_le_scan_disable(&req); 845 - set_bit(HCI_LE_SCAN_INTERRUPTED, &hdev->dev_flags); 845 + hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED); 846 846 } 847 847 848 848 hci_req_add_le_create_conn(&req, conn); ··· 864 864 { 865 865 struct hci_conn *acl; 866 866 867 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 867 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 868 868 if (lmp_bredr_capable(hdev)) 869 869 return ERR_PTR(-ECONNREFUSED); 870 870 ··· 942 942 * Connections is used and the link is encrypted with AES-CCM 943 943 * using a P-256 authenticated combination key. 944 944 */ 945 - if (test_bit(HCI_SC_ONLY, &conn->hdev->flags)) { 945 + if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) { 946 946 if (!hci_conn_sc_enabled(conn) || 947 947 !test_bit(HCI_CONN_AES_CCM, &conn->flags) || 948 948 conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
+133 -97
net/bluetooth/hci_core.c
··· 80 80 struct hci_dev *hdev = file->private_data; 81 81 char buf[3]; 82 82 83 - buf[0] = test_bit(HCI_DUT_MODE, &hdev->dbg_flags) ? 'Y': 'N'; 83 + buf[0] = hci_dev_test_flag(hdev, HCI_DUT_MODE) ? 'Y': 'N'; 84 84 buf[1] = '\n'; 85 85 buf[2] = '\0'; 86 86 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); ··· 106 106 if (strtobool(buf, &enable)) 107 107 return -EINVAL; 108 108 109 - if (enable == test_bit(HCI_DUT_MODE, &hdev->dbg_flags)) 109 + if (enable == hci_dev_test_flag(hdev, HCI_DUT_MODE)) 110 110 return -EALREADY; 111 111 112 112 hci_req_lock(hdev); ··· 127 127 if (err < 0) 128 128 return err; 129 129 130 - change_bit(HCI_DUT_MODE, &hdev->dbg_flags); 130 + hci_dev_change_flag(hdev, HCI_DUT_MODE); 131 131 132 132 return count; 133 133 } ··· 501 501 502 502 /* LE-only controllers have LE implicitly enabled */ 503 503 if (!lmp_bredr_capable(hdev)) 504 - set_bit(HCI_LE_ENABLED, &hdev->dev_flags); 504 + hci_dev_set_flag(hdev, HCI_LE_ENABLED); 505 505 } 506 506 507 507 static void hci_setup_event_mask(struct hci_request *req) ··· 591 591 if (lmp_bredr_capable(hdev)) 592 592 bredr_setup(req); 593 593 else 594 - clear_bit(HCI_BREDR_ENABLED, &hdev->dev_flags); 594 + hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED); 595 595 596 596 if (lmp_le_capable(hdev)) 597 597 le_setup(req); ··· 617 617 */ 618 618 hdev->max_page = 0x01; 619 619 620 - if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { 620 + if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 621 621 u8 mode = 0x01; 622 622 623 623 hci_req_add(req, HCI_OP_WRITE_SSP_MODE, ··· 656 656 sizeof(cp), &cp); 657 657 } 658 658 659 - if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags)) { 659 + if (hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) { 660 660 u8 enable = 1; 661 661 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, sizeof(enable), 662 662 &enable); ··· 693 693 694 694 memset(&cp, 0, sizeof(cp)); 695 695 696 - if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { 696 + if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 697 697 cp.le = 0x01; 698 698 cp.simul = 0x00; 699 699 } ··· 881 881 hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL); 882 882 883 883 /* Enable Secure Connections if supported and configured */ 884 - if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && 884 + if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) && 885 885 bredr_sc_enabled(hdev)) { 886 886 u8 support = 0x01; 887 887 ··· 901 901 /* The Device Under Test (DUT) mode is special and available for 902 902 * all controller types. So just create it early on. 903 903 */ 904 - if (test_bit(HCI_SETUP, &hdev->dev_flags)) { 904 + if (hci_dev_test_flag(hdev, HCI_SETUP)) { 905 905 debugfs_create_file("dut_mode", 0644, hdev->debugfs, hdev, 906 906 &dut_mode_fops); 907 907 } ··· 937 937 * So only when in setup phase or config phase, create the debugfs 938 938 * entries and register the SMP channels. 939 939 */ 940 - if (!test_bit(HCI_SETUP, &hdev->dev_flags) && 941 - !test_bit(HCI_CONFIG, &hdev->dev_flags)) 940 + if (!hci_dev_test_flag(hdev, HCI_SETUP) && 941 + !hci_dev_test_flag(hdev, HCI_CONFIG)) 942 942 return 0; 943 943 944 944 hci_debugfs_create_common(hdev); ··· 1300 1300 if (!hdev) 1301 1301 return -ENODEV; 1302 1302 1303 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 1303 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 1304 1304 err = -EBUSY; 1305 1305 goto done; 1306 1306 } 1307 1307 1308 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 1308 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 1309 1309 err = -EOPNOTSUPP; 1310 1310 goto done; 1311 1311 } ··· 1315 1315 goto done; 1316 1316 } 1317 1317 1318 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 1318 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 1319 1319 err = -EOPNOTSUPP; 1320 1320 goto done; 1321 1321 } ··· 1387 1387 1388 1388 hci_req_lock(hdev); 1389 1389 1390 - if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) { 1390 + if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) { 1391 1391 ret = -ENODEV; 1392 1392 goto done; 1393 1393 } 1394 1394 1395 - if (!test_bit(HCI_SETUP, &hdev->dev_flags) && 1396 - !test_bit(HCI_CONFIG, &hdev->dev_flags)) { 1395 + if (!hci_dev_test_flag(hdev, HCI_SETUP) && 1396 + !hci_dev_test_flag(hdev, HCI_CONFIG)) { 1397 1397 /* Check for rfkill but allow the HCI setup stage to 1398 1398 * proceed (which in itself doesn't cause any RF activity). 1399 1399 */ 1400 - if (test_bit(HCI_RFKILLED, &hdev->dev_flags)) { 1400 + if (hci_dev_test_flag(hdev, HCI_RFKILLED)) { 1401 1401 ret = -ERFKILL; 1402 1402 goto done; 1403 1403 } ··· 1414 1414 * This check is only valid for BR/EDR controllers 1415 1415 * since AMP controllers do not have an address. 1416 1416 */ 1417 - if (!test_bit(HCI_USER_CHANNEL, &hdev->dev_flags) && 1417 + if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && 1418 1418 hdev->dev_type == HCI_BREDR && 1419 1419 !bacmp(&hdev->bdaddr, BDADDR_ANY) && 1420 1420 !bacmp(&hdev->static_addr, BDADDR_ANY)) { ··· 1436 1436 atomic_set(&hdev->cmd_cnt, 1); 1437 1437 set_bit(HCI_INIT, &hdev->flags); 1438 1438 1439 - if (test_bit(HCI_SETUP, &hdev->dev_flags)) { 1439 + if (hci_dev_test_flag(hdev, HCI_SETUP)) { 1440 1440 if (hdev->setup) 1441 1441 ret = hdev->setup(hdev); 1442 1442 ··· 1448 1448 */ 1449 1449 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) || 1450 1450 test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks)) 1451 - set_bit(HCI_UNCONFIGURED, &hdev->dev_flags); 1451 + hci_dev_set_flag(hdev, HCI_UNCONFIGURED); 1452 1452 1453 1453 /* For an unconfigured controller it is required to 1454 1454 * read at least the version information provided by ··· 1458 1458 * also the original Bluetooth public device address 1459 1459 * will be read using the Read BD Address command. 1460 1460 */ 1461 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 1461 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 1462 1462 ret = __hci_unconf_init(hdev); 1463 1463 } 1464 1464 1465 - if (test_bit(HCI_CONFIG, &hdev->dev_flags)) { 1465 + if (hci_dev_test_flag(hdev, HCI_CONFIG)) { 1466 1466 /* If public address change is configured, ensure that 1467 1467 * the address gets programmed. If the driver does not 1468 1468 * support changing the public address, fail the power ··· 1476 1476 } 1477 1477 1478 1478 if (!ret) { 1479 - if (!test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) && 1480 - !test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) 1479 + if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && 1480 + !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) 1481 1481 ret = __hci_init(hdev); 1482 1482 } 1483 1483 ··· 1485 1485 1486 1486 if (!ret) { 1487 1487 hci_dev_hold(hdev); 1488 - set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags); 1488 + hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 1489 1489 set_bit(HCI_UP, &hdev->flags); 1490 1490 hci_notify(hdev, HCI_DEV_UP); 1491 - if (!test_bit(HCI_SETUP, &hdev->dev_flags) && 1492 - !test_bit(HCI_CONFIG, &hdev->dev_flags) && 1493 - !test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) && 1494 - !test_bit(HCI_USER_CHANNEL, &hdev->dev_flags) && 1491 + if (!hci_dev_test_flag(hdev, HCI_SETUP) && 1492 + !hci_dev_test_flag(hdev, HCI_CONFIG) && 1493 + !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && 1494 + !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && 1495 1495 hdev->dev_type == HCI_BREDR) { 1496 1496 hci_dev_lock(hdev); 1497 1497 mgmt_powered(hdev, 1); ··· 1543 1543 * HCI_USER_CHANNEL will be set first before attempting to 1544 1544 * open the device. 1545 1545 */ 1546 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) && 1547 - !test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 1546 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && 1547 + !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 1548 1548 err = -EOPNOTSUPP; 1549 1549 goto done; 1550 1550 } ··· 1554 1554 * particularly important if the setup procedure has not yet 1555 1555 * completed. 1556 1556 */ 1557 - if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) 1557 + if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) 1558 1558 cancel_delayed_work(&hdev->power_off); 1559 1559 1560 1560 /* After this call it is guaranteed that the setup procedure ··· 1569 1569 * is in use this bit will be cleared again and userspace has 1570 1570 * to explicitly enable it. 1571 1571 */ 1572 - if (!test_bit(HCI_USER_CHANNEL, &hdev->dev_flags) && 1573 - !test_bit(HCI_MGMT, &hdev->dev_flags)) 1574 - set_bit(HCI_BONDABLE, &hdev->dev_flags); 1572 + if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && 1573 + !hci_dev_test_flag(hdev, HCI_MGMT)) 1574 + hci_dev_set_flag(hdev, HCI_BONDABLE); 1575 1575 1576 1576 err = hci_dev_do_open(hdev); 1577 1577 ··· 1601 1601 { 1602 1602 BT_DBG("%s %p", hdev->name, hdev); 1603 1603 1604 - if (!test_bit(HCI_UNREGISTER, &hdev->dev_flags)) { 1604 + if (!hci_dev_test_flag(hdev, HCI_UNREGISTER)) { 1605 1605 /* Execute vendor specific shutdown routine */ 1606 1606 if (hdev->shutdown) 1607 1607 hdev->shutdown(hdev); ··· 1625 1625 if (hdev->discov_timeout > 0) { 1626 1626 cancel_delayed_work(&hdev->discov_off); 1627 1627 hdev->discov_timeout = 0; 1628 - clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags); 1629 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1628 + hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1629 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1630 1630 } 1631 1631 1632 - if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) 1632 + if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) 1633 1633 cancel_delayed_work(&hdev->service_cache); 1634 1634 1635 1635 cancel_delayed_work_sync(&hdev->le_scan_disable); 1636 1636 cancel_delayed_work_sync(&hdev->le_scan_restart); 1637 1637 1638 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 1638 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 1639 1639 cancel_delayed_work_sync(&hdev->rpa_expired); 1640 1640 1641 1641 /* Avoid potential lockdep warnings from the *_flush() calls by ··· 1647 1647 1648 1648 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 1649 1649 1650 - if (!test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) { 1650 + if (!hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) { 1651 1651 if (hdev->dev_type == HCI_BREDR) 1652 1652 mgmt_powered(hdev, 0); 1653 1653 } ··· 1667 1667 /* Reset device */ 1668 1668 skb_queue_purge(&hdev->cmd_q); 1669 1669 atomic_set(&hdev->cmd_cnt, 1); 1670 - if (!test_bit(HCI_AUTO_OFF, &hdev->dev_flags) && 1671 - !test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) && 1670 + if (!hci_dev_test_flag(hdev, HCI_AUTO_OFF) && 1671 + !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && 1672 1672 test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks)) { 1673 1673 set_bit(HCI_INIT, &hdev->flags); 1674 1674 __hci_req_sync(hdev, hci_reset_req, 0, HCI_CMD_TIMEOUT); ··· 1699 1699 1700 1700 /* Clear flags */ 1701 1701 hdev->flags &= BIT(HCI_RAW); 1702 - hdev->dev_flags &= ~HCI_PERSISTENT_MASK; 1702 + hci_dev_clear_volatile_flags(hdev); 1703 1703 1704 1704 /* Controller radio is available but is currently powered down */ 1705 1705 hdev->amp_status = AMP_STATUS_POWERED_DOWN; ··· 1723 1723 if (!hdev) 1724 1724 return -ENODEV; 1725 1725 1726 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 1726 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 1727 1727 err = -EBUSY; 1728 1728 goto done; 1729 1729 } 1730 1730 1731 - if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) 1731 + if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) 1732 1732 cancel_delayed_work(&hdev->power_off); 1733 1733 1734 1734 err = hci_dev_do_close(hdev); ··· 1786 1786 goto done; 1787 1787 } 1788 1788 1789 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 1789 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 1790 1790 err = -EBUSY; 1791 1791 goto done; 1792 1792 } 1793 1793 1794 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 1794 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 1795 1795 err = -EOPNOTSUPP; 1796 1796 goto done; 1797 1797 } ··· 1812 1812 if (!hdev) 1813 1813 return -ENODEV; 1814 1814 1815 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 1815 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 1816 1816 ret = -EBUSY; 1817 1817 goto done; 1818 1818 } 1819 1819 1820 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 1820 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 1821 1821 ret = -EOPNOTSUPP; 1822 1822 goto done; 1823 1823 } ··· 1836 1836 BT_DBG("%s scan 0x%02x", hdev->name, scan); 1837 1837 1838 1838 if ((scan & SCAN_PAGE)) 1839 - conn_changed = !test_and_set_bit(HCI_CONNECTABLE, 1840 - &hdev->dev_flags); 1839 + conn_changed = !hci_dev_test_and_set_flag(hdev, 1840 + HCI_CONNECTABLE); 1841 1841 else 1842 - conn_changed = test_and_clear_bit(HCI_CONNECTABLE, 1843 - &hdev->dev_flags); 1842 + conn_changed = hci_dev_test_and_clear_flag(hdev, 1843 + HCI_CONNECTABLE); 1844 1844 1845 1845 if ((scan & SCAN_INQUIRY)) { 1846 - discov_changed = !test_and_set_bit(HCI_DISCOVERABLE, 1847 - &hdev->dev_flags); 1846 + discov_changed = !hci_dev_test_and_set_flag(hdev, 1847 + HCI_DISCOVERABLE); 1848 1848 } else { 1849 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1850 - discov_changed = test_and_clear_bit(HCI_DISCOVERABLE, 1851 - &hdev->dev_flags); 1849 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1850 + discov_changed = hci_dev_test_and_clear_flag(hdev, 1851 + HCI_DISCOVERABLE); 1852 1852 } 1853 1853 1854 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 1854 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 1855 1855 return; 1856 1856 1857 1857 if (conn_changed || discov_changed) { 1858 1858 /* In case this was disabled through mgmt */ 1859 - set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags); 1859 + hci_dev_set_flag(hdev, HCI_BREDR_ENABLED); 1860 1860 1861 - if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 1861 + if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 1862 1862 mgmt_update_adv_data(hdev); 1863 1863 1864 1864 mgmt_new_settings(hdev); ··· 1878 1878 if (!hdev) 1879 1879 return -ENODEV; 1880 1880 1881 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 1881 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 1882 1882 err = -EBUSY; 1883 1883 goto done; 1884 1884 } 1885 1885 1886 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 1886 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 1887 1887 err = -EOPNOTSUPP; 1888 1888 goto done; 1889 1889 } ··· 1893 1893 goto done; 1894 1894 } 1895 1895 1896 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 1896 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 1897 1897 err = -EOPNOTSUPP; 1898 1898 goto done; 1899 1899 } ··· 1997 1997 * is running, but in that case still indicate that the 1998 1998 * device is actually down. 1999 1999 */ 2000 - if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) 2000 + if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) 2001 2001 flags &= ~BIT(HCI_UP); 2002 2002 2003 2003 (dr + n)->dev_id = hdev->id; ··· 2035 2035 * is running, but in that case still indicate that the 2036 2036 * device is actually down. 2037 2037 */ 2038 - if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) 2038 + if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) 2039 2039 flags = hdev->flags & ~BIT(HCI_UP); 2040 2040 else 2041 2041 flags = hdev->flags; ··· 2078 2078 2079 2079 BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked); 2080 2080 2081 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) 2081 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) 2082 2082 return -EBUSY; 2083 2083 2084 2084 if (blocked) { 2085 - set_bit(HCI_RFKILLED, &hdev->dev_flags); 2086 - if (!test_bit(HCI_SETUP, &hdev->dev_flags) && 2087 - !test_bit(HCI_CONFIG, &hdev->dev_flags)) 2085 + hci_dev_set_flag(hdev, HCI_RFKILLED); 2086 + if (!hci_dev_test_flag(hdev, HCI_SETUP) && 2087 + !hci_dev_test_flag(hdev, HCI_CONFIG)) 2088 2088 hci_dev_do_close(hdev); 2089 2089 } else { 2090 - clear_bit(HCI_RFKILLED, &hdev->dev_flags); 2090 + hci_dev_clear_flag(hdev, HCI_RFKILLED); 2091 2091 } 2092 2092 2093 2093 return 0; ··· 2116 2116 * ignored and they need to be checked now. If they are still 2117 2117 * valid, it is important to turn the device back off. 2118 2118 */ 2119 - if (test_bit(HCI_RFKILLED, &hdev->dev_flags) || 2120 - test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) || 2119 + if (hci_dev_test_flag(hdev, HCI_RFKILLED) || 2120 + hci_dev_test_flag(hdev, HCI_UNCONFIGURED) || 2121 2121 (hdev->dev_type == HCI_BREDR && 2122 2122 !bacmp(&hdev->bdaddr, BDADDR_ANY) && 2123 2123 !bacmp(&hdev->static_addr, BDADDR_ANY))) { 2124 - clear_bit(HCI_AUTO_OFF, &hdev->dev_flags); 2124 + hci_dev_clear_flag(hdev, HCI_AUTO_OFF); 2125 2125 hci_dev_do_close(hdev); 2126 - } else if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) { 2126 + } else if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) { 2127 2127 queue_delayed_work(hdev->req_workqueue, &hdev->power_off, 2128 2128 HCI_AUTO_OFF_TIMEOUT); 2129 2129 } 2130 2130 2131 - if (test_and_clear_bit(HCI_SETUP, &hdev->dev_flags)) { 2131 + if (hci_dev_test_and_clear_flag(hdev, HCI_SETUP)) { 2132 2132 /* For unconfigured devices, set the HCI_RAW flag 2133 2133 * so that userspace can easily identify them. 2134 2134 */ 2135 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 2135 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 2136 2136 set_bit(HCI_RAW, &hdev->flags); 2137 2137 2138 2138 /* For fully configured devices, this will send ··· 2143 2143 * and no event will be send. 2144 2144 */ 2145 2145 mgmt_index_added(hdev); 2146 - } else if (test_and_clear_bit(HCI_CONFIG, &hdev->dev_flags)) { 2146 + } else if (hci_dev_test_and_clear_flag(hdev, HCI_CONFIG)) { 2147 2147 /* When the controller is now configured, then it 2148 2148 * is important to clear the HCI_RAW flag. 2149 2149 */ 2150 - if (!test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 2150 + if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 2151 2151 clear_bit(HCI_RAW, &hdev->flags); 2152 2152 2153 2153 /* Powering on the controller with HCI_CONFIG set only ··· 2514 2514 list_del_rcu(&k->list); 2515 2515 kfree_rcu(k, rcu); 2516 2516 } 2517 + } 2518 + 2519 + bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type) 2520 + { 2521 + struct smp_ltk *k; 2522 + struct smp_irk *irk; 2523 + u8 addr_type; 2524 + 2525 + if (type == BDADDR_BREDR) { 2526 + if (hci_find_link_key(hdev, bdaddr)) 2527 + return true; 2528 + return false; 2529 + } 2530 + 2531 + /* Convert to HCI addr type which struct smp_ltk uses */ 2532 + if (type == BDADDR_LE_PUBLIC) 2533 + addr_type = ADDR_LE_DEV_PUBLIC; 2534 + else 2535 + addr_type = ADDR_LE_DEV_RANDOM; 2536 + 2537 + irk = hci_get_irk(hdev, bdaddr, addr_type); 2538 + if (irk) { 2539 + bdaddr = &irk->bdaddr; 2540 + addr_type = irk->addr_type; 2541 + } 2542 + 2543 + rcu_read_lock(); 2544 + list_for_each_entry_rcu(k, &hdev->long_term_keys, list) { 2545 + if (k->bdaddr_type == addr_type && !bacmp(bdaddr, &k->bdaddr)) { 2546 + rcu_read_unlock(); 2547 + return true; 2548 + } 2549 + } 2550 + rcu_read_unlock(); 2551 + 2552 + return false; 2517 2553 } 2518 2554 2519 2555 /* HCI command timer function */ ··· 2986 2950 BT_DBG("%s", hdev->name); 2987 2951 2988 2952 /* If controller is not scanning we are done. */ 2989 - if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags)) 2953 + if (!hci_dev_test_flag(hdev, HCI_LE_SCAN)) 2990 2954 return; 2991 2955 2992 2956 hci_req_init(&req, hdev); ··· 3019 2983 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr, 3020 2984 u8 *bdaddr_type) 3021 2985 { 3022 - if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) || 2986 + if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || 3023 2987 !bacmp(&hdev->bdaddr, BDADDR_ANY) || 3024 - (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) && 2988 + (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 3025 2989 bacmp(&hdev->static_addr, BDADDR_ANY))) { 3026 2990 bacpy(bdaddr, &hdev->static_addr); 3027 2991 *bdaddr_type = ADDR_LE_DEV_RANDOM; ··· 3189 3153 } 3190 3154 3191 3155 if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) 3192 - set_bit(HCI_RFKILLED, &hdev->dev_flags); 3156 + hci_dev_set_flag(hdev, HCI_RFKILLED); 3193 3157 3194 - set_bit(HCI_SETUP, &hdev->dev_flags); 3195 - set_bit(HCI_AUTO_OFF, &hdev->dev_flags); 3158 + hci_dev_set_flag(hdev, HCI_SETUP); 3159 + hci_dev_set_flag(hdev, HCI_AUTO_OFF); 3196 3160 3197 3161 if (hdev->dev_type == HCI_BREDR) { 3198 3162 /* Assume BR/EDR support until proven otherwise (such as 3199 3163 * through reading supported features during init. 3200 3164 */ 3201 - set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags); 3165 + hci_dev_set_flag(hdev, HCI_BREDR_ENABLED); 3202 3166 } 3203 3167 3204 3168 write_lock(&hci_dev_list_lock); ··· 3209 3173 * and should not be included in normal operation. 3210 3174 */ 3211 3175 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks)) 3212 - set_bit(HCI_UNCONFIGURED, &hdev->dev_flags); 3176 + hci_dev_set_flag(hdev, HCI_UNCONFIGURED); 3213 3177 3214 3178 hci_notify(hdev, HCI_DEV_REG); 3215 3179 hci_dev_hold(hdev); ··· 3235 3199 3236 3200 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus); 3237 3201 3238 - set_bit(HCI_UNREGISTER, &hdev->dev_flags); 3202 + hci_dev_set_flag(hdev, HCI_UNREGISTER); 3239 3203 3240 3204 id = hdev->id; 3241 3205 ··· 3251 3215 cancel_work_sync(&hdev->power_on); 3252 3216 3253 3217 if (!test_bit(HCI_INIT, &hdev->flags) && 3254 - !test_bit(HCI_SETUP, &hdev->dev_flags) && 3255 - !test_bit(HCI_CONFIG, &hdev->dev_flags)) { 3218 + !hci_dev_test_flag(hdev, HCI_SETUP) && 3219 + !hci_dev_test_flag(hdev, HCI_CONFIG)) { 3256 3220 hci_dev_lock(hdev); 3257 3221 mgmt_index_removed(hdev); 3258 3222 hci_dev_unlock(hdev); ··· 3926 3890 3927 3891 static void __check_timeout(struct hci_dev *hdev, unsigned int cnt) 3928 3892 { 3929 - if (!test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 3893 + if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 3930 3894 /* ACL tx timeout must be longer than maximum 3931 3895 * link supervision timeout (40.9 seconds) */ 3932 3896 if (!cnt && time_after(jiffies, hdev->acl_last_tx + ··· 4109 4073 if (!hci_conn_num(hdev, LE_LINK)) 4110 4074 return; 4111 4075 4112 - if (!test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 4076 + if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { 4113 4077 /* LE tx timeout must be longer than maximum 4114 4078 * link supervision timeout (40.9 seconds) */ 4115 4079 if (!hdev->le_cnt && hdev->le_pkts && ··· 4157 4121 BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt, 4158 4122 hdev->sco_cnt, hdev->le_cnt); 4159 4123 4160 - if (!test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 4124 + if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 4161 4125 /* Schedule queues and send stuff to HCI driver */ 4162 4126 hci_sched_acl(hdev); 4163 4127 hci_sched_sco(hdev); ··· 4354 4318 hci_send_to_sock(hdev, skb); 4355 4319 } 4356 4320 4357 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 4321 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 4358 4322 kfree_skb(skb); 4359 4323 continue; 4360 4324 }
+5 -5
net/bluetooth/hci_debugfs.c
··· 247 247 struct hci_dev *hdev = file->private_data; 248 248 char buf[3]; 249 249 250 - buf[0] = test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags) ? 'Y': 'N'; 250 + buf[0] = hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS) ? 'Y': 'N'; 251 251 buf[1] = '\n'; 252 252 buf[2] = '\0'; 253 253 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); ··· 265 265 struct hci_dev *hdev = file->private_data; 266 266 char buf[3]; 267 267 268 - buf[0] = test_bit(HCI_SC_ONLY, &hdev->dev_flags) ? 'Y': 'N'; 268 + buf[0] = hci_dev_test_flag(hdev, HCI_SC_ONLY) ? 'Y': 'N'; 269 269 buf[1] = '\n'; 270 270 buf[2] = '\0'; 271 271 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); ··· 679 679 struct hci_dev *hdev = file->private_data; 680 680 char buf[3]; 681 681 682 - buf[0] = test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ? 'Y': 'N'; 682 + buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y': 'N'; 683 683 buf[1] = '\n'; 684 684 buf[2] = '\0'; 685 685 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); ··· 704 704 if (strtobool(buf, &enable)) 705 705 return -EINVAL; 706 706 707 - if (enable == test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags)) 707 + if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR)) 708 708 return -EALREADY; 709 709 710 - change_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags); 710 + hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR); 711 711 712 712 return count; 713 713 }
+63 -64
net/bluetooth/hci_event.c
··· 70 70 if (status) 71 71 return; 72 72 73 - set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags); 73 + hci_dev_set_flag(hdev, HCI_PERIODIC_INQ); 74 74 } 75 75 76 76 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb) ··· 82 82 if (status) 83 83 return; 84 84 85 - clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags); 85 + hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ); 86 86 87 87 hci_conn_check_pending(hdev); 88 88 } ··· 198 198 return; 199 199 200 200 /* Reset all non-persistent flags */ 201 - hdev->dev_flags &= ~HCI_PERSISTENT_MASK; 201 + hci_dev_clear_volatile_flags(hdev); 202 202 203 203 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 204 204 ··· 265 265 266 266 hci_dev_lock(hdev); 267 267 268 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 268 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 269 269 mgmt_set_local_name_complete(hdev, sent, status); 270 270 else if (!status) 271 271 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH); ··· 282 282 if (rp->status) 283 283 return; 284 284 285 - if (test_bit(HCI_SETUP, &hdev->dev_flags) || 286 - test_bit(HCI_CONFIG, &hdev->dev_flags)) 285 + if (hci_dev_test_flag(hdev, HCI_SETUP) || 286 + hci_dev_test_flag(hdev, HCI_CONFIG)) 287 287 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH); 288 288 } 289 289 ··· 309 309 clear_bit(HCI_AUTH, &hdev->flags); 310 310 } 311 311 312 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 312 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 313 313 mgmt_auth_enable_complete(hdev, status); 314 314 315 315 hci_dev_unlock(hdev); ··· 404 404 if (status == 0) 405 405 memcpy(hdev->dev_class, sent, 3); 406 406 407 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 407 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 408 408 mgmt_set_class_of_dev_complete(hdev, sent, status); 409 409 410 410 hci_dev_unlock(hdev); ··· 497 497 hdev->features[1][0] &= ~LMP_HOST_SSP; 498 498 } 499 499 500 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 500 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 501 501 mgmt_ssp_enable_complete(hdev, sent->mode, status); 502 502 else if (!status) { 503 503 if (sent->mode) 504 - set_bit(HCI_SSP_ENABLED, &hdev->dev_flags); 504 + hci_dev_set_flag(hdev, HCI_SSP_ENABLED); 505 505 else 506 - clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags); 506 + hci_dev_clear_flag(hdev, HCI_SSP_ENABLED); 507 507 } 508 508 509 509 hci_dev_unlock(hdev); ··· 529 529 hdev->features[1][0] &= ~LMP_HOST_SC; 530 530 } 531 531 532 - if (!test_bit(HCI_MGMT, &hdev->dev_flags) && !status) { 532 + if (!hci_dev_test_flag(hdev, HCI_MGMT) && !status) { 533 533 if (sent->support) 534 - set_bit(HCI_SC_ENABLED, &hdev->dev_flags); 534 + hci_dev_set_flag(hdev, HCI_SC_ENABLED); 535 535 else 536 - clear_bit(HCI_SC_ENABLED, &hdev->dev_flags); 536 + hci_dev_clear_flag(hdev, HCI_SC_ENABLED); 537 537 } 538 538 539 539 hci_dev_unlock(hdev); ··· 548 548 if (rp->status) 549 549 return; 550 550 551 - if (test_bit(HCI_SETUP, &hdev->dev_flags) || 552 - test_bit(HCI_CONFIG, &hdev->dev_flags)) { 551 + if (hci_dev_test_flag(hdev, HCI_SETUP) || 552 + hci_dev_test_flag(hdev, HCI_CONFIG)) { 553 553 hdev->hci_ver = rp->hci_ver; 554 554 hdev->hci_rev = __le16_to_cpu(rp->hci_rev); 555 555 hdev->lmp_ver = rp->lmp_ver; ··· 568 568 if (rp->status) 569 569 return; 570 570 571 - if (test_bit(HCI_SETUP, &hdev->dev_flags) || 572 - test_bit(HCI_CONFIG, &hdev->dev_flags)) 571 + if (hci_dev_test_flag(hdev, HCI_SETUP) || 572 + hci_dev_test_flag(hdev, HCI_CONFIG)) 573 573 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands)); 574 574 } 575 575 ··· 691 691 if (test_bit(HCI_INIT, &hdev->flags)) 692 692 bacpy(&hdev->bdaddr, &rp->bdaddr); 693 693 694 - if (test_bit(HCI_SETUP, &hdev->dev_flags)) 694 + if (hci_dev_test_flag(hdev, HCI_SETUP)) 695 695 bacpy(&hdev->setup_addr, &rp->bdaddr); 696 696 } 697 697 ··· 900 900 901 901 hci_dev_lock(hdev); 902 902 903 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 903 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 904 904 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status); 905 905 906 906 if (rp->status) ··· 926 926 927 927 hci_dev_lock(hdev); 928 928 929 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 929 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 930 930 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr, 931 931 rp->status); 932 932 ··· 985 985 986 986 hci_dev_lock(hdev); 987 987 988 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 988 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 989 989 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0, 990 990 rp->status); 991 991 ··· 1001 1001 1002 1002 hci_dev_lock(hdev); 1003 1003 1004 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 1004 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 1005 1005 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr, 1006 1006 ACL_LINK, 0, rp->status); 1007 1007 ··· 1016 1016 1017 1017 hci_dev_lock(hdev); 1018 1018 1019 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 1019 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 1020 1020 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 1021 1021 0, rp->status); 1022 1022 ··· 1032 1032 1033 1033 hci_dev_lock(hdev); 1034 1034 1035 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 1035 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 1036 1036 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr, 1037 1037 ACL_LINK, 0, rp->status); 1038 1038 ··· 1109 1109 if (*sent) { 1110 1110 struct hci_conn *conn; 1111 1111 1112 - set_bit(HCI_LE_ADV, &hdev->dev_flags); 1112 + hci_dev_set_flag(hdev, HCI_LE_ADV); 1113 1113 1114 1114 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT); 1115 1115 if (conn) ··· 1117 1117 &conn->le_conn_timeout, 1118 1118 conn->conn_timeout); 1119 1119 } else { 1120 - clear_bit(HCI_LE_ADV, &hdev->dev_flags); 1120 + hci_dev_clear_flag(hdev, HCI_LE_ADV); 1121 1121 } 1122 1122 1123 1123 hci_dev_unlock(hdev); ··· 1192 1192 1193 1193 switch (cp->enable) { 1194 1194 case LE_SCAN_ENABLE: 1195 - set_bit(HCI_LE_SCAN, &hdev->dev_flags); 1195 + hci_dev_set_flag(hdev, HCI_LE_SCAN); 1196 1196 if (hdev->le_scan_type == LE_SCAN_ACTIVE) 1197 1197 clear_pending_adv_report(hdev); 1198 1198 break; ··· 1217 1217 */ 1218 1218 cancel_delayed_work(&hdev->le_scan_disable); 1219 1219 1220 - clear_bit(HCI_LE_SCAN, &hdev->dev_flags); 1220 + hci_dev_clear_flag(hdev, HCI_LE_SCAN); 1221 1221 1222 1222 /* The HCI_LE_SCAN_INTERRUPTED flag indicates that we 1223 1223 * interrupted scanning due to a connect request. Mark ··· 1226 1226 * been disabled because of active scanning, so 1227 1227 * re-enable it again if necessary. 1228 1228 */ 1229 - if (test_and_clear_bit(HCI_LE_SCAN_INTERRUPTED, 1230 - &hdev->dev_flags)) 1229 + if (hci_dev_test_and_clear_flag(hdev, HCI_LE_SCAN_INTERRUPTED)) 1231 1230 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 1232 - else if (!test_bit(HCI_LE_ADV, &hdev->dev_flags) && 1231 + else if (!hci_dev_test_flag(hdev, HCI_LE_ADV) && 1233 1232 hdev->discovery.state == DISCOVERY_FINDING) 1234 1233 mgmt_reenable_advertising(hdev); 1235 1234 ··· 1387 1388 1388 1389 if (sent->le) { 1389 1390 hdev->features[1][0] |= LMP_HOST_LE; 1390 - set_bit(HCI_LE_ENABLED, &hdev->dev_flags); 1391 + hci_dev_set_flag(hdev, HCI_LE_ENABLED); 1391 1392 } else { 1392 1393 hdev->features[1][0] &= ~LMP_HOST_LE; 1393 - clear_bit(HCI_LE_ENABLED, &hdev->dev_flags); 1394 - clear_bit(HCI_ADVERTISING, &hdev->dev_flags); 1394 + hci_dev_clear_flag(hdev, HCI_LE_ENABLED); 1395 + hci_dev_clear_flag(hdev, HCI_ADVERTISING); 1395 1396 } 1396 1397 1397 1398 if (sent->simul) ··· 1768 1769 1769 1770 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr); 1770 1771 1771 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 1772 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 1772 1773 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0); 1773 1774 1774 1775 if (!conn) ··· 2117 2118 smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */ 2118 2119 wake_up_bit(&hdev->flags, HCI_INQUIRY); 2119 2120 2120 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 2121 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 2121 2122 return; 2122 2123 2123 2124 hci_dev_lock(hdev); ··· 2153 2154 if (!num_rsp) 2154 2155 return; 2155 2156 2156 - if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) 2157 + if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) 2157 2158 return; 2158 2159 2159 2160 hci_dev_lock(hdev); ··· 2303 2304 * connection. These features are only touched through mgmt so 2304 2305 * only do the checks if HCI_MGMT is set. 2305 2306 */ 2306 - if (test_bit(HCI_MGMT, &hdev->dev_flags) && 2307 - !test_bit(HCI_CONNECTABLE, &hdev->dev_flags) && 2307 + if (hci_dev_test_flag(hdev, HCI_MGMT) && 2308 + !hci_dev_test_flag(hdev, HCI_CONNECTABLE) && 2308 2309 !hci_bdaddr_list_lookup(&hdev->whitelist, &ev->bdaddr, 2309 2310 BDADDR_BREDR)) { 2310 2311 hci_reject_conn(hdev, &ev->bdaddr); ··· 2541 2542 2542 2543 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); 2543 2544 2544 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 2545 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 2545 2546 goto check_auth; 2546 2547 2547 2548 if (ev->status == 0) ··· 2607 2608 * whenever the encryption procedure fails. 2608 2609 */ 2609 2610 if (ev->status && conn->type == LE_LINK) 2610 - set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags); 2611 + hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 2611 2612 2612 2613 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags); 2613 2614 ··· 2625 2626 * connections that are not encrypted with AES-CCM 2626 2627 * using a P-256 authenticated combination key. 2627 2628 */ 2628 - if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && 2629 + if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && 2629 2630 (!test_bit(HCI_CONN_AES_CCM, &conn->flags) || 2630 2631 conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) { 2631 2632 hci_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE); ··· 3330 3331 hci_conn_drop(conn); 3331 3332 } 3332 3333 3333 - if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) && 3334 + if (!hci_dev_test_flag(hdev, HCI_BONDABLE) && 3334 3335 !test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags)) { 3335 3336 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY, 3336 3337 sizeof(ev->bdaddr), &ev->bdaddr); 3337 - } else if (test_bit(HCI_MGMT, &hdev->dev_flags)) { 3338 + } else if (hci_dev_test_flag(hdev, HCI_MGMT)) { 3338 3339 u8 secure; 3339 3340 3340 3341 if (conn->pending_sec_level == BT_SECURITY_HIGH) ··· 3390 3391 3391 3392 BT_DBG("%s", hdev->name); 3392 3393 3393 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 3394 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 3394 3395 return; 3395 3396 3396 3397 hci_dev_lock(hdev); ··· 3464 3465 set_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags); 3465 3466 conn_set_key(conn, ev->key_type, conn->pin_length); 3466 3467 3467 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 3468 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 3468 3469 goto unlock; 3469 3470 3470 3471 key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key, ··· 3486 3487 * store_hint being 0). 3487 3488 */ 3488 3489 if (key->type == HCI_LK_DEBUG_COMBINATION && 3489 - !test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags)) { 3490 + !hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) { 3490 3491 list_del_rcu(&key->list); 3491 3492 kfree_rcu(key, rcu); 3492 3493 goto unlock; ··· 3569 3570 if (!num_rsp) 3570 3571 return; 3571 3572 3572 - if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) 3573 + if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) 3573 3574 return; 3574 3575 3575 3576 hci_dev_lock(hdev); ··· 3775 3776 if (!num_rsp) 3776 3777 return; 3777 3778 3778 - if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) 3779 + if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) 3779 3780 return; 3780 3781 3781 3782 hci_dev_lock(hdev); ··· 3793 3794 data.rssi = info->rssi; 3794 3795 data.ssp_mode = 0x01; 3795 3796 3796 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 3797 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 3797 3798 name_known = eir_has_data_type(info->data, 3798 3799 sizeof(info->data), 3799 3800 EIR_NAME_COMPLETE); ··· 3897 3898 * information. However it can only be trusted when 3898 3899 * not in Secure Connection Only mode. 3899 3900 */ 3900 - if (!test_bit(HCI_SC_ONLY, &hdev->dev_flags)) 3901 + if (!hci_dev_test_flag(hdev, HCI_SC_ONLY)) 3901 3902 return data->present; 3902 3903 3903 3904 /* When Secure Connections Only mode is enabled, then ··· 3941 3942 3942 3943 hci_conn_hold(conn); 3943 3944 3944 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 3945 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 3945 3946 goto unlock; 3946 3947 3947 3948 /* Allow pairing if we're pairable, the initiators of the 3948 3949 * pairing or if the remote is not requesting bonding. 3949 3950 */ 3950 - if (test_bit(HCI_BONDABLE, &hdev->dev_flags) || 3951 + if (hci_dev_test_flag(hdev, HCI_BONDABLE) || 3951 3952 test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags) || 3952 3953 (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) { 3953 3954 struct hci_cp_io_capability_reply cp; ··· 3973 3974 /* If we're not bondable, force one of the non-bondable 3974 3975 * authentication requirement values. 3975 3976 */ 3976 - if (!test_bit(HCI_BONDABLE, &hdev->dev_flags)) 3977 + if (!hci_dev_test_flag(hdev, HCI_BONDABLE)) 3977 3978 conn->auth_type &= HCI_AT_NO_BONDING_MITM; 3978 3979 3979 3980 cp.authentication = conn->auth_type; ··· 4028 4029 4029 4030 hci_dev_lock(hdev); 4030 4031 4031 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 4032 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 4032 4033 goto unlock; 4033 4034 4034 4035 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr); ··· 4099 4100 4100 4101 BT_DBG("%s", hdev->name); 4101 4102 4102 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 4103 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 4103 4104 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0); 4104 4105 } 4105 4106 ··· 4118 4119 conn->passkey_notify = __le32_to_cpu(ev->passkey); 4119 4120 conn->passkey_entered = 0; 4120 4121 4121 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 4122 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 4122 4123 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type, 4123 4124 conn->dst_type, conn->passkey_notify, 4124 4125 conn->passkey_entered); ··· 4156 4157 return; 4157 4158 } 4158 4159 4159 - if (test_bit(HCI_MGMT, &hdev->dev_flags)) 4160 + if (hci_dev_test_flag(hdev, HCI_MGMT)) 4160 4161 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type, 4161 4162 conn->dst_type, conn->passkey_notify, 4162 4163 conn->passkey_entered); ··· 4225 4226 4226 4227 hci_dev_lock(hdev); 4227 4228 4228 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 4229 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 4229 4230 goto unlock; 4230 4231 4231 4232 data = hci_find_remote_oob_data(hdev, &ev->bdaddr, BDADDR_BREDR); ··· 4242 4243 struct hci_cp_remote_oob_ext_data_reply cp; 4243 4244 4244 4245 bacpy(&cp.bdaddr, &ev->bdaddr); 4245 - if (test_bit(HCI_SC_ONLY, &hdev->dev_flags)) { 4246 + if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) { 4246 4247 memset(cp.hash192, 0, sizeof(cp.hash192)); 4247 4248 memset(cp.rand192, 0, sizeof(cp.rand192)); 4248 4249 } else { ··· 4408 4409 /* All controllers implicitly stop advertising in the event of a 4409 4410 * connection, so ensure that the state bit is cleared. 4410 4411 */ 4411 - clear_bit(HCI_LE_ADV, &hdev->dev_flags); 4412 + hci_dev_clear_flag(hdev, HCI_LE_ADV); 4412 4413 4413 4414 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT); 4414 4415 if (!conn) { ··· 4431 4432 if (conn->out) { 4432 4433 conn->resp_addr_type = ev->bdaddr_type; 4433 4434 bacpy(&conn->resp_addr, &ev->bdaddr); 4434 - if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) { 4435 + if (hci_dev_test_flag(hdev, HCI_PRIVACY)) { 4435 4436 conn->init_addr_type = ADDR_LE_DEV_RANDOM; 4436 4437 bacpy(&conn->init_addr, &hdev->rpa); 4437 4438 } else { ··· 4657 4658 /* If the controller is not using resolvable random 4658 4659 * addresses, then this report can be ignored. 4659 4660 */ 4660 - if (!test_bit(HCI_PRIVACY, &hdev->dev_flags)) 4661 + if (!hci_dev_test_flag(hdev, HCI_PRIVACY)) 4661 4662 return; 4662 4663 4663 4664 /* If the local IRK of the controller does not match
+17 -17
net/bluetooth/hci_request.c
··· 270 270 * and 0x01 (whitelist enabled) use the new filter policies 271 271 * 0x02 (no whitelist) and 0x03 (whitelist enabled). 272 272 */ 273 - if (test_bit(HCI_PRIVACY, &hdev->dev_flags) && 273 + if (hci_dev_test_flag(hdev, HCI_PRIVACY) && 274 274 (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY)) 275 275 filter_policy |= 0x02; 276 276 ··· 304 304 * In this kind of scenario skip the update and let the random 305 305 * address be updated at the next cycle. 306 306 */ 307 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags) || 307 + if (hci_dev_test_flag(hdev, HCI_LE_ADV) || 308 308 hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT)) { 309 309 BT_DBG("Deferring random address update"); 310 - set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags); 310 + hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 311 311 return; 312 312 } 313 313 ··· 324 324 * current RPA has expired or there is something else than 325 325 * the current RPA in use, then generate a new one. 326 326 */ 327 - if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) { 327 + if (hci_dev_test_flag(hdev, HCI_PRIVACY)) { 328 328 int to; 329 329 330 330 *own_addr_type = ADDR_LE_DEV_RANDOM; 331 331 332 - if (!test_and_clear_bit(HCI_RPA_EXPIRED, &hdev->dev_flags) && 332 + if (!hci_dev_test_and_clear_flag(hdev, HCI_RPA_EXPIRED) && 333 333 !bacmp(&hdev->random_addr, &hdev->rpa)) 334 334 return 0; 335 335 ··· 383 383 * and a static address has been configured, then use that 384 384 * address instead of the public BR/EDR address. 385 385 */ 386 - if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) || 386 + if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || 387 387 !bacmp(&hdev->bdaddr, BDADDR_ANY) || 388 - (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) && 388 + (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 389 389 bacmp(&hdev->static_addr, BDADDR_ANY))) { 390 390 *own_addr_type = ADDR_LE_DEV_RANDOM; 391 391 if (bacmp(&hdev->static_addr, &hdev->random_addr)) ··· 425 425 struct hci_dev *hdev = req->hdev; 426 426 u8 scan; 427 427 428 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 428 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 429 429 return; 430 430 431 431 if (!hdev_is_powered(hdev)) ··· 434 434 if (mgmt_powering_down(hdev)) 435 435 return; 436 436 437 - if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags) || 437 + if (hci_dev_test_flag(hdev, HCI_CONNECTABLE) || 438 438 disconnected_whitelist_entries(hdev)) 439 439 scan = SCAN_PAGE; 440 440 else ··· 443 443 if (test_bit(HCI_PSCAN, &hdev->flags) == !!(scan & SCAN_PAGE)) 444 444 return; 445 445 446 - if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) 446 + if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 447 447 scan |= SCAN_INQUIRY; 448 448 449 449 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); ··· 471 471 472 472 if (!test_bit(HCI_UP, &hdev->flags) || 473 473 test_bit(HCI_INIT, &hdev->flags) || 474 - test_bit(HCI_SETUP, &hdev->dev_flags) || 475 - test_bit(HCI_CONFIG, &hdev->dev_flags) || 476 - test_bit(HCI_AUTO_OFF, &hdev->dev_flags) || 477 - test_bit(HCI_UNREGISTER, &hdev->dev_flags)) 474 + hci_dev_test_flag(hdev, HCI_SETUP) || 475 + hci_dev_test_flag(hdev, HCI_CONFIG) || 476 + hci_dev_test_flag(hdev, HCI_AUTO_OFF) || 477 + hci_dev_test_flag(hdev, HCI_UNREGISTER)) 478 478 return; 479 479 480 480 /* No point in doing scanning if LE support hasn't been enabled */ 481 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 481 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 482 482 return; 483 483 484 484 /* If discovery is active don't interfere with it */ ··· 502 502 */ 503 503 504 504 /* If controller is not scanning we are done. */ 505 - if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags)) 505 + if (!hci_dev_test_flag(hdev, HCI_LE_SCAN)) 506 506 return; 507 507 508 508 hci_req_add_le_scan_disable(req); ··· 524 524 /* If controller is currently scanning, we stop it to ensure we 525 525 * don't miss any advertising (due to duplicates filter). 526 526 */ 527 - if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) 527 + if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) 528 528 hci_req_add_le_scan_disable(req); 529 529 530 530 hci_req_add_le_passive_scan(req);
+89 -27
net/bluetooth/hci_sock.c
··· 31 31 #include <net/bluetooth/hci_core.h> 32 32 #include <net/bluetooth/hci_mon.h> 33 33 34 + static LIST_HEAD(mgmt_chan_list); 35 + static DEFINE_MUTEX(mgmt_chan_list_lock); 36 + 34 37 static atomic_t monitor_promisc = ATOMIC_INIT(0); 35 38 36 39 /* ----- HCI socket interface ----- */ ··· 404 401 } 405 402 } 406 403 404 + static struct hci_mgmt_chan *__hci_mgmt_chan_find(unsigned short channel) 405 + { 406 + struct hci_mgmt_chan *c; 407 + 408 + list_for_each_entry(c, &mgmt_chan_list, list) { 409 + if (c->channel == channel) 410 + return c; 411 + } 412 + 413 + return NULL; 414 + } 415 + 416 + static struct hci_mgmt_chan *hci_mgmt_chan_find(unsigned short channel) 417 + { 418 + struct hci_mgmt_chan *c; 419 + 420 + mutex_lock(&mgmt_chan_list_lock); 421 + c = __hci_mgmt_chan_find(channel); 422 + mutex_unlock(&mgmt_chan_list_lock); 423 + 424 + return c; 425 + } 426 + 427 + int hci_mgmt_chan_register(struct hci_mgmt_chan *c) 428 + { 429 + if (c->channel < HCI_CHANNEL_CONTROL) 430 + return -EINVAL; 431 + 432 + mutex_lock(&mgmt_chan_list_lock); 433 + if (__hci_mgmt_chan_find(c->channel)) { 434 + mutex_unlock(&mgmt_chan_list_lock); 435 + return -EALREADY; 436 + } 437 + 438 + list_add_tail(&c->list, &mgmt_chan_list); 439 + 440 + mutex_unlock(&mgmt_chan_list_lock); 441 + 442 + return 0; 443 + } 444 + EXPORT_SYMBOL(hci_mgmt_chan_register); 445 + 446 + void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c) 447 + { 448 + mutex_lock(&mgmt_chan_list_lock); 449 + list_del(&c->list); 450 + mutex_unlock(&mgmt_chan_list_lock); 451 + } 452 + EXPORT_SYMBOL(hci_mgmt_chan_unregister); 453 + 407 454 static int hci_sock_release(struct socket *sock) 408 455 { 409 456 struct sock *sk = sock->sk; ··· 474 421 if (hdev) { 475 422 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { 476 423 mgmt_index_added(hdev); 477 - clear_bit(HCI_USER_CHANNEL, &hdev->dev_flags); 424 + hci_dev_clear_flag(hdev, HCI_USER_CHANNEL); 478 425 hci_dev_close(hdev->id); 479 426 } 480 427 ··· 534 481 if (!hdev) 535 482 return -EBADFD; 536 483 537 - if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) 484 + if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) 538 485 return -EBUSY; 539 486 540 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 487 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 541 488 return -EOPNOTSUPP; 542 489 543 490 if (hdev->dev_type != HCI_BREDR) ··· 713 660 714 661 if (test_bit(HCI_UP, &hdev->flags) || 715 662 test_bit(HCI_INIT, &hdev->flags) || 716 - test_bit(HCI_SETUP, &hdev->dev_flags) || 717 - test_bit(HCI_CONFIG, &hdev->dev_flags)) { 663 + hci_dev_test_flag(hdev, HCI_SETUP) || 664 + hci_dev_test_flag(hdev, HCI_CONFIG)) { 718 665 err = -EBUSY; 719 666 hci_dev_put(hdev); 720 667 goto done; 721 668 } 722 669 723 - if (test_and_set_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 670 + if (hci_dev_test_and_set_flag(hdev, HCI_USER_CHANNEL)) { 724 671 err = -EUSERS; 725 672 hci_dev_put(hdev); 726 673 goto done; ··· 730 677 731 678 err = hci_dev_open(hdev->id); 732 679 if (err) { 733 - clear_bit(HCI_USER_CHANNEL, &hdev->dev_flags); 680 + hci_dev_clear_flag(hdev, HCI_USER_CHANNEL); 734 681 mgmt_index_added(hdev); 735 682 hci_dev_put(hdev); 736 683 goto done; ··· 739 686 atomic_inc(&hdev->promisc); 740 687 741 688 hci_pi(sk)->hdev = hdev; 742 - break; 743 - 744 - case HCI_CHANNEL_CONTROL: 745 - if (haddr.hci_dev != HCI_DEV_NONE) { 746 - err = -EINVAL; 747 - goto done; 748 - } 749 - 750 - if (!capable(CAP_NET_ADMIN)) { 751 - err = -EPERM; 752 - goto done; 753 - } 754 - 755 689 break; 756 690 757 691 case HCI_CHANNEL_MONITOR: ··· 758 718 break; 759 719 760 720 default: 761 - err = -EINVAL; 762 - goto done; 721 + if (!hci_mgmt_chan_find(haddr.hci_channel)) { 722 + err = -EINVAL; 723 + goto done; 724 + } 725 + 726 + if (haddr.hci_dev != HCI_DEV_NONE) { 727 + err = -EINVAL; 728 + goto done; 729 + } 730 + 731 + if (!capable(CAP_NET_ADMIN)) { 732 + err = -EPERM; 733 + goto done; 734 + } 735 + 736 + break; 763 737 } 764 738 765 739 ··· 887 833 hci_sock_cmsg(sk, msg, skb); 888 834 break; 889 835 case HCI_CHANNEL_USER: 890 - case HCI_CHANNEL_CONTROL: 891 836 case HCI_CHANNEL_MONITOR: 892 837 sock_recv_timestamp(msg, sk, skb); 838 + break; 839 + default: 840 + if (hci_mgmt_chan_find(hci_pi(sk)->channel)) 841 + sock_recv_timestamp(msg, sk, skb); 893 842 break; 894 843 } 895 844 ··· 905 848 size_t len) 906 849 { 907 850 struct sock *sk = sock->sk; 851 + struct hci_mgmt_chan *chan; 908 852 struct hci_dev *hdev; 909 853 struct sk_buff *skb; 910 854 int err; ··· 927 869 case HCI_CHANNEL_RAW: 928 870 case HCI_CHANNEL_USER: 929 871 break; 930 - case HCI_CHANNEL_CONTROL: 931 - err = mgmt_control(sk, msg, len); 932 - goto done; 933 872 case HCI_CHANNEL_MONITOR: 934 873 err = -EOPNOTSUPP; 935 874 goto done; 936 875 default: 937 - err = -EINVAL; 876 + mutex_lock(&mgmt_chan_list_lock); 877 + chan = __hci_mgmt_chan_find(hci_pi(sk)->channel); 878 + if (chan) 879 + err = mgmt_control(chan, sk, msg, len); 880 + else 881 + err = -EINVAL; 882 + 883 + mutex_unlock(&mgmt_chan_list_lock); 938 884 goto done; 939 885 } 940 886
+5 -5
net/bluetooth/l2cap_core.c
··· 3900 3900 return -EPROTO; 3901 3901 3902 3902 hci_dev_lock(hdev); 3903 - if (test_bit(HCI_MGMT, &hdev->dev_flags) && 3903 + if (hci_dev_test_flag(hdev, HCI_MGMT) && 3904 3904 !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) 3905 3905 mgmt_device_connected(hdev, hcon, 0, NULL, 0); 3906 3906 hci_dev_unlock(hdev); ··· 6987 6987 conn->local_fixed_chan = L2CAP_FC_SIG_BREDR | L2CAP_FC_CONNLESS; 6988 6988 6989 6989 if (hcon->type == ACL_LINK && 6990 - test_bit(HCI_HS_ENABLED, &hcon->hdev->dev_flags)) 6990 + hci_dev_test_flag(hcon->hdev, HCI_HS_ENABLED)) 6991 6991 conn->local_fixed_chan |= L2CAP_FC_A2MP; 6992 6992 6993 - if (test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags) && 6993 + if (hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED) && 6994 6994 (bredr_sc_enabled(hcon->hdev) || 6995 - test_bit(HCI_FORCE_BREDR_SMP, &hcon->hdev->dbg_flags))) 6995 + hci_dev_test_flag(hcon->hdev, HCI_FORCE_BREDR_SMP))) 6996 6996 conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR; 6997 6997 6998 6998 mutex_init(&conn->ident_lock); ··· 7112 7112 else 7113 7113 dst_type = ADDR_LE_DEV_RANDOM; 7114 7114 7115 - if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) 7115 + if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) 7116 7116 role = HCI_ROLE_SLAVE; 7117 7117 else 7118 7118 role = HCI_ROLE_MASTER;
+994 -953
net/bluetooth/mgmt.c
··· 37 37 #include "smp.h" 38 38 39 39 #define MGMT_VERSION 1 40 - #define MGMT_REVISION 8 40 + #define MGMT_REVISION 9 41 41 42 42 static const u16 mgmt_commands[] = { 43 43 MGMT_OP_READ_INDEX_LIST, ··· 135 135 #define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \ 136 136 "\x00\x00\x00\x00\x00\x00\x00\x00" 137 137 138 - struct pending_cmd { 138 + struct mgmt_pending_cmd { 139 139 struct list_head list; 140 140 u16 opcode; 141 141 int index; ··· 143 143 size_t param_len; 144 144 struct sock *sk; 145 145 void *user_data; 146 - int (*cmd_complete)(struct pending_cmd *cmd, u8 status); 146 + int (*cmd_complete)(struct mgmt_pending_cmd *cmd, u8 status); 147 147 }; 148 148 149 149 /* HCI to MGMT error code conversion table */ ··· 219 219 return MGMT_STATUS_FAILED; 220 220 } 221 221 222 - static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 data_len, 223 - struct sock *skip_sk) 222 + static int mgmt_send_event(u16 event, struct hci_dev *hdev, 223 + unsigned short channel, void *data, u16 data_len, 224 + struct sock *skip_sk) 224 225 { 225 226 struct sk_buff *skb; 226 227 struct mgmt_hdr *hdr; ··· 244 243 /* Time stamp */ 245 244 __net_timestamp(skb); 246 245 247 - hci_send_to_channel(HCI_CHANNEL_CONTROL, skb, skip_sk); 246 + hci_send_to_channel(channel, skb, skip_sk); 248 247 kfree_skb(skb); 249 248 250 249 return 0; 251 250 } 252 251 253 - static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status) 252 + static int mgmt_event(u16 event, struct hci_dev *hdev, void *data, u16 len, 253 + struct sock *skip_sk) 254 + { 255 + return mgmt_send_event(event, hdev, HCI_CHANNEL_CONTROL, data, len, 256 + skip_sk); 257 + } 258 + 259 + static int mgmt_cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status) 254 260 { 255 261 struct sk_buff *skb; 256 262 struct mgmt_hdr *hdr; ··· 287 279 return err; 288 280 } 289 281 290 - static int cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status, 291 - void *rp, size_t rp_len) 282 + static int mgmt_cmd_complete(struct sock *sk, u16 index, u16 cmd, u8 status, 283 + void *rp, size_t rp_len) 292 284 { 293 285 struct sk_buff *skb; 294 286 struct mgmt_hdr *hdr; ··· 331 323 rp.version = MGMT_VERSION; 332 324 rp.revision = cpu_to_le16(MGMT_REVISION); 333 325 334 - return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, &rp, 335 - sizeof(rp)); 326 + return mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, 0, 327 + &rp, sizeof(rp)); 336 328 } 337 329 338 330 static int read_commands(struct sock *sk, struct hci_dev *hdev, void *data, ··· 362 354 for (i = 0; i < num_events; i++, opcode++) 363 355 put_unaligned_le16(mgmt_events[i], opcode); 364 356 365 - err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, rp, 366 - rp_size); 357 + err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_COMMANDS, 0, 358 + rp, rp_size); 367 359 kfree(rp); 368 360 369 361 return err; ··· 385 377 count = 0; 386 378 list_for_each_entry(d, &hci_dev_list, list) { 387 379 if (d->dev_type == HCI_BREDR && 388 - !test_bit(HCI_UNCONFIGURED, &d->dev_flags)) 380 + !hci_dev_test_flag(d, HCI_UNCONFIGURED)) 389 381 count++; 390 382 } 391 383 ··· 398 390 399 391 count = 0; 400 392 list_for_each_entry(d, &hci_dev_list, list) { 401 - if (test_bit(HCI_SETUP, &d->dev_flags) || 402 - test_bit(HCI_CONFIG, &d->dev_flags) || 403 - test_bit(HCI_USER_CHANNEL, &d->dev_flags)) 393 + if (hci_dev_test_flag(d, HCI_SETUP) || 394 + hci_dev_test_flag(d, HCI_CONFIG) || 395 + hci_dev_test_flag(d, HCI_USER_CHANNEL)) 404 396 continue; 405 397 406 398 /* Devices marked as raw-only are neither configured ··· 410 402 continue; 411 403 412 404 if (d->dev_type == HCI_BREDR && 413 - !test_bit(HCI_UNCONFIGURED, &d->dev_flags)) { 405 + !hci_dev_test_flag(d, HCI_UNCONFIGURED)) { 414 406 rp->index[count++] = cpu_to_le16(d->id); 415 407 BT_DBG("Added hci%u", d->id); 416 408 } ··· 421 413 422 414 read_unlock(&hci_dev_list_lock); 423 415 424 - err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp, 425 - rp_len); 416 + err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 417 + 0, rp, rp_len); 426 418 427 419 kfree(rp); 428 420 ··· 445 437 count = 0; 446 438 list_for_each_entry(d, &hci_dev_list, list) { 447 439 if (d->dev_type == HCI_BREDR && 448 - test_bit(HCI_UNCONFIGURED, &d->dev_flags)) 440 + hci_dev_test_flag(d, HCI_UNCONFIGURED)) 449 441 count++; 450 442 } 451 443 ··· 458 450 459 451 count = 0; 460 452 list_for_each_entry(d, &hci_dev_list, list) { 461 - if (test_bit(HCI_SETUP, &d->dev_flags) || 462 - test_bit(HCI_CONFIG, &d->dev_flags) || 463 - test_bit(HCI_USER_CHANNEL, &d->dev_flags)) 453 + if (hci_dev_test_flag(d, HCI_SETUP) || 454 + hci_dev_test_flag(d, HCI_CONFIG) || 455 + hci_dev_test_flag(d, HCI_USER_CHANNEL)) 464 456 continue; 465 457 466 458 /* Devices marked as raw-only are neither configured ··· 470 462 continue; 471 463 472 464 if (d->dev_type == HCI_BREDR && 473 - test_bit(HCI_UNCONFIGURED, &d->dev_flags)) { 465 + hci_dev_test_flag(d, HCI_UNCONFIGURED)) { 474 466 rp->index[count++] = cpu_to_le16(d->id); 475 467 BT_DBG("Added hci%u", d->id); 476 468 } ··· 481 473 482 474 read_unlock(&hci_dev_list_lock); 483 475 484 - err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_UNCONF_INDEX_LIST, 485 - 0, rp, rp_len); 476 + err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, 477 + MGMT_OP_READ_UNCONF_INDEX_LIST, 0, rp, rp_len); 486 478 487 479 kfree(rp); 488 480 ··· 492 484 static bool is_configured(struct hci_dev *hdev) 493 485 { 494 486 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) && 495 - !test_bit(HCI_EXT_CONFIGURED, &hdev->dev_flags)) 487 + !hci_dev_test_flag(hdev, HCI_EXT_CONFIGURED)) 496 488 return false; 497 489 498 490 if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) && ··· 507 499 u32 options = 0; 508 500 509 501 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) && 510 - !test_bit(HCI_EXT_CONFIGURED, &hdev->dev_flags)) 502 + !hci_dev_test_flag(hdev, HCI_EXT_CONFIGURED)) 511 503 options |= MGMT_OPTION_EXTERNAL_CONFIG; 512 504 513 505 if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks) && ··· 529 521 { 530 522 __le32 options = get_missing_options(hdev); 531 523 532 - return cmd_complete(sk, hdev->id, opcode, 0, &options, 533 - sizeof(options)); 524 + return mgmt_cmd_complete(sk, hdev->id, opcode, 0, &options, 525 + sizeof(options)); 534 526 } 535 527 536 528 static int read_config_info(struct sock *sk, struct hci_dev *hdev, ··· 557 549 558 550 hci_dev_unlock(hdev); 559 551 560 - return cmd_complete(sk, hdev->id, MGMT_OP_READ_CONFIG_INFO, 0, &rp, 561 - sizeof(rp)); 552 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_CONFIG_INFO, 0, 553 + &rp, sizeof(rp)); 562 554 } 563 555 564 556 static u32 get_supported_settings(struct hci_dev *hdev) ··· 591 583 settings |= MGMT_SETTING_ADVERTISING; 592 584 settings |= MGMT_SETTING_SECURE_CONN; 593 585 settings |= MGMT_SETTING_PRIVACY; 586 + settings |= MGMT_SETTING_STATIC_ADDRESS; 594 587 } 595 588 596 589 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) || ··· 608 599 if (hdev_is_powered(hdev)) 609 600 settings |= MGMT_SETTING_POWERED; 610 601 611 - if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) 602 + if (hci_dev_test_flag(hdev, HCI_CONNECTABLE)) 612 603 settings |= MGMT_SETTING_CONNECTABLE; 613 604 614 - if (test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) 605 + if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) 615 606 settings |= MGMT_SETTING_FAST_CONNECTABLE; 616 607 617 - if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) 608 + if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 618 609 settings |= MGMT_SETTING_DISCOVERABLE; 619 610 620 - if (test_bit(HCI_BONDABLE, &hdev->dev_flags)) 611 + if (hci_dev_test_flag(hdev, HCI_BONDABLE)) 621 612 settings |= MGMT_SETTING_BONDABLE; 622 613 623 - if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 614 + if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 624 615 settings |= MGMT_SETTING_BREDR; 625 616 626 - if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 617 + if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 627 618 settings |= MGMT_SETTING_LE; 628 619 629 - if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags)) 620 + if (hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) 630 621 settings |= MGMT_SETTING_LINK_SECURITY; 631 622 632 - if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) 623 + if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) 633 624 settings |= MGMT_SETTING_SSP; 634 625 635 - if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags)) 626 + if (hci_dev_test_flag(hdev, HCI_HS_ENABLED)) 636 627 settings |= MGMT_SETTING_HS; 637 628 638 - if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) 629 + if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) 639 630 settings |= MGMT_SETTING_ADVERTISING; 640 631 641 - if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) 632 + if (hci_dev_test_flag(hdev, HCI_SC_ENABLED)) 642 633 settings |= MGMT_SETTING_SECURE_CONN; 643 634 644 - if (test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags)) 635 + if (hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) 645 636 settings |= MGMT_SETTING_DEBUG_KEYS; 646 637 647 - if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) 638 + if (hci_dev_test_flag(hdev, HCI_PRIVACY)) 648 639 settings |= MGMT_SETTING_PRIVACY; 640 + 641 + /* The current setting for static address has two purposes. The 642 + * first is to indicate if the static address will be used and 643 + * the second is to indicate if it is actually set. 644 + * 645 + * This means if the static address is not configured, this flag 646 + * will never bet set. If the address is configured, then if the 647 + * address is actually used decides if the flag is set or not. 648 + * 649 + * For single mode LE only controllers and dual-mode controllers 650 + * with BR/EDR disabled, the existence of the static address will 651 + * be evaluated. 652 + */ 653 + if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || 654 + !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) || 655 + !bacmp(&hdev->bdaddr, BDADDR_ANY)) { 656 + if (bacmp(&hdev->static_addr, BDADDR_ANY)) 657 + settings |= MGMT_SETTING_STATIC_ADDRESS; 658 + } 649 659 650 660 return settings; 651 661 } ··· 779 751 return ptr; 780 752 } 781 753 782 - static struct pending_cmd *mgmt_pending_find(u16 opcode, struct hci_dev *hdev) 754 + static struct mgmt_pending_cmd *mgmt_pending_find(u16 opcode, 755 + struct hci_dev *hdev) 783 756 { 784 - struct pending_cmd *cmd; 757 + struct mgmt_pending_cmd *cmd; 785 758 786 759 list_for_each_entry(cmd, &hdev->mgmt_pending, list) { 787 760 if (cmd->opcode == opcode) ··· 792 763 return NULL; 793 764 } 794 765 795 - static struct pending_cmd *mgmt_pending_find_data(u16 opcode, 796 - struct hci_dev *hdev, 797 - const void *data) 766 + static struct mgmt_pending_cmd *mgmt_pending_find_data(u16 opcode, 767 + struct hci_dev *hdev, 768 + const void *data) 798 769 { 799 - struct pending_cmd *cmd; 770 + struct mgmt_pending_cmd *cmd; 800 771 801 772 list_for_each_entry(cmd, &hdev->mgmt_pending, list) { 802 773 if (cmd->user_data != data) ··· 840 811 struct hci_cp_le_set_scan_rsp_data cp; 841 812 u8 len; 842 813 843 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 814 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 844 815 return; 845 816 846 817 memset(&cp, 0, sizeof(cp)); ··· 861 832 862 833 static u8 get_adv_discov_flags(struct hci_dev *hdev) 863 834 { 864 - struct pending_cmd *cmd; 835 + struct mgmt_pending_cmd *cmd; 865 836 866 837 /* If there's a pending mgmt command the flags will not yet have 867 838 * their final values, so check for this first. ··· 874 845 else if (cp->val == 0x02) 875 846 return LE_AD_LIMITED; 876 847 } else { 877 - if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags)) 848 + if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) 878 849 return LE_AD_LIMITED; 879 - else if (test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) 850 + else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) 880 851 return LE_AD_GENERAL; 881 852 } 882 853 ··· 889 860 890 861 flags |= get_adv_discov_flags(hdev); 891 862 892 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 863 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 893 864 flags |= LE_AD_NO_BREDR; 894 865 895 866 if (flags) { ··· 921 892 struct hci_cp_le_set_adv_data cp; 922 893 u8 len; 923 894 924 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 895 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 925 896 return; 926 897 927 898 memset(&cp, 0, sizeof(cp)); ··· 1009 980 if (!lmp_ext_inq_capable(hdev)) 1010 981 return; 1011 982 1012 - if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) 983 + if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) 1013 984 return; 1014 985 1015 - if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) 986 + if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE)) 1016 987 return; 1017 988 1018 989 memset(&cp, 0, sizeof(cp)); ··· 1048 1019 if (!hdev_is_powered(hdev)) 1049 1020 return; 1050 1021 1051 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 1022 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1052 1023 return; 1053 1024 1054 - if (test_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) 1025 + if (hci_dev_test_flag(hdev, HCI_SERVICE_CACHE)) 1055 1026 return; 1056 1027 1057 1028 cod[0] = hdev->minor_class; 1058 1029 cod[1] = hdev->major_class; 1059 1030 cod[2] = get_service_classes(hdev); 1060 1031 1061 - if (test_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags)) 1032 + if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE)) 1062 1033 cod[1] |= 0x20; 1063 1034 1064 1035 if (memcmp(cod, hdev->dev_class, 3) == 0) ··· 1069 1040 1070 1041 static bool get_connectable(struct hci_dev *hdev) 1071 1042 { 1072 - struct pending_cmd *cmd; 1043 + struct mgmt_pending_cmd *cmd; 1073 1044 1074 1045 /* If there's a pending mgmt command the flag will not yet have 1075 1046 * it's final value, so check for this first. ··· 1080 1051 return cp->val; 1081 1052 } 1082 1053 1083 - return test_bit(HCI_CONNECTABLE, &hdev->dev_flags); 1054 + return hci_dev_test_flag(hdev, HCI_CONNECTABLE); 1084 1055 } 1085 1056 1086 1057 static void disable_advertising(struct hci_request *req) ··· 1100 1071 if (hci_conn_num(hdev, LE_LINK) > 0) 1101 1072 return; 1102 1073 1103 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) 1074 + if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 1104 1075 disable_advertising(req); 1105 1076 1106 1077 /* Clear the HCI_LE_ADV bit temporarily so that the ··· 1108 1079 * and write a new random address. The flag will be set back on 1109 1080 * as soon as the SET_ADV_ENABLE HCI command completes. 1110 1081 */ 1111 - clear_bit(HCI_LE_ADV, &hdev->dev_flags); 1082 + hci_dev_clear_flag(hdev, HCI_LE_ADV); 1112 1083 1113 - connectable = get_connectable(hdev); 1084 + if (hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE)) 1085 + connectable = true; 1086 + else 1087 + connectable = get_connectable(hdev); 1114 1088 1115 1089 /* Set require_privacy to true only when non-connectable 1116 1090 * advertising is used. In that case it is fine to use a ··· 1140 1108 service_cache.work); 1141 1109 struct hci_request req; 1142 1110 1143 - if (!test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) 1111 + if (!hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) 1144 1112 return; 1145 1113 1146 1114 hci_req_init(&req, hdev); ··· 1163 1131 1164 1132 BT_DBG(""); 1165 1133 1166 - set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags); 1134 + hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 1167 1135 1168 - if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags)) 1136 + if (!hci_dev_test_flag(hdev, HCI_ADVERTISING)) 1169 1137 return; 1170 1138 1171 1139 /* The generation of a new RPA and programming it into the ··· 1178 1146 1179 1147 static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev) 1180 1148 { 1181 - if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) 1149 + if (hci_dev_test_and_set_flag(hdev, HCI_MGMT)) 1182 1150 return; 1183 1151 1184 1152 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off); ··· 1189 1157 * for mgmt we require user-space to explicitly enable 1190 1158 * it 1191 1159 */ 1192 - clear_bit(HCI_BONDABLE, &hdev->dev_flags); 1160 + hci_dev_clear_flag(hdev, HCI_BONDABLE); 1193 1161 } 1194 1162 1195 1163 static int read_controller_info(struct sock *sk, struct hci_dev *hdev, ··· 1218 1186 1219 1187 hci_dev_unlock(hdev); 1220 1188 1221 - return cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp, 1222 - sizeof(rp)); 1189 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_READ_INFO, 0, &rp, 1190 + sizeof(rp)); 1223 1191 } 1224 1192 1225 - static void mgmt_pending_free(struct pending_cmd *cmd) 1193 + static void mgmt_pending_free(struct mgmt_pending_cmd *cmd) 1226 1194 { 1227 1195 sock_put(cmd->sk); 1228 1196 kfree(cmd->param); 1229 1197 kfree(cmd); 1230 1198 } 1231 1199 1232 - static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode, 1233 - struct hci_dev *hdev, void *data, 1234 - u16 len) 1200 + static struct mgmt_pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode, 1201 + struct hci_dev *hdev, 1202 + void *data, u16 len) 1235 1203 { 1236 - struct pending_cmd *cmd; 1204 + struct mgmt_pending_cmd *cmd; 1237 1205 1238 1206 cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1239 1207 if (!cmd) ··· 1259 1227 } 1260 1228 1261 1229 static void mgmt_pending_foreach(u16 opcode, struct hci_dev *hdev, 1262 - void (*cb)(struct pending_cmd *cmd, 1230 + void (*cb)(struct mgmt_pending_cmd *cmd, 1263 1231 void *data), 1264 1232 void *data) 1265 1233 { 1266 - struct pending_cmd *cmd, *tmp; 1234 + struct mgmt_pending_cmd *cmd, *tmp; 1267 1235 1268 1236 list_for_each_entry_safe(cmd, tmp, &hdev->mgmt_pending, list) { 1269 1237 if (opcode > 0 && cmd->opcode != opcode) ··· 1273 1241 } 1274 1242 } 1275 1243 1276 - static void mgmt_pending_remove(struct pending_cmd *cmd) 1244 + static void mgmt_pending_remove(struct mgmt_pending_cmd *cmd) 1277 1245 { 1278 1246 list_del(&cmd->list); 1279 1247 mgmt_pending_free(cmd); ··· 1283 1251 { 1284 1252 __le32 settings = cpu_to_le32(get_current_settings(hdev)); 1285 1253 1286 - return cmd_complete(sk, hdev->id, opcode, 0, &settings, 1287 - sizeof(settings)); 1254 + return mgmt_cmd_complete(sk, hdev->id, opcode, 0, &settings, 1255 + sizeof(settings)); 1288 1256 } 1289 1257 1290 1258 static void clean_up_hci_complete(struct hci_dev *hdev, u8 status, u16 opcode) ··· 1328 1296 1329 1297 default: 1330 1298 /* Passive scanning */ 1331 - if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) { 1299 + if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { 1332 1300 hci_req_add_le_scan_disable(req); 1333 1301 return true; 1334 1302 } ··· 1354 1322 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); 1355 1323 } 1356 1324 1357 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) 1325 + if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 1358 1326 disable_advertising(&req); 1359 1327 1360 1328 discov_stopped = hci_stop_discovery(&req); ··· 1402 1370 u16 len) 1403 1371 { 1404 1372 struct mgmt_mode *cp = data; 1405 - struct pending_cmd *cmd; 1373 + struct mgmt_pending_cmd *cmd; 1406 1374 int err; 1407 1375 1408 1376 BT_DBG("request for %s", hdev->name); 1409 1377 1410 1378 if (cp->val != 0x00 && cp->val != 0x01) 1411 - return cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1412 - MGMT_STATUS_INVALID_PARAMS); 1379 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1380 + MGMT_STATUS_INVALID_PARAMS); 1413 1381 1414 1382 hci_dev_lock(hdev); 1415 1383 1416 1384 if (mgmt_pending_find(MGMT_OP_SET_POWERED, hdev)) { 1417 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1418 - MGMT_STATUS_BUSY); 1385 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_POWERED, 1386 + MGMT_STATUS_BUSY); 1419 1387 goto failed; 1420 1388 } 1421 1389 1422 - if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) { 1390 + if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) { 1423 1391 cancel_delayed_work(&hdev->power_off); 1424 1392 1425 1393 if (cp->val) { ··· 1484 1452 u8 mgmt_status; 1485 1453 }; 1486 1454 1487 - static void settings_rsp(struct pending_cmd *cmd, void *data) 1455 + static void settings_rsp(struct mgmt_pending_cmd *cmd, void *data) 1488 1456 { 1489 1457 struct cmd_lookup *match = data; 1490 1458 ··· 1500 1468 mgmt_pending_free(cmd); 1501 1469 } 1502 1470 1503 - static void cmd_status_rsp(struct pending_cmd *cmd, void *data) 1471 + static void cmd_status_rsp(struct mgmt_pending_cmd *cmd, void *data) 1504 1472 { 1505 1473 u8 *status = data; 1506 1474 1507 - cmd_status(cmd->sk, cmd->index, cmd->opcode, *status); 1475 + mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, *status); 1508 1476 mgmt_pending_remove(cmd); 1509 1477 } 1510 1478 1511 - static void cmd_complete_rsp(struct pending_cmd *cmd, void *data) 1479 + static void cmd_complete_rsp(struct mgmt_pending_cmd *cmd, void *data) 1512 1480 { 1513 1481 if (cmd->cmd_complete) { 1514 1482 u8 *status = data; ··· 1522 1490 cmd_status_rsp(cmd, data); 1523 1491 } 1524 1492 1525 - static int generic_cmd_complete(struct pending_cmd *cmd, u8 status) 1493 + static int generic_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) 1526 1494 { 1527 - return cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 1528 - cmd->param, cmd->param_len); 1495 + return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 1496 + cmd->param, cmd->param_len); 1529 1497 } 1530 1498 1531 - static int addr_cmd_complete(struct pending_cmd *cmd, u8 status) 1499 + static int addr_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) 1532 1500 { 1533 - return cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, cmd->param, 1534 - sizeof(struct mgmt_addr_info)); 1501 + return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 1502 + cmd->param, sizeof(struct mgmt_addr_info)); 1535 1503 } 1536 1504 1537 1505 static u8 mgmt_bredr_support(struct hci_dev *hdev) 1538 1506 { 1539 1507 if (!lmp_bredr_capable(hdev)) 1540 1508 return MGMT_STATUS_NOT_SUPPORTED; 1541 - else if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 1509 + else if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1542 1510 return MGMT_STATUS_REJECTED; 1543 1511 else 1544 1512 return MGMT_STATUS_SUCCESS; ··· 1548 1516 { 1549 1517 if (!lmp_le_capable(hdev)) 1550 1518 return MGMT_STATUS_NOT_SUPPORTED; 1551 - else if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 1519 + else if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 1552 1520 return MGMT_STATUS_REJECTED; 1553 1521 else 1554 1522 return MGMT_STATUS_SUCCESS; ··· 1557 1525 static void set_discoverable_complete(struct hci_dev *hdev, u8 status, 1558 1526 u16 opcode) 1559 1527 { 1560 - struct pending_cmd *cmd; 1528 + struct mgmt_pending_cmd *cmd; 1561 1529 struct mgmt_mode *cp; 1562 1530 struct hci_request req; 1563 1531 bool changed; ··· 1572 1540 1573 1541 if (status) { 1574 1542 u8 mgmt_err = mgmt_status(status); 1575 - cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 1576 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1543 + mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 1544 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1577 1545 goto remove_cmd; 1578 1546 } 1579 1547 1580 1548 cp = cmd->param; 1581 1549 if (cp->val) { 1582 - changed = !test_and_set_bit(HCI_DISCOVERABLE, 1583 - &hdev->dev_flags); 1550 + changed = !hci_dev_test_and_set_flag(hdev, HCI_DISCOVERABLE); 1584 1551 1585 1552 if (hdev->discov_timeout > 0) { 1586 1553 int to = msecs_to_jiffies(hdev->discov_timeout * 1000); ··· 1587 1556 to); 1588 1557 } 1589 1558 } else { 1590 - changed = test_and_clear_bit(HCI_DISCOVERABLE, 1591 - &hdev->dev_flags); 1559 + changed = hci_dev_test_and_clear_flag(hdev, HCI_DISCOVERABLE); 1592 1560 } 1593 1561 1594 1562 send_settings_rsp(cmd->sk, MGMT_OP_SET_DISCOVERABLE, hdev); ··· 1616 1586 u16 len) 1617 1587 { 1618 1588 struct mgmt_cp_set_discoverable *cp = data; 1619 - struct pending_cmd *cmd; 1589 + struct mgmt_pending_cmd *cmd; 1620 1590 struct hci_request req; 1621 1591 u16 timeout; 1622 1592 u8 scan; ··· 1624 1594 1625 1595 BT_DBG("request for %s", hdev->name); 1626 1596 1627 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) && 1628 - !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 1629 - return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1630 - MGMT_STATUS_REJECTED); 1597 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) && 1598 + !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1599 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1600 + MGMT_STATUS_REJECTED); 1631 1601 1632 1602 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 1633 - return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1634 - MGMT_STATUS_INVALID_PARAMS); 1603 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1604 + MGMT_STATUS_INVALID_PARAMS); 1635 1605 1636 1606 timeout = __le16_to_cpu(cp->timeout); 1637 1607 ··· 1640 1610 */ 1641 1611 if ((cp->val == 0x00 && timeout > 0) || 1642 1612 (cp->val == 0x02 && timeout == 0)) 1643 - return cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1644 - MGMT_STATUS_INVALID_PARAMS); 1613 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1614 + MGMT_STATUS_INVALID_PARAMS); 1645 1615 1646 1616 hci_dev_lock(hdev); 1647 1617 1648 1618 if (!hdev_is_powered(hdev) && timeout > 0) { 1649 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1650 - MGMT_STATUS_NOT_POWERED); 1619 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1620 + MGMT_STATUS_NOT_POWERED); 1651 1621 goto failed; 1652 1622 } 1653 1623 1654 1624 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) || 1655 1625 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) { 1656 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1657 - MGMT_STATUS_BUSY); 1626 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1627 + MGMT_STATUS_BUSY); 1658 1628 goto failed; 1659 1629 } 1660 1630 1661 - if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) { 1662 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1663 - MGMT_STATUS_REJECTED); 1631 + if (!hci_dev_test_flag(hdev, HCI_CONNECTABLE)) { 1632 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DISCOVERABLE, 1633 + MGMT_STATUS_REJECTED); 1664 1634 goto failed; 1665 1635 } 1666 1636 ··· 1671 1641 * not a valid operation since it requires a timeout 1672 1642 * and so no need to check HCI_LIMITED_DISCOVERABLE. 1673 1643 */ 1674 - if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) { 1675 - change_bit(HCI_DISCOVERABLE, &hdev->dev_flags); 1644 + if (!!cp->val != hci_dev_test_flag(hdev, HCI_DISCOVERABLE)) { 1645 + hci_dev_change_flag(hdev, HCI_DISCOVERABLE); 1676 1646 changed = true; 1677 1647 } 1678 1648 ··· 1690 1660 * value with the new value. And if only the timeout gets updated, 1691 1661 * then no need for any HCI transactions. 1692 1662 */ 1693 - if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags) && 1694 - (cp->val == 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE, 1695 - &hdev->dev_flags)) { 1663 + if (!!cp->val == hci_dev_test_flag(hdev, HCI_DISCOVERABLE) && 1664 + (cp->val == 0x02) == hci_dev_test_flag(hdev, 1665 + HCI_LIMITED_DISCOVERABLE)) { 1696 1666 cancel_delayed_work(&hdev->discov_off); 1697 1667 hdev->discov_timeout = timeout; 1698 1668 ··· 1721 1691 1722 1692 /* Limited discoverable mode */ 1723 1693 if (cp->val == 0x02) 1724 - set_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1694 + hci_dev_set_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1725 1695 else 1726 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1696 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1727 1697 1728 1698 hci_req_init(&req, hdev); 1729 1699 1730 1700 /* The procedure for LE-only controllers is much simpler - just 1731 1701 * update the advertising data. 1732 1702 */ 1733 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 1703 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1734 1704 goto update_ad; 1735 1705 1736 1706 scan = SCAN_PAGE; ··· 1760 1730 1761 1731 scan |= SCAN_INQUIRY; 1762 1732 } else { 1763 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1733 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1764 1734 } 1765 1735 1766 1736 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, sizeof(scan), &scan); ··· 1783 1753 struct hci_cp_write_page_scan_activity acp; 1784 1754 u8 type; 1785 1755 1786 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 1756 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1787 1757 return; 1788 1758 1789 1759 if (hdev->hci_ver < BLUETOOTH_VER_1_2) ··· 1815 1785 static void set_connectable_complete(struct hci_dev *hdev, u8 status, 1816 1786 u16 opcode) 1817 1787 { 1818 - struct pending_cmd *cmd; 1788 + struct mgmt_pending_cmd *cmd; 1819 1789 struct mgmt_mode *cp; 1820 1790 bool conn_changed, discov_changed; 1821 1791 ··· 1829 1799 1830 1800 if (status) { 1831 1801 u8 mgmt_err = mgmt_status(status); 1832 - cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 1802 + mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 1833 1803 goto remove_cmd; 1834 1804 } 1835 1805 1836 1806 cp = cmd->param; 1837 1807 if (cp->val) { 1838 - conn_changed = !test_and_set_bit(HCI_CONNECTABLE, 1839 - &hdev->dev_flags); 1808 + conn_changed = !hci_dev_test_and_set_flag(hdev, 1809 + HCI_CONNECTABLE); 1840 1810 discov_changed = false; 1841 1811 } else { 1842 - conn_changed = test_and_clear_bit(HCI_CONNECTABLE, 1843 - &hdev->dev_flags); 1844 - discov_changed = test_and_clear_bit(HCI_DISCOVERABLE, 1845 - &hdev->dev_flags); 1812 + conn_changed = hci_dev_test_and_clear_flag(hdev, 1813 + HCI_CONNECTABLE); 1814 + discov_changed = hci_dev_test_and_clear_flag(hdev, 1815 + HCI_DISCOVERABLE); 1846 1816 } 1847 1817 1848 1818 send_settings_rsp(cmd->sk, MGMT_OP_SET_CONNECTABLE, hdev); ··· 1868 1838 bool changed = false; 1869 1839 int err; 1870 1840 1871 - if (!!val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) 1841 + if (!!val != hci_dev_test_flag(hdev, HCI_CONNECTABLE)) 1872 1842 changed = true; 1873 1843 1874 1844 if (val) { 1875 - set_bit(HCI_CONNECTABLE, &hdev->dev_flags); 1845 + hci_dev_set_flag(hdev, HCI_CONNECTABLE); 1876 1846 } else { 1877 - clear_bit(HCI_CONNECTABLE, &hdev->dev_flags); 1878 - clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags); 1847 + hci_dev_clear_flag(hdev, HCI_CONNECTABLE); 1848 + hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1879 1849 } 1880 1850 1881 1851 err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev); ··· 1895 1865 u16 len) 1896 1866 { 1897 1867 struct mgmt_mode *cp = data; 1898 - struct pending_cmd *cmd; 1868 + struct mgmt_pending_cmd *cmd; 1899 1869 struct hci_request req; 1900 1870 u8 scan; 1901 1871 int err; 1902 1872 1903 1873 BT_DBG("request for %s", hdev->name); 1904 1874 1905 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags) && 1906 - !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 1907 - return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1908 - MGMT_STATUS_REJECTED); 1875 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED) && 1876 + !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 1877 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1878 + MGMT_STATUS_REJECTED); 1909 1879 1910 1880 if (cp->val != 0x00 && cp->val != 0x01) 1911 - return cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1912 - MGMT_STATUS_INVALID_PARAMS); 1881 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1882 + MGMT_STATUS_INVALID_PARAMS); 1913 1883 1914 1884 hci_dev_lock(hdev); 1915 1885 ··· 1920 1890 1921 1891 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, hdev) || 1922 1892 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, hdev)) { 1923 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1924 - MGMT_STATUS_BUSY); 1893 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_CONNECTABLE, 1894 + MGMT_STATUS_BUSY); 1925 1895 goto failed; 1926 1896 } 1927 1897 ··· 1937 1907 * by-product of disabling connectable, we need to update the 1938 1908 * advertising flags. 1939 1909 */ 1940 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 1910 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 1941 1911 if (!cp->val) { 1942 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 1943 - clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags); 1912 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 1913 + hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 1944 1914 } 1945 1915 update_adv_data(&req); 1946 1916 } else if (cp->val != test_bit(HCI_PSCAN, &hdev->flags)) { ··· 1969 1939 } 1970 1940 1971 1941 no_scan_update: 1972 - /* If we're going from non-connectable to connectable or 1973 - * vice-versa when fast connectable is enabled ensure that fast 1974 - * connectable gets disabled. write_fast_connectable won't do 1975 - * anything if the page scan parameters are already what they 1976 - * should be. 1977 - */ 1978 - if (cp->val || test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) 1979 - write_fast_connectable(&req, false); 1980 - 1981 1942 /* Update the advertising parameters if necessary */ 1982 - if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) 1943 + if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) 1983 1944 enable_advertising(&req); 1984 1945 1985 1946 err = hci_req_run(&req, set_connectable_complete); ··· 1997 1976 BT_DBG("request for %s", hdev->name); 1998 1977 1999 1978 if (cp->val != 0x00 && cp->val != 0x01) 2000 - return cmd_status(sk, hdev->id, MGMT_OP_SET_BONDABLE, 2001 - MGMT_STATUS_INVALID_PARAMS); 1979 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BONDABLE, 1980 + MGMT_STATUS_INVALID_PARAMS); 2002 1981 2003 1982 hci_dev_lock(hdev); 2004 1983 2005 1984 if (cp->val) 2006 - changed = !test_and_set_bit(HCI_BONDABLE, &hdev->dev_flags); 1985 + changed = !hci_dev_test_and_set_flag(hdev, HCI_BONDABLE); 2007 1986 else 2008 - changed = test_and_clear_bit(HCI_BONDABLE, &hdev->dev_flags); 1987 + changed = hci_dev_test_and_clear_flag(hdev, HCI_BONDABLE); 2009 1988 2010 1989 err = send_settings_rsp(sk, MGMT_OP_SET_BONDABLE, hdev); 2011 1990 if (err < 0) ··· 2023 2002 u16 len) 2024 2003 { 2025 2004 struct mgmt_mode *cp = data; 2026 - struct pending_cmd *cmd; 2005 + struct mgmt_pending_cmd *cmd; 2027 2006 u8 val, status; 2028 2007 int err; 2029 2008 ··· 2031 2010 2032 2011 status = mgmt_bredr_support(hdev); 2033 2012 if (status) 2034 - return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 2035 - status); 2013 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 2014 + status); 2036 2015 2037 2016 if (cp->val != 0x00 && cp->val != 0x01) 2038 - return cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 2039 - MGMT_STATUS_INVALID_PARAMS); 2017 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 2018 + MGMT_STATUS_INVALID_PARAMS); 2040 2019 2041 2020 hci_dev_lock(hdev); 2042 2021 2043 2022 if (!hdev_is_powered(hdev)) { 2044 2023 bool changed = false; 2045 2024 2046 - if (!!cp->val != test_bit(HCI_LINK_SECURITY, 2047 - &hdev->dev_flags)) { 2048 - change_bit(HCI_LINK_SECURITY, &hdev->dev_flags); 2025 + if (!!cp->val != hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) { 2026 + hci_dev_change_flag(hdev, HCI_LINK_SECURITY); 2049 2027 changed = true; 2050 2028 } 2051 2029 ··· 2059 2039 } 2060 2040 2061 2041 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY, hdev)) { 2062 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 2063 - MGMT_STATUS_BUSY); 2042 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LINK_SECURITY, 2043 + MGMT_STATUS_BUSY); 2064 2044 goto failed; 2065 2045 } 2066 2046 ··· 2091 2071 static int set_ssp(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2092 2072 { 2093 2073 struct mgmt_mode *cp = data; 2094 - struct pending_cmd *cmd; 2074 + struct mgmt_pending_cmd *cmd; 2095 2075 u8 status; 2096 2076 int err; 2097 2077 ··· 2099 2079 2100 2080 status = mgmt_bredr_support(hdev); 2101 2081 if (status) 2102 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status); 2082 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, status); 2103 2083 2104 2084 if (!lmp_ssp_capable(hdev)) 2105 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2106 - MGMT_STATUS_NOT_SUPPORTED); 2085 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2086 + MGMT_STATUS_NOT_SUPPORTED); 2107 2087 2108 2088 if (cp->val != 0x00 && cp->val != 0x01) 2109 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2110 - MGMT_STATUS_INVALID_PARAMS); 2089 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2090 + MGMT_STATUS_INVALID_PARAMS); 2111 2091 2112 2092 hci_dev_lock(hdev); 2113 2093 ··· 2115 2095 bool changed; 2116 2096 2117 2097 if (cp->val) { 2118 - changed = !test_and_set_bit(HCI_SSP_ENABLED, 2119 - &hdev->dev_flags); 2098 + changed = !hci_dev_test_and_set_flag(hdev, 2099 + HCI_SSP_ENABLED); 2120 2100 } else { 2121 - changed = test_and_clear_bit(HCI_SSP_ENABLED, 2122 - &hdev->dev_flags); 2101 + changed = hci_dev_test_and_clear_flag(hdev, 2102 + HCI_SSP_ENABLED); 2123 2103 if (!changed) 2124 - changed = test_and_clear_bit(HCI_HS_ENABLED, 2125 - &hdev->dev_flags); 2104 + changed = hci_dev_test_and_clear_flag(hdev, 2105 + HCI_HS_ENABLED); 2126 2106 else 2127 - clear_bit(HCI_HS_ENABLED, &hdev->dev_flags); 2107 + hci_dev_clear_flag(hdev, HCI_HS_ENABLED); 2128 2108 } 2129 2109 2130 2110 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev); ··· 2138 2118 } 2139 2119 2140 2120 if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev)) { 2141 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2142 - MGMT_STATUS_BUSY); 2121 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SSP, 2122 + MGMT_STATUS_BUSY); 2143 2123 goto failed; 2144 2124 } 2145 2125 2146 - if (!!cp->val == test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { 2126 + if (!!cp->val == hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 2147 2127 err = send_settings_rsp(sk, MGMT_OP_SET_SSP, hdev); 2148 2128 goto failed; 2149 2129 } ··· 2154 2134 goto failed; 2155 2135 } 2156 2136 2157 - if (!cp->val && test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags)) 2137 + if (!cp->val && hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) 2158 2138 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE, 2159 2139 sizeof(cp->val), &cp->val); 2160 2140 ··· 2180 2160 2181 2161 status = mgmt_bredr_support(hdev); 2182 2162 if (status) 2183 - return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, status); 2163 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, status); 2184 2164 2185 2165 if (!lmp_ssp_capable(hdev)) 2186 - return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2187 - MGMT_STATUS_NOT_SUPPORTED); 2166 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2167 + MGMT_STATUS_NOT_SUPPORTED); 2188 2168 2189 - if (!test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) 2190 - return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2191 - MGMT_STATUS_REJECTED); 2169 + if (!hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) 2170 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2171 + MGMT_STATUS_REJECTED); 2192 2172 2193 2173 if (cp->val != 0x00 && cp->val != 0x01) 2194 - return cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2195 - MGMT_STATUS_INVALID_PARAMS); 2174 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2175 + MGMT_STATUS_INVALID_PARAMS); 2196 2176 2197 2177 hci_dev_lock(hdev); 2198 2178 2199 2179 if (mgmt_pending_find(MGMT_OP_SET_SSP, hdev)) { 2200 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2201 - MGMT_STATUS_BUSY); 2180 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2181 + MGMT_STATUS_BUSY); 2202 2182 goto unlock; 2203 2183 } 2204 2184 2205 2185 if (cp->val) { 2206 - changed = !test_and_set_bit(HCI_HS_ENABLED, &hdev->dev_flags); 2186 + changed = !hci_dev_test_and_set_flag(hdev, HCI_HS_ENABLED); 2207 2187 } else { 2208 2188 if (hdev_is_powered(hdev)) { 2209 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2210 - MGMT_STATUS_REJECTED); 2189 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_HS, 2190 + MGMT_STATUS_REJECTED); 2211 2191 goto unlock; 2212 2192 } 2213 2193 2214 - changed = test_and_clear_bit(HCI_HS_ENABLED, &hdev->dev_flags); 2194 + changed = hci_dev_test_and_clear_flag(hdev, HCI_HS_ENABLED); 2215 2195 } 2216 2196 2217 2197 err = send_settings_rsp(sk, MGMT_OP_SET_HS, hdev); ··· 2252 2232 * has actually been enabled. During power on, the 2253 2233 * update in powered_update_hci will take care of it. 2254 2234 */ 2255 - if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { 2235 + if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 2256 2236 struct hci_request req; 2257 2237 2258 2238 hci_req_init(&req, hdev); ··· 2270 2250 { 2271 2251 struct mgmt_mode *cp = data; 2272 2252 struct hci_cp_write_le_host_supported hci_cp; 2273 - struct pending_cmd *cmd; 2253 + struct mgmt_pending_cmd *cmd; 2274 2254 struct hci_request req; 2275 2255 int err; 2276 2256 u8 val, enabled; ··· 2278 2258 BT_DBG("request for %s", hdev->name); 2279 2259 2280 2260 if (!lmp_le_capable(hdev)) 2281 - return cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2282 - MGMT_STATUS_NOT_SUPPORTED); 2261 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2262 + MGMT_STATUS_NOT_SUPPORTED); 2283 2263 2284 2264 if (cp->val != 0x00 && cp->val != 0x01) 2285 - return cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2286 - MGMT_STATUS_INVALID_PARAMS); 2265 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2266 + MGMT_STATUS_INVALID_PARAMS); 2287 2267 2288 2268 /* LE-only devices do not allow toggling LE on/off */ 2289 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) 2290 - return cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2291 - MGMT_STATUS_REJECTED); 2269 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) 2270 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2271 + MGMT_STATUS_REJECTED); 2292 2272 2293 2273 hci_dev_lock(hdev); 2294 2274 ··· 2298 2278 if (!hdev_is_powered(hdev) || val == enabled) { 2299 2279 bool changed = false; 2300 2280 2301 - if (val != test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { 2302 - change_bit(HCI_LE_ENABLED, &hdev->dev_flags); 2281 + if (val != hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 2282 + hci_dev_change_flag(hdev, HCI_LE_ENABLED); 2303 2283 changed = true; 2304 2284 } 2305 2285 2306 - if (!val && test_bit(HCI_ADVERTISING, &hdev->dev_flags)) { 2307 - clear_bit(HCI_ADVERTISING, &hdev->dev_flags); 2286 + if (!val && hci_dev_test_flag(hdev, HCI_ADVERTISING)) { 2287 + hci_dev_clear_flag(hdev, HCI_ADVERTISING); 2308 2288 changed = true; 2309 2289 } 2310 2290 ··· 2320 2300 2321 2301 if (mgmt_pending_find(MGMT_OP_SET_LE, hdev) || 2322 2302 mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev)) { 2323 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2324 - MGMT_STATUS_BUSY); 2303 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_LE, 2304 + MGMT_STATUS_BUSY); 2325 2305 goto unlock; 2326 2306 } 2327 2307 ··· 2339 2319 hci_cp.le = val; 2340 2320 hci_cp.simul = 0x00; 2341 2321 } else { 2342 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) 2322 + if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 2343 2323 disable_advertising(&req); 2344 2324 } 2345 2325 ··· 2363 2343 */ 2364 2344 static bool pending_eir_or_class(struct hci_dev *hdev) 2365 2345 { 2366 - struct pending_cmd *cmd; 2346 + struct mgmt_pending_cmd *cmd; 2367 2347 2368 2348 list_for_each_entry(cmd, &hdev->mgmt_pending, list) { 2369 2349 switch (cmd->opcode) { ··· 2399 2379 2400 2380 static void mgmt_class_complete(struct hci_dev *hdev, u16 mgmt_op, u8 status) 2401 2381 { 2402 - struct pending_cmd *cmd; 2382 + struct mgmt_pending_cmd *cmd; 2403 2383 2404 2384 hci_dev_lock(hdev); 2405 2385 ··· 2407 2387 if (!cmd) 2408 2388 goto unlock; 2409 2389 2410 - cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status), 2411 - hdev->dev_class, 3); 2390 + mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, 2391 + mgmt_status(status), hdev->dev_class, 3); 2412 2392 2413 2393 mgmt_pending_remove(cmd); 2414 2394 ··· 2426 2406 static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 2427 2407 { 2428 2408 struct mgmt_cp_add_uuid *cp = data; 2429 - struct pending_cmd *cmd; 2409 + struct mgmt_pending_cmd *cmd; 2430 2410 struct hci_request req; 2431 2411 struct bt_uuid *uuid; 2432 2412 int err; ··· 2436 2416 hci_dev_lock(hdev); 2437 2417 2438 2418 if (pending_eir_or_class(hdev)) { 2439 - err = cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID, 2440 - MGMT_STATUS_BUSY); 2419 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_UUID, 2420 + MGMT_STATUS_BUSY); 2441 2421 goto failed; 2442 2422 } 2443 2423 ··· 2463 2443 if (err != -ENODATA) 2464 2444 goto failed; 2465 2445 2466 - err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0, 2467 - hdev->dev_class, 3); 2446 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_UUID, 0, 2447 + hdev->dev_class, 3); 2468 2448 goto failed; 2469 2449 } 2470 2450 ··· 2486 2466 if (!hdev_is_powered(hdev)) 2487 2467 return false; 2488 2468 2489 - if (!test_and_set_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) { 2469 + if (!hci_dev_test_and_set_flag(hdev, HCI_SERVICE_CACHE)) { 2490 2470 queue_delayed_work(hdev->workqueue, &hdev->service_cache, 2491 2471 CACHE_TIMEOUT); 2492 2472 return true; ··· 2506 2486 u16 len) 2507 2487 { 2508 2488 struct mgmt_cp_remove_uuid *cp = data; 2509 - struct pending_cmd *cmd; 2489 + struct mgmt_pending_cmd *cmd; 2510 2490 struct bt_uuid *match, *tmp; 2511 2491 u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 2512 2492 struct hci_request req; ··· 2517 2497 hci_dev_lock(hdev); 2518 2498 2519 2499 if (pending_eir_or_class(hdev)) { 2520 - err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2521 - MGMT_STATUS_BUSY); 2500 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2501 + MGMT_STATUS_BUSY); 2522 2502 goto unlock; 2523 2503 } 2524 2504 ··· 2526 2506 hci_uuids_clear(hdev); 2527 2507 2528 2508 if (enable_service_cache(hdev)) { 2529 - err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2530 - 0, hdev->dev_class, 3); 2509 + err = mgmt_cmd_complete(sk, hdev->id, 2510 + MGMT_OP_REMOVE_UUID, 2511 + 0, hdev->dev_class, 3); 2531 2512 goto unlock; 2532 2513 } 2533 2514 ··· 2547 2526 } 2548 2527 2549 2528 if (found == 0) { 2550 - err = cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2551 - MGMT_STATUS_INVALID_PARAMS); 2529 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_REMOVE_UUID, 2530 + MGMT_STATUS_INVALID_PARAMS); 2552 2531 goto unlock; 2553 2532 } 2554 2533 ··· 2563 2542 if (err != -ENODATA) 2564 2543 goto unlock; 2565 2544 2566 - err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0, 2567 - hdev->dev_class, 3); 2545 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_UUID, 0, 2546 + hdev->dev_class, 3); 2568 2547 goto unlock; 2569 2548 } 2570 2549 ··· 2592 2571 u16 len) 2593 2572 { 2594 2573 struct mgmt_cp_set_dev_class *cp = data; 2595 - struct pending_cmd *cmd; 2574 + struct mgmt_pending_cmd *cmd; 2596 2575 struct hci_request req; 2597 2576 int err; 2598 2577 2599 2578 BT_DBG("request for %s", hdev->name); 2600 2579 2601 2580 if (!lmp_bredr_capable(hdev)) 2602 - return cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2603 - MGMT_STATUS_NOT_SUPPORTED); 2581 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2582 + MGMT_STATUS_NOT_SUPPORTED); 2604 2583 2605 2584 hci_dev_lock(hdev); 2606 2585 2607 2586 if (pending_eir_or_class(hdev)) { 2608 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2609 - MGMT_STATUS_BUSY); 2587 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2588 + MGMT_STATUS_BUSY); 2610 2589 goto unlock; 2611 2590 } 2612 2591 2613 2592 if ((cp->minor & 0x03) != 0 || (cp->major & 0xe0) != 0) { 2614 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2615 - MGMT_STATUS_INVALID_PARAMS); 2593 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 2594 + MGMT_STATUS_INVALID_PARAMS); 2616 2595 goto unlock; 2617 2596 } 2618 2597 ··· 2620 2599 hdev->minor_class = cp->minor; 2621 2600 2622 2601 if (!hdev_is_powered(hdev)) { 2623 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0, 2624 - hdev->dev_class, 3); 2602 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0, 2603 + hdev->dev_class, 3); 2625 2604 goto unlock; 2626 2605 } 2627 2606 2628 2607 hci_req_init(&req, hdev); 2629 2608 2630 - if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags)) { 2609 + if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) { 2631 2610 hci_dev_unlock(hdev); 2632 2611 cancel_delayed_work_sync(&hdev->service_cache); 2633 2612 hci_dev_lock(hdev); ··· 2641 2620 if (err != -ENODATA) 2642 2621 goto unlock; 2643 2622 2644 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0, 2645 - hdev->dev_class, 3); 2623 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_CLASS, 0, 2624 + hdev->dev_class, 3); 2646 2625 goto unlock; 2647 2626 } 2648 2627 ··· 2672 2651 BT_DBG("request for %s", hdev->name); 2673 2652 2674 2653 if (!lmp_bredr_capable(hdev)) 2675 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2676 - MGMT_STATUS_NOT_SUPPORTED); 2654 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2655 + MGMT_STATUS_NOT_SUPPORTED); 2677 2656 2678 2657 key_count = __le16_to_cpu(cp->key_count); 2679 2658 if (key_count > max_key_count) { 2680 2659 BT_ERR("load_link_keys: too big key_count value %u", 2681 2660 key_count); 2682 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2683 - MGMT_STATUS_INVALID_PARAMS); 2661 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2662 + MGMT_STATUS_INVALID_PARAMS); 2684 2663 } 2685 2664 2686 2665 expected_len = sizeof(*cp) + key_count * ··· 2688 2667 if (expected_len != len) { 2689 2668 BT_ERR("load_link_keys: expected %u bytes, got %u bytes", 2690 2669 expected_len, len); 2691 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2692 - MGMT_STATUS_INVALID_PARAMS); 2670 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2671 + MGMT_STATUS_INVALID_PARAMS); 2693 2672 } 2694 2673 2695 2674 if (cp->debug_keys != 0x00 && cp->debug_keys != 0x01) 2696 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2697 - MGMT_STATUS_INVALID_PARAMS); 2675 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2676 + MGMT_STATUS_INVALID_PARAMS); 2698 2677 2699 2678 BT_DBG("%s debug_keys %u key_count %u", hdev->name, cp->debug_keys, 2700 2679 key_count); ··· 2703 2682 struct mgmt_link_key_info *key = &cp->keys[i]; 2704 2683 2705 2684 if (key->addr.type != BDADDR_BREDR || key->type > 0x08) 2706 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 2707 - MGMT_STATUS_INVALID_PARAMS); 2685 + return mgmt_cmd_status(sk, hdev->id, 2686 + MGMT_OP_LOAD_LINK_KEYS, 2687 + MGMT_STATUS_INVALID_PARAMS); 2708 2688 } 2709 2689 2710 2690 hci_dev_lock(hdev); ··· 2713 2691 hci_link_keys_clear(hdev); 2714 2692 2715 2693 if (cp->debug_keys) 2716 - changed = !test_and_set_bit(HCI_KEEP_DEBUG_KEYS, 2717 - &hdev->dev_flags); 2694 + changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS); 2718 2695 else 2719 - changed = test_and_clear_bit(HCI_KEEP_DEBUG_KEYS, 2720 - &hdev->dev_flags); 2696 + changed = hci_dev_test_and_clear_flag(hdev, 2697 + HCI_KEEP_DEBUG_KEYS); 2721 2698 2722 2699 if (changed) 2723 2700 new_settings(hdev, NULL); ··· 2734 2713 key->type, key->pin_len, NULL); 2735 2714 } 2736 2715 2737 - cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0); 2716 + mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LINK_KEYS, 0, NULL, 0); 2738 2717 2739 2718 hci_dev_unlock(hdev); 2740 2719 ··· 2759 2738 struct mgmt_cp_unpair_device *cp = data; 2760 2739 struct mgmt_rp_unpair_device rp; 2761 2740 struct hci_cp_disconnect dc; 2762 - struct pending_cmd *cmd; 2741 + struct mgmt_pending_cmd *cmd; 2763 2742 struct hci_conn *conn; 2764 2743 int err; 2765 2744 ··· 2768 2747 rp.addr.type = cp->addr.type; 2769 2748 2770 2749 if (!bdaddr_type_is_valid(cp->addr.type)) 2771 - return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2772 - MGMT_STATUS_INVALID_PARAMS, 2773 - &rp, sizeof(rp)); 2750 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2751 + MGMT_STATUS_INVALID_PARAMS, 2752 + &rp, sizeof(rp)); 2774 2753 2775 2754 if (cp->disconnect != 0x00 && cp->disconnect != 0x01) 2776 - return cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2777 - MGMT_STATUS_INVALID_PARAMS, 2778 - &rp, sizeof(rp)); 2755 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2756 + MGMT_STATUS_INVALID_PARAMS, 2757 + &rp, sizeof(rp)); 2779 2758 2780 2759 hci_dev_lock(hdev); 2781 2760 2782 2761 if (!hdev_is_powered(hdev)) { 2783 - err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2784 - MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp)); 2762 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2763 + MGMT_STATUS_NOT_POWERED, &rp, 2764 + sizeof(rp)); 2785 2765 goto unlock; 2786 2766 } 2787 2767 ··· 2832 2810 } 2833 2811 2834 2812 if (err < 0) { 2835 - err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2836 - MGMT_STATUS_NOT_PAIRED, &rp, sizeof(rp)); 2813 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 2814 + MGMT_STATUS_NOT_PAIRED, &rp, 2815 + sizeof(rp)); 2837 2816 goto unlock; 2838 2817 } 2839 2818 ··· 2842 2819 * link is requested. 2843 2820 */ 2844 2821 if (!conn) { 2845 - err = cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0, 2846 - &rp, sizeof(rp)); 2822 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE, 0, 2823 + &rp, sizeof(rp)); 2847 2824 device_unpaired(hdev, &cp->addr.bdaddr, cp->addr.type, sk); 2848 2825 goto unlock; 2849 2826 } ··· 2873 2850 { 2874 2851 struct mgmt_cp_disconnect *cp = data; 2875 2852 struct mgmt_rp_disconnect rp; 2876 - struct pending_cmd *cmd; 2853 + struct mgmt_pending_cmd *cmd; 2877 2854 struct hci_conn *conn; 2878 2855 int err; 2879 2856 ··· 2884 2861 rp.addr.type = cp->addr.type; 2885 2862 2886 2863 if (!bdaddr_type_is_valid(cp->addr.type)) 2887 - return cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2888 - MGMT_STATUS_INVALID_PARAMS, 2889 - &rp, sizeof(rp)); 2864 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2865 + MGMT_STATUS_INVALID_PARAMS, 2866 + &rp, sizeof(rp)); 2890 2867 2891 2868 hci_dev_lock(hdev); 2892 2869 2893 2870 if (!test_bit(HCI_UP, &hdev->flags)) { 2894 - err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2895 - MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp)); 2871 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2872 + MGMT_STATUS_NOT_POWERED, &rp, 2873 + sizeof(rp)); 2896 2874 goto failed; 2897 2875 } 2898 2876 2899 2877 if (mgmt_pending_find(MGMT_OP_DISCONNECT, hdev)) { 2900 - err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2901 - MGMT_STATUS_BUSY, &rp, sizeof(rp)); 2878 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2879 + MGMT_STATUS_BUSY, &rp, sizeof(rp)); 2902 2880 goto failed; 2903 2881 } 2904 2882 ··· 2910 2886 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr); 2911 2887 2912 2888 if (!conn || conn->state == BT_OPEN || conn->state == BT_CLOSED) { 2913 - err = cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2914 - MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp)); 2889 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_DISCONNECT, 2890 + MGMT_STATUS_NOT_CONNECTED, &rp, 2891 + sizeof(rp)); 2915 2892 goto failed; 2916 2893 } 2917 2894 ··· 2966 2941 hci_dev_lock(hdev); 2967 2942 2968 2943 if (!hdev_is_powered(hdev)) { 2969 - err = cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 2970 - MGMT_STATUS_NOT_POWERED); 2944 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 2945 + MGMT_STATUS_NOT_POWERED); 2971 2946 goto unlock; 2972 2947 } 2973 2948 ··· 3000 2975 /* Recalculate length in case of filtered SCO connections, etc */ 3001 2976 rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info)); 3002 2977 3003 - err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp, 3004 - rp_len); 2978 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONNECTIONS, 0, rp, 2979 + rp_len); 3005 2980 3006 2981 kfree(rp); 3007 2982 ··· 3013 2988 static int send_pin_code_neg_reply(struct sock *sk, struct hci_dev *hdev, 3014 2989 struct mgmt_cp_pin_code_neg_reply *cp) 3015 2990 { 3016 - struct pending_cmd *cmd; 2991 + struct mgmt_pending_cmd *cmd; 3017 2992 int err; 3018 2993 3019 2994 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, hdev, cp, ··· 3035 3010 struct hci_conn *conn; 3036 3011 struct mgmt_cp_pin_code_reply *cp = data; 3037 3012 struct hci_cp_pin_code_reply reply; 3038 - struct pending_cmd *cmd; 3013 + struct mgmt_pending_cmd *cmd; 3039 3014 int err; 3040 3015 3041 3016 BT_DBG(""); ··· 3043 3018 hci_dev_lock(hdev); 3044 3019 3045 3020 if (!hdev_is_powered(hdev)) { 3046 - err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3047 - MGMT_STATUS_NOT_POWERED); 3021 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3022 + MGMT_STATUS_NOT_POWERED); 3048 3023 goto failed; 3049 3024 } 3050 3025 3051 3026 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->addr.bdaddr); 3052 3027 if (!conn) { 3053 - err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3054 - MGMT_STATUS_NOT_CONNECTED); 3028 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3029 + MGMT_STATUS_NOT_CONNECTED); 3055 3030 goto failed; 3056 3031 } 3057 3032 ··· 3064 3039 3065 3040 err = send_pin_code_neg_reply(sk, hdev, &ncp); 3066 3041 if (err >= 0) 3067 - err = cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3068 - MGMT_STATUS_INVALID_PARAMS); 3042 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_PIN_CODE_REPLY, 3043 + MGMT_STATUS_INVALID_PARAMS); 3069 3044 3070 3045 goto failed; 3071 3046 } ··· 3099 3074 BT_DBG(""); 3100 3075 3101 3076 if (cp->io_capability > SMP_IO_KEYBOARD_DISPLAY) 3102 - return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 3103 - MGMT_STATUS_INVALID_PARAMS, NULL, 0); 3077 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 3078 + MGMT_STATUS_INVALID_PARAMS, NULL, 0); 3104 3079 3105 3080 hci_dev_lock(hdev); 3106 3081 ··· 3111 3086 3112 3087 hci_dev_unlock(hdev); 3113 3088 3114 - return cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, NULL, 3115 - 0); 3089 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_IO_CAPABILITY, 0, 3090 + NULL, 0); 3116 3091 } 3117 3092 3118 - static struct pending_cmd *find_pairing(struct hci_conn *conn) 3093 + static struct mgmt_pending_cmd *find_pairing(struct hci_conn *conn) 3119 3094 { 3120 3095 struct hci_dev *hdev = conn->hdev; 3121 - struct pending_cmd *cmd; 3096 + struct mgmt_pending_cmd *cmd; 3122 3097 3123 3098 list_for_each_entry(cmd, &hdev->mgmt_pending, list) { 3124 3099 if (cmd->opcode != MGMT_OP_PAIR_DEVICE) ··· 3133 3108 return NULL; 3134 3109 } 3135 3110 3136 - static int pairing_complete(struct pending_cmd *cmd, u8 status) 3111 + static int pairing_complete(struct mgmt_pending_cmd *cmd, u8 status) 3137 3112 { 3138 3113 struct mgmt_rp_pair_device rp; 3139 3114 struct hci_conn *conn = cmd->user_data; ··· 3142 3117 bacpy(&rp.addr.bdaddr, &conn->dst); 3143 3118 rp.addr.type = link_to_bdaddr(conn->type, conn->dst_type); 3144 3119 3145 - err = cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, status, 3146 - &rp, sizeof(rp)); 3120 + err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, 3121 + status, &rp, sizeof(rp)); 3147 3122 3148 3123 /* So we don't get further callbacks for this connection */ 3149 3124 conn->connect_cfm_cb = NULL; ··· 3165 3140 void mgmt_smp_complete(struct hci_conn *conn, bool complete) 3166 3141 { 3167 3142 u8 status = complete ? MGMT_STATUS_SUCCESS : MGMT_STATUS_FAILED; 3168 - struct pending_cmd *cmd; 3143 + struct mgmt_pending_cmd *cmd; 3169 3144 3170 3145 cmd = find_pairing(conn); 3171 3146 if (cmd) { ··· 3176 3151 3177 3152 static void pairing_complete_cb(struct hci_conn *conn, u8 status) 3178 3153 { 3179 - struct pending_cmd *cmd; 3154 + struct mgmt_pending_cmd *cmd; 3180 3155 3181 3156 BT_DBG("status %u", status); 3182 3157 ··· 3192 3167 3193 3168 static void le_pairing_complete_cb(struct hci_conn *conn, u8 status) 3194 3169 { 3195 - struct pending_cmd *cmd; 3170 + struct mgmt_pending_cmd *cmd; 3196 3171 3197 3172 BT_DBG("status %u", status); 3198 3173 ··· 3214 3189 { 3215 3190 struct mgmt_cp_pair_device *cp = data; 3216 3191 struct mgmt_rp_pair_device rp; 3217 - struct pending_cmd *cmd; 3192 + struct mgmt_pending_cmd *cmd; 3218 3193 u8 sec_level, auth_type; 3219 3194 struct hci_conn *conn; 3220 3195 int err; ··· 3226 3201 rp.addr.type = cp->addr.type; 3227 3202 3228 3203 if (!bdaddr_type_is_valid(cp->addr.type)) 3229 - return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3230 - MGMT_STATUS_INVALID_PARAMS, 3231 - &rp, sizeof(rp)); 3204 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3205 + MGMT_STATUS_INVALID_PARAMS, 3206 + &rp, sizeof(rp)); 3232 3207 3233 3208 if (cp->io_cap > SMP_IO_KEYBOARD_DISPLAY) 3234 - return cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3235 - MGMT_STATUS_INVALID_PARAMS, 3236 - &rp, sizeof(rp)); 3209 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3210 + MGMT_STATUS_INVALID_PARAMS, 3211 + &rp, sizeof(rp)); 3237 3212 3238 3213 hci_dev_lock(hdev); 3239 3214 3240 3215 if (!hdev_is_powered(hdev)) { 3241 - err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3242 - MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp)); 3216 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3217 + MGMT_STATUS_NOT_POWERED, &rp, 3218 + sizeof(rp)); 3219 + goto unlock; 3220 + } 3221 + 3222 + if (hci_bdaddr_is_paired(hdev, &cp->addr.bdaddr, cp->addr.type)) { 3223 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3224 + MGMT_STATUS_ALREADY_PAIRED, &rp, 3225 + sizeof(rp)); 3243 3226 goto unlock; 3244 3227 } 3245 3228 ··· 3295 3262 else 3296 3263 status = MGMT_STATUS_CONNECT_FAILED; 3297 3264 3298 - err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3299 - status, &rp, 3300 - sizeof(rp)); 3265 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3266 + status, &rp, sizeof(rp)); 3301 3267 goto unlock; 3302 3268 } 3303 3269 3304 3270 if (conn->connect_cfm_cb) { 3305 3271 hci_conn_drop(conn); 3306 - err = cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3307 - MGMT_STATUS_BUSY, &rp, sizeof(rp)); 3272 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_PAIR_DEVICE, 3273 + MGMT_STATUS_BUSY, &rp, sizeof(rp)); 3308 3274 goto unlock; 3309 3275 } 3310 3276 ··· 3347 3315 u16 len) 3348 3316 { 3349 3317 struct mgmt_addr_info *addr = data; 3350 - struct pending_cmd *cmd; 3318 + struct mgmt_pending_cmd *cmd; 3351 3319 struct hci_conn *conn; 3352 3320 int err; 3353 3321 ··· 3356 3324 hci_dev_lock(hdev); 3357 3325 3358 3326 if (!hdev_is_powered(hdev)) { 3359 - err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3360 - MGMT_STATUS_NOT_POWERED); 3327 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3328 + MGMT_STATUS_NOT_POWERED); 3361 3329 goto unlock; 3362 3330 } 3363 3331 3364 3332 cmd = mgmt_pending_find(MGMT_OP_PAIR_DEVICE, hdev); 3365 3333 if (!cmd) { 3366 - err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3367 - MGMT_STATUS_INVALID_PARAMS); 3334 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3335 + MGMT_STATUS_INVALID_PARAMS); 3368 3336 goto unlock; 3369 3337 } 3370 3338 3371 3339 conn = cmd->user_data; 3372 3340 3373 3341 if (bacmp(&addr->bdaddr, &conn->dst) != 0) { 3374 - err = cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3375 - MGMT_STATUS_INVALID_PARAMS); 3342 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 3343 + MGMT_STATUS_INVALID_PARAMS); 3376 3344 goto unlock; 3377 3345 } 3378 3346 3379 3347 cmd->cmd_complete(cmd, MGMT_STATUS_CANCELLED); 3380 3348 mgmt_pending_remove(cmd); 3381 3349 3382 - err = cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0, 3383 - addr, sizeof(*addr)); 3350 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CANCEL_PAIR_DEVICE, 0, 3351 + addr, sizeof(*addr)); 3384 3352 unlock: 3385 3353 hci_dev_unlock(hdev); 3386 3354 return err; ··· 3390 3358 struct mgmt_addr_info *addr, u16 mgmt_op, 3391 3359 u16 hci_op, __le32 passkey) 3392 3360 { 3393 - struct pending_cmd *cmd; 3361 + struct mgmt_pending_cmd *cmd; 3394 3362 struct hci_conn *conn; 3395 3363 int err; 3396 3364 3397 3365 hci_dev_lock(hdev); 3398 3366 3399 3367 if (!hdev_is_powered(hdev)) { 3400 - err = cmd_complete(sk, hdev->id, mgmt_op, 3401 - MGMT_STATUS_NOT_POWERED, addr, 3402 - sizeof(*addr)); 3368 + err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3369 + MGMT_STATUS_NOT_POWERED, addr, 3370 + sizeof(*addr)); 3403 3371 goto done; 3404 3372 } 3405 3373 ··· 3409 3377 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &addr->bdaddr); 3410 3378 3411 3379 if (!conn) { 3412 - err = cmd_complete(sk, hdev->id, mgmt_op, 3413 - MGMT_STATUS_NOT_CONNECTED, addr, 3414 - sizeof(*addr)); 3380 + err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3381 + MGMT_STATUS_NOT_CONNECTED, addr, 3382 + sizeof(*addr)); 3415 3383 goto done; 3416 3384 } 3417 3385 3418 3386 if (addr->type == BDADDR_LE_PUBLIC || addr->type == BDADDR_LE_RANDOM) { 3419 3387 err = smp_user_confirm_reply(conn, mgmt_op, passkey); 3420 3388 if (!err) 3421 - err = cmd_complete(sk, hdev->id, mgmt_op, 3422 - MGMT_STATUS_SUCCESS, addr, 3423 - sizeof(*addr)); 3389 + err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3390 + MGMT_STATUS_SUCCESS, addr, 3391 + sizeof(*addr)); 3424 3392 else 3425 - err = cmd_complete(sk, hdev->id, mgmt_op, 3426 - MGMT_STATUS_FAILED, addr, 3427 - sizeof(*addr)); 3393 + err = mgmt_cmd_complete(sk, hdev->id, mgmt_op, 3394 + MGMT_STATUS_FAILED, addr, 3395 + sizeof(*addr)); 3428 3396 3429 3397 goto done; 3430 3398 } ··· 3476 3444 BT_DBG(""); 3477 3445 3478 3446 if (len != sizeof(*cp)) 3479 - return cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY, 3480 - MGMT_STATUS_INVALID_PARAMS); 3447 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_USER_CONFIRM_REPLY, 3448 + MGMT_STATUS_INVALID_PARAMS); 3481 3449 3482 3450 return user_pairing_resp(sk, hdev, &cp->addr, 3483 3451 MGMT_OP_USER_CONFIRM_REPLY, ··· 3533 3501 static void set_name_complete(struct hci_dev *hdev, u8 status, u16 opcode) 3534 3502 { 3535 3503 struct mgmt_cp_set_local_name *cp; 3536 - struct pending_cmd *cmd; 3504 + struct mgmt_pending_cmd *cmd; 3537 3505 3538 3506 BT_DBG("status 0x%02x", status); 3539 3507 ··· 3546 3514 cp = cmd->param; 3547 3515 3548 3516 if (status) 3549 - cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 3550 - mgmt_status(status)); 3517 + mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 3518 + mgmt_status(status)); 3551 3519 else 3552 - cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3553 - cp, sizeof(*cp)); 3520 + mgmt_cmd_complete(cmd->sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3521 + cp, sizeof(*cp)); 3554 3522 3555 3523 mgmt_pending_remove(cmd); 3556 3524 ··· 3562 3530 u16 len) 3563 3531 { 3564 3532 struct mgmt_cp_set_local_name *cp = data; 3565 - struct pending_cmd *cmd; 3533 + struct mgmt_pending_cmd *cmd; 3566 3534 struct hci_request req; 3567 3535 int err; 3568 3536 ··· 3576 3544 if (!memcmp(hdev->dev_name, cp->name, sizeof(hdev->dev_name)) && 3577 3545 !memcmp(hdev->short_name, cp->short_name, 3578 3546 sizeof(hdev->short_name))) { 3579 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3580 - data, len); 3547 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3548 + data, len); 3581 3549 goto failed; 3582 3550 } 3583 3551 ··· 3586 3554 if (!hdev_is_powered(hdev)) { 3587 3555 memcpy(hdev->dev_name, cp->name, sizeof(hdev->dev_name)); 3588 3556 3589 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3590 - data, len); 3557 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_LOCAL_NAME, 0, 3558 + data, len); 3591 3559 if (err < 0) 3592 3560 goto failed; 3593 3561 ··· 3630 3598 static int read_local_oob_data(struct sock *sk, struct hci_dev *hdev, 3631 3599 void *data, u16 data_len) 3632 3600 { 3633 - struct pending_cmd *cmd; 3601 + struct mgmt_pending_cmd *cmd; 3634 3602 int err; 3635 3603 3636 3604 BT_DBG("%s", hdev->name); ··· 3638 3606 hci_dev_lock(hdev); 3639 3607 3640 3608 if (!hdev_is_powered(hdev)) { 3641 - err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 3642 - MGMT_STATUS_NOT_POWERED); 3609 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 3610 + MGMT_STATUS_NOT_POWERED); 3643 3611 goto unlock; 3644 3612 } 3645 3613 3646 3614 if (!lmp_ssp_capable(hdev)) { 3647 - err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 3648 - MGMT_STATUS_NOT_SUPPORTED); 3615 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 3616 + MGMT_STATUS_NOT_SUPPORTED); 3649 3617 goto unlock; 3650 3618 } 3651 3619 3652 3620 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, hdev)) { 3653 - err = cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 3654 - MGMT_STATUS_BUSY); 3621 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 3622 + MGMT_STATUS_BUSY); 3655 3623 goto unlock; 3656 3624 } 3657 3625 ··· 3684 3652 BT_DBG("%s ", hdev->name); 3685 3653 3686 3654 if (!bdaddr_type_is_valid(addr->type)) 3687 - return cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, 3688 - MGMT_STATUS_INVALID_PARAMS, addr, 3689 - sizeof(*addr)); 3655 + return mgmt_cmd_complete(sk, hdev->id, 3656 + MGMT_OP_ADD_REMOTE_OOB_DATA, 3657 + MGMT_STATUS_INVALID_PARAMS, 3658 + addr, sizeof(*addr)); 3690 3659 3691 3660 hci_dev_lock(hdev); 3692 3661 ··· 3696 3663 u8 status; 3697 3664 3698 3665 if (cp->addr.type != BDADDR_BREDR) { 3699 - err = cmd_complete(sk, hdev->id, 3700 - MGMT_OP_ADD_REMOTE_OOB_DATA, 3701 - MGMT_STATUS_INVALID_PARAMS, 3702 - &cp->addr, sizeof(cp->addr)); 3666 + err = mgmt_cmd_complete(sk, hdev->id, 3667 + MGMT_OP_ADD_REMOTE_OOB_DATA, 3668 + MGMT_STATUS_INVALID_PARAMS, 3669 + &cp->addr, sizeof(cp->addr)); 3703 3670 goto unlock; 3704 3671 } 3705 3672 ··· 3711 3678 else 3712 3679 status = MGMT_STATUS_SUCCESS; 3713 3680 3714 - err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, 3715 - status, &cp->addr, sizeof(cp->addr)); 3681 + err = mgmt_cmd_complete(sk, hdev->id, 3682 + MGMT_OP_ADD_REMOTE_OOB_DATA, status, 3683 + &cp->addr, sizeof(cp->addr)); 3716 3684 } else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) { 3717 3685 struct mgmt_cp_add_remote_oob_ext_data *cp = data; 3718 3686 u8 *rand192, *hash192, *rand256, *hash256; ··· 3725 3691 */ 3726 3692 if (memcmp(cp->rand192, ZERO_KEY, 16) || 3727 3693 memcmp(cp->hash192, ZERO_KEY, 16)) { 3728 - err = cmd_complete(sk, hdev->id, 3729 - MGMT_OP_ADD_REMOTE_OOB_DATA, 3730 - MGMT_STATUS_INVALID_PARAMS, 3731 - addr, sizeof(*addr)); 3694 + err = mgmt_cmd_complete(sk, hdev->id, 3695 + MGMT_OP_ADD_REMOTE_OOB_DATA, 3696 + MGMT_STATUS_INVALID_PARAMS, 3697 + addr, sizeof(*addr)); 3732 3698 goto unlock; 3733 3699 } 3734 3700 ··· 3768 3734 else 3769 3735 status = MGMT_STATUS_SUCCESS; 3770 3736 3771 - err = cmd_complete(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, 3772 - status, &cp->addr, sizeof(cp->addr)); 3737 + err = mgmt_cmd_complete(sk, hdev->id, 3738 + MGMT_OP_ADD_REMOTE_OOB_DATA, 3739 + status, &cp->addr, sizeof(cp->addr)); 3773 3740 } else { 3774 3741 BT_ERR("add_remote_oob_data: invalid length of %u bytes", len); 3775 - err = cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, 3776 - MGMT_STATUS_INVALID_PARAMS); 3742 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_REMOTE_OOB_DATA, 3743 + MGMT_STATUS_INVALID_PARAMS); 3777 3744 } 3778 3745 3779 3746 unlock: ··· 3792 3757 BT_DBG("%s", hdev->name); 3793 3758 3794 3759 if (cp->addr.type != BDADDR_BREDR) 3795 - return cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA, 3796 - MGMT_STATUS_INVALID_PARAMS, 3797 - &cp->addr, sizeof(cp->addr)); 3760 + return mgmt_cmd_complete(sk, hdev->id, 3761 + MGMT_OP_REMOVE_REMOTE_OOB_DATA, 3762 + MGMT_STATUS_INVALID_PARAMS, 3763 + &cp->addr, sizeof(cp->addr)); 3798 3764 3799 3765 hci_dev_lock(hdev); 3800 3766 ··· 3812 3776 status = MGMT_STATUS_SUCCESS; 3813 3777 3814 3778 done: 3815 - err = cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA, 3816 - status, &cp->addr, sizeof(cp->addr)); 3779 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_REMOVE_REMOTE_OOB_DATA, 3780 + status, &cp->addr, sizeof(cp->addr)); 3817 3781 3818 3782 hci_dev_unlock(hdev); 3819 3783 return err; ··· 3856 3820 return false; 3857 3821 3858 3822 if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED && 3859 - !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 3823 + !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 3860 3824 *status = MGMT_STATUS_NOT_SUPPORTED; 3861 3825 return false; 3862 3826 } 3863 3827 3864 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) { 3828 + if (hci_dev_test_flag(hdev, HCI_LE_ADV)) { 3865 3829 /* Don't let discovery abort an outgoing 3866 3830 * connection attempt that's using directed 3867 3831 * advertising. ··· 3879 3843 * is running. Thus, we should temporarily stop it in order to 3880 3844 * set the discovery scanning parameters. 3881 3845 */ 3882 - if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) 3846 + if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) 3883 3847 hci_req_add_le_scan_disable(req); 3884 3848 3885 3849 memset(&param_cp, 0, sizeof(param_cp)); ··· 3919 3883 static void start_discovery_complete(struct hci_dev *hdev, u8 status, 3920 3884 u16 opcode) 3921 3885 { 3922 - struct pending_cmd *cmd; 3886 + struct mgmt_pending_cmd *cmd; 3923 3887 unsigned long timeout; 3924 3888 3925 3889 BT_DBG("status %d", status); ··· 3969 3933 */ 3970 3934 if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, 3971 3935 &hdev->quirks) && 3972 - (hdev->discovery.uuid_count > 0 || 3973 - hdev->discovery.rssi != HCI_RSSI_INVALID)) { 3936 + hdev->discovery.result_filtering) { 3974 3937 hdev->discovery.scan_start = jiffies; 3975 3938 hdev->discovery.scan_duration = timeout; 3976 3939 } ··· 3986 3951 void *data, u16 len) 3987 3952 { 3988 3953 struct mgmt_cp_start_discovery *cp = data; 3989 - struct pending_cmd *cmd; 3954 + struct mgmt_pending_cmd *cmd; 3990 3955 struct hci_request req; 3991 3956 u8 status; 3992 3957 int err; ··· 3996 3961 hci_dev_lock(hdev); 3997 3962 3998 3963 if (!hdev_is_powered(hdev)) { 3999 - err = cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY, 4000 - MGMT_STATUS_NOT_POWERED, 4001 - &cp->type, sizeof(cp->type)); 3964 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY, 3965 + MGMT_STATUS_NOT_POWERED, 3966 + &cp->type, sizeof(cp->type)); 4002 3967 goto failed; 4003 3968 } 4004 3969 4005 3970 if (hdev->discovery.state != DISCOVERY_STOPPED || 4006 - test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) { 4007 - err = cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY, 4008 - MGMT_STATUS_BUSY, &cp->type, 4009 - sizeof(cp->type)); 3971 + hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) { 3972 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY, 3973 + MGMT_STATUS_BUSY, &cp->type, 3974 + sizeof(cp->type)); 4010 3975 goto failed; 4011 3976 } 4012 3977 ··· 4029 3994 hci_req_init(&req, hdev); 4030 3995 4031 3996 if (!trigger_discovery(&req, &status)) { 4032 - err = cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY, 4033 - status, &cp->type, sizeof(cp->type)); 3997 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_START_DISCOVERY, 3998 + status, &cp->type, sizeof(cp->type)); 4034 3999 mgmt_pending_remove(cmd); 4035 4000 goto failed; 4036 4001 } ··· 4048 4013 return err; 4049 4014 } 4050 4015 4051 - static int service_discovery_cmd_complete(struct pending_cmd *cmd, u8 status) 4016 + static int service_discovery_cmd_complete(struct mgmt_pending_cmd *cmd, 4017 + u8 status) 4052 4018 { 4053 - return cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 4054 - cmd->param, 1); 4019 + return mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, 4020 + cmd->param, 1); 4055 4021 } 4056 4022 4057 4023 static int start_service_discovery(struct sock *sk, struct hci_dev *hdev, 4058 4024 void *data, u16 len) 4059 4025 { 4060 4026 struct mgmt_cp_start_service_discovery *cp = data; 4061 - struct pending_cmd *cmd; 4027 + struct mgmt_pending_cmd *cmd; 4062 4028 struct hci_request req; 4063 4029 const u16 max_uuid_count = ((U16_MAX - sizeof(*cp)) / 16); 4064 4030 u16 uuid_count, expected_len; ··· 4071 4035 hci_dev_lock(hdev); 4072 4036 4073 4037 if (!hdev_is_powered(hdev)) { 4074 - err = cmd_complete(sk, hdev->id, 4075 - MGMT_OP_START_SERVICE_DISCOVERY, 4076 - MGMT_STATUS_NOT_POWERED, 4077 - &cp->type, sizeof(cp->type)); 4038 + err = mgmt_cmd_complete(sk, hdev->id, 4039 + MGMT_OP_START_SERVICE_DISCOVERY, 4040 + MGMT_STATUS_NOT_POWERED, 4041 + &cp->type, sizeof(cp->type)); 4078 4042 goto failed; 4079 4043 } 4080 4044 4081 4045 if (hdev->discovery.state != DISCOVERY_STOPPED || 4082 - test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags)) { 4083 - err = cmd_complete(sk, hdev->id, 4084 - MGMT_OP_START_SERVICE_DISCOVERY, 4085 - MGMT_STATUS_BUSY, &cp->type, 4086 - sizeof(cp->type)); 4046 + hci_dev_test_flag(hdev, HCI_PERIODIC_INQ)) { 4047 + err = mgmt_cmd_complete(sk, hdev->id, 4048 + MGMT_OP_START_SERVICE_DISCOVERY, 4049 + MGMT_STATUS_BUSY, &cp->type, 4050 + sizeof(cp->type)); 4087 4051 goto failed; 4088 4052 } 4089 4053 ··· 4091 4055 if (uuid_count > max_uuid_count) { 4092 4056 BT_ERR("service_discovery: too big uuid_count value %u", 4093 4057 uuid_count); 4094 - err = cmd_complete(sk, hdev->id, 4095 - MGMT_OP_START_SERVICE_DISCOVERY, 4096 - MGMT_STATUS_INVALID_PARAMS, &cp->type, 4097 - sizeof(cp->type)); 4058 + err = mgmt_cmd_complete(sk, hdev->id, 4059 + MGMT_OP_START_SERVICE_DISCOVERY, 4060 + MGMT_STATUS_INVALID_PARAMS, &cp->type, 4061 + sizeof(cp->type)); 4098 4062 goto failed; 4099 4063 } 4100 4064 ··· 4102 4066 if (expected_len != len) { 4103 4067 BT_ERR("service_discovery: expected %u bytes, got %u bytes", 4104 4068 expected_len, len); 4105 - err = cmd_complete(sk, hdev->id, 4106 - MGMT_OP_START_SERVICE_DISCOVERY, 4107 - MGMT_STATUS_INVALID_PARAMS, &cp->type, 4108 - sizeof(cp->type)); 4069 + err = mgmt_cmd_complete(sk, hdev->id, 4070 + MGMT_OP_START_SERVICE_DISCOVERY, 4071 + MGMT_STATUS_INVALID_PARAMS, &cp->type, 4072 + sizeof(cp->type)); 4109 4073 goto failed; 4110 4074 } 4111 4075 ··· 4123 4087 */ 4124 4088 hci_discovery_filter_clear(hdev); 4125 4089 4090 + hdev->discovery.result_filtering = true; 4126 4091 hdev->discovery.type = cp->type; 4127 4092 hdev->discovery.rssi = cp->rssi; 4128 4093 hdev->discovery.uuid_count = uuid_count; ··· 4132 4095 hdev->discovery.uuids = kmemdup(cp->uuids, uuid_count * 16, 4133 4096 GFP_KERNEL); 4134 4097 if (!hdev->discovery.uuids) { 4135 - err = cmd_complete(sk, hdev->id, 4136 - MGMT_OP_START_SERVICE_DISCOVERY, 4137 - MGMT_STATUS_FAILED, 4138 - &cp->type, sizeof(cp->type)); 4098 + err = mgmt_cmd_complete(sk, hdev->id, 4099 + MGMT_OP_START_SERVICE_DISCOVERY, 4100 + MGMT_STATUS_FAILED, 4101 + &cp->type, sizeof(cp->type)); 4139 4102 mgmt_pending_remove(cmd); 4140 4103 goto failed; 4141 4104 } ··· 4144 4107 hci_req_init(&req, hdev); 4145 4108 4146 4109 if (!trigger_discovery(&req, &status)) { 4147 - err = cmd_complete(sk, hdev->id, 4148 - MGMT_OP_START_SERVICE_DISCOVERY, 4149 - status, &cp->type, sizeof(cp->type)); 4110 + err = mgmt_cmd_complete(sk, hdev->id, 4111 + MGMT_OP_START_SERVICE_DISCOVERY, 4112 + status, &cp->type, sizeof(cp->type)); 4150 4113 mgmt_pending_remove(cmd); 4151 4114 goto failed; 4152 4115 } ··· 4166 4129 4167 4130 static void stop_discovery_complete(struct hci_dev *hdev, u8 status, u16 opcode) 4168 4131 { 4169 - struct pending_cmd *cmd; 4132 + struct mgmt_pending_cmd *cmd; 4170 4133 4171 4134 BT_DBG("status %d", status); 4172 4135 ··· 4188 4151 u16 len) 4189 4152 { 4190 4153 struct mgmt_cp_stop_discovery *mgmt_cp = data; 4191 - struct pending_cmd *cmd; 4154 + struct mgmt_pending_cmd *cmd; 4192 4155 struct hci_request req; 4193 4156 int err; 4194 4157 ··· 4197 4160 hci_dev_lock(hdev); 4198 4161 4199 4162 if (!hci_discovery_active(hdev)) { 4200 - err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 4201 - MGMT_STATUS_REJECTED, &mgmt_cp->type, 4202 - sizeof(mgmt_cp->type)); 4163 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 4164 + MGMT_STATUS_REJECTED, &mgmt_cp->type, 4165 + sizeof(mgmt_cp->type)); 4203 4166 goto unlock; 4204 4167 } 4205 4168 4206 4169 if (hdev->discovery.type != mgmt_cp->type) { 4207 - err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 4208 - MGMT_STATUS_INVALID_PARAMS, &mgmt_cp->type, 4209 - sizeof(mgmt_cp->type)); 4170 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 4171 + MGMT_STATUS_INVALID_PARAMS, 4172 + &mgmt_cp->type, sizeof(mgmt_cp->type)); 4210 4173 goto unlock; 4211 4174 } 4212 4175 ··· 4232 4195 4233 4196 /* If no HCI commands were sent we're done */ 4234 4197 if (err == -ENODATA) { 4235 - err = cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 0, 4236 - &mgmt_cp->type, sizeof(mgmt_cp->type)); 4198 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_STOP_DISCOVERY, 0, 4199 + &mgmt_cp->type, sizeof(mgmt_cp->type)); 4237 4200 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); 4238 4201 } 4239 4202 ··· 4254 4217 hci_dev_lock(hdev); 4255 4218 4256 4219 if (!hci_discovery_active(hdev)) { 4257 - err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 4258 - MGMT_STATUS_FAILED, &cp->addr, 4259 - sizeof(cp->addr)); 4220 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 4221 + MGMT_STATUS_FAILED, &cp->addr, 4222 + sizeof(cp->addr)); 4260 4223 goto failed; 4261 4224 } 4262 4225 4263 4226 e = hci_inquiry_cache_lookup_unknown(hdev, &cp->addr.bdaddr); 4264 4227 if (!e) { 4265 - err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 4266 - MGMT_STATUS_INVALID_PARAMS, &cp->addr, 4267 - sizeof(cp->addr)); 4228 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 4229 + MGMT_STATUS_INVALID_PARAMS, &cp->addr, 4230 + sizeof(cp->addr)); 4268 4231 goto failed; 4269 4232 } 4270 4233 ··· 4276 4239 hci_inquiry_cache_update_resolve(hdev, e); 4277 4240 } 4278 4241 4279 - err = cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, &cp->addr, 4280 - sizeof(cp->addr)); 4242 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_CONFIRM_NAME, 0, 4243 + &cp->addr, sizeof(cp->addr)); 4281 4244 4282 4245 failed: 4283 4246 hci_dev_unlock(hdev); ··· 4294 4257 BT_DBG("%s", hdev->name); 4295 4258 4296 4259 if (!bdaddr_type_is_valid(cp->addr.type)) 4297 - return cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, 4298 - MGMT_STATUS_INVALID_PARAMS, 4299 - &cp->addr, sizeof(cp->addr)); 4260 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, 4261 + MGMT_STATUS_INVALID_PARAMS, 4262 + &cp->addr, sizeof(cp->addr)); 4300 4263 4301 4264 hci_dev_lock(hdev); 4302 4265 ··· 4312 4275 status = MGMT_STATUS_SUCCESS; 4313 4276 4314 4277 done: 4315 - err = cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status, 4316 - &cp->addr, sizeof(cp->addr)); 4278 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_BLOCK_DEVICE, status, 4279 + &cp->addr, sizeof(cp->addr)); 4317 4280 4318 4281 hci_dev_unlock(hdev); 4319 4282 ··· 4330 4293 BT_DBG("%s", hdev->name); 4331 4294 4332 4295 if (!bdaddr_type_is_valid(cp->addr.type)) 4333 - return cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, 4334 - MGMT_STATUS_INVALID_PARAMS, 4335 - &cp->addr, sizeof(cp->addr)); 4296 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, 4297 + MGMT_STATUS_INVALID_PARAMS, 4298 + &cp->addr, sizeof(cp->addr)); 4336 4299 4337 4300 hci_dev_lock(hdev); 4338 4301 ··· 4348 4311 status = MGMT_STATUS_SUCCESS; 4349 4312 4350 4313 done: 4351 - err = cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status, 4352 - &cp->addr, sizeof(cp->addr)); 4314 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNBLOCK_DEVICE, status, 4315 + &cp->addr, sizeof(cp->addr)); 4353 4316 4354 4317 hci_dev_unlock(hdev); 4355 4318 ··· 4369 4332 source = __le16_to_cpu(cp->source); 4370 4333 4371 4334 if (source > 0x0002) 4372 - return cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 4373 - MGMT_STATUS_INVALID_PARAMS); 4335 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 4336 + MGMT_STATUS_INVALID_PARAMS); 4374 4337 4375 4338 hci_dev_lock(hdev); 4376 4339 ··· 4379 4342 hdev->devid_product = __le16_to_cpu(cp->product); 4380 4343 hdev->devid_version = __le16_to_cpu(cp->version); 4381 4344 4382 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, NULL, 0); 4345 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_DEVICE_ID, 0, 4346 + NULL, 0); 4383 4347 4384 4348 hci_req_init(&req, hdev); 4385 4349 update_eir(&req); ··· 4406 4368 goto unlock; 4407 4369 } 4408 4370 4409 - if (test_bit(HCI_LE_ADV, &hdev->dev_flags)) 4410 - set_bit(HCI_ADVERTISING, &hdev->dev_flags); 4371 + if (hci_dev_test_flag(hdev, HCI_LE_ADV)) 4372 + hci_dev_set_flag(hdev, HCI_ADVERTISING); 4411 4373 else 4412 - clear_bit(HCI_ADVERTISING, &hdev->dev_flags); 4374 + hci_dev_clear_flag(hdev, HCI_ADVERTISING); 4413 4375 4414 4376 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING, hdev, settings_rsp, 4415 4377 &match); ··· 4427 4389 u16 len) 4428 4390 { 4429 4391 struct mgmt_mode *cp = data; 4430 - struct pending_cmd *cmd; 4392 + struct mgmt_pending_cmd *cmd; 4431 4393 struct hci_request req; 4432 - u8 val, enabled, status; 4394 + u8 val, status; 4433 4395 int err; 4434 4396 4435 4397 BT_DBG("request for %s", hdev->name); 4436 4398 4437 4399 status = mgmt_le_support(hdev); 4438 4400 if (status) 4439 - return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 4440 - status); 4401 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 4402 + status); 4441 4403 4442 - if (cp->val != 0x00 && cp->val != 0x01) 4443 - return cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 4444 - MGMT_STATUS_INVALID_PARAMS); 4404 + if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 4405 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 4406 + MGMT_STATUS_INVALID_PARAMS); 4445 4407 4446 4408 hci_dev_lock(hdev); 4447 4409 4448 4410 val = !!cp->val; 4449 - enabled = test_bit(HCI_ADVERTISING, &hdev->dev_flags); 4450 4411 4451 4412 /* The following conditions are ones which mean that we should 4452 4413 * not do any HCI communication but directly send a mgmt 4453 4414 * response to user space (after toggling the flag if 4454 4415 * necessary). 4455 4416 */ 4456 - if (!hdev_is_powered(hdev) || val == enabled || 4417 + if (!hdev_is_powered(hdev) || 4418 + (val == hci_dev_test_flag(hdev, HCI_ADVERTISING) && 4419 + (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE)) || 4457 4420 hci_conn_num(hdev, LE_LINK) > 0 || 4458 - (test_bit(HCI_LE_SCAN, &hdev->dev_flags) && 4421 + (hci_dev_test_flag(hdev, HCI_LE_SCAN) && 4459 4422 hdev->le_scan_type == LE_SCAN_ACTIVE)) { 4460 - bool changed = false; 4423 + bool changed; 4461 4424 4462 - if (val != test_bit(HCI_ADVERTISING, &hdev->dev_flags)) { 4463 - change_bit(HCI_ADVERTISING, &hdev->dev_flags); 4464 - changed = true; 4425 + if (cp->val) { 4426 + changed = !hci_dev_test_and_set_flag(hdev, HCI_ADVERTISING); 4427 + if (cp->val == 0x02) 4428 + hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 4429 + else 4430 + hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 4431 + } else { 4432 + changed = hci_dev_test_and_clear_flag(hdev, HCI_ADVERTISING); 4433 + hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 4465 4434 } 4466 4435 4467 4436 err = send_settings_rsp(sk, MGMT_OP_SET_ADVERTISING, hdev); ··· 4483 4438 4484 4439 if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING, hdev) || 4485 4440 mgmt_pending_find(MGMT_OP_SET_LE, hdev)) { 4486 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 4487 - MGMT_STATUS_BUSY); 4441 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_ADVERTISING, 4442 + MGMT_STATUS_BUSY); 4488 4443 goto unlock; 4489 4444 } 4490 4445 ··· 4495 4450 } 4496 4451 4497 4452 hci_req_init(&req, hdev); 4453 + 4454 + if (cp->val == 0x02) 4455 + hci_dev_set_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 4456 + else 4457 + hci_dev_clear_flag(hdev, HCI_ADVERTISING_CONNECTABLE); 4498 4458 4499 4459 if (val) 4500 4460 enable_advertising(&req); ··· 4524 4474 BT_DBG("%s", hdev->name); 4525 4475 4526 4476 if (!lmp_le_capable(hdev)) 4527 - return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 4528 - MGMT_STATUS_NOT_SUPPORTED); 4477 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 4478 + MGMT_STATUS_NOT_SUPPORTED); 4529 4479 4530 4480 if (hdev_is_powered(hdev)) 4531 - return cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 4532 - MGMT_STATUS_REJECTED); 4481 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 4482 + MGMT_STATUS_REJECTED); 4533 4483 4534 4484 if (bacmp(&cp->bdaddr, BDADDR_ANY)) { 4535 4485 if (!bacmp(&cp->bdaddr, BDADDR_NONE)) 4536 - return cmd_status(sk, hdev->id, 4537 - MGMT_OP_SET_STATIC_ADDRESS, 4538 - MGMT_STATUS_INVALID_PARAMS); 4486 + return mgmt_cmd_status(sk, hdev->id, 4487 + MGMT_OP_SET_STATIC_ADDRESS, 4488 + MGMT_STATUS_INVALID_PARAMS); 4539 4489 4540 4490 /* Two most significant bits shall be set */ 4541 4491 if ((cp->bdaddr.b[5] & 0xc0) != 0xc0) 4542 - return cmd_status(sk, hdev->id, 4543 - MGMT_OP_SET_STATIC_ADDRESS, 4544 - MGMT_STATUS_INVALID_PARAMS); 4492 + return mgmt_cmd_status(sk, hdev->id, 4493 + MGMT_OP_SET_STATIC_ADDRESS, 4494 + MGMT_STATUS_INVALID_PARAMS); 4545 4495 } 4546 4496 4547 4497 hci_dev_lock(hdev); 4548 4498 4549 4499 bacpy(&hdev->static_addr, &cp->bdaddr); 4550 4500 4551 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_STATIC_ADDRESS, 0, NULL, 0); 4501 + err = send_settings_rsp(sk, MGMT_OP_SET_STATIC_ADDRESS, hdev); 4502 + if (err < 0) 4503 + goto unlock; 4552 4504 4505 + err = new_settings(hdev, sk); 4506 + 4507 + unlock: 4553 4508 hci_dev_unlock(hdev); 4554 - 4555 4509 return err; 4556 4510 } 4557 4511 ··· 4569 4515 BT_DBG("%s", hdev->name); 4570 4516 4571 4517 if (!lmp_le_capable(hdev)) 4572 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4573 - MGMT_STATUS_NOT_SUPPORTED); 4518 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4519 + MGMT_STATUS_NOT_SUPPORTED); 4574 4520 4575 4521 interval = __le16_to_cpu(cp->interval); 4576 4522 4577 4523 if (interval < 0x0004 || interval > 0x4000) 4578 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4579 - MGMT_STATUS_INVALID_PARAMS); 4524 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4525 + MGMT_STATUS_INVALID_PARAMS); 4580 4526 4581 4527 window = __le16_to_cpu(cp->window); 4582 4528 4583 4529 if (window < 0x0004 || window > 0x4000) 4584 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4585 - MGMT_STATUS_INVALID_PARAMS); 4530 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4531 + MGMT_STATUS_INVALID_PARAMS); 4586 4532 4587 4533 if (window > interval) 4588 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4589 - MGMT_STATUS_INVALID_PARAMS); 4534 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 4535 + MGMT_STATUS_INVALID_PARAMS); 4590 4536 4591 4537 hci_dev_lock(hdev); 4592 4538 4593 4539 hdev->le_scan_interval = interval; 4594 4540 hdev->le_scan_window = window; 4595 4541 4596 - err = cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0, NULL, 0); 4542 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_SET_SCAN_PARAMS, 0, 4543 + NULL, 0); 4597 4544 4598 4545 /* If background scan is running, restart it so new parameters are 4599 4546 * loaded. 4600 4547 */ 4601 - if (test_bit(HCI_LE_SCAN, &hdev->dev_flags) && 4548 + if (hci_dev_test_flag(hdev, HCI_LE_SCAN) && 4602 4549 hdev->discovery.state == DISCOVERY_STOPPED) { 4603 4550 struct hci_request req; 4604 4551 ··· 4619 4564 static void fast_connectable_complete(struct hci_dev *hdev, u8 status, 4620 4565 u16 opcode) 4621 4566 { 4622 - struct pending_cmd *cmd; 4567 + struct mgmt_pending_cmd *cmd; 4623 4568 4624 4569 BT_DBG("status 0x%02x", status); 4625 4570 ··· 4630 4575 goto unlock; 4631 4576 4632 4577 if (status) { 4633 - cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4634 - mgmt_status(status)); 4578 + mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4579 + mgmt_status(status)); 4635 4580 } else { 4636 4581 struct mgmt_mode *cp = cmd->param; 4637 4582 4638 4583 if (cp->val) 4639 - set_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags); 4584 + hci_dev_set_flag(hdev, HCI_FAST_CONNECTABLE); 4640 4585 else 4641 - clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags); 4586 + hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE); 4642 4587 4643 4588 send_settings_rsp(cmd->sk, MGMT_OP_SET_FAST_CONNECTABLE, hdev); 4644 4589 new_settings(hdev, cmd->sk); ··· 4654 4599 void *data, u16 len) 4655 4600 { 4656 4601 struct mgmt_mode *cp = data; 4657 - struct pending_cmd *cmd; 4602 + struct mgmt_pending_cmd *cmd; 4658 4603 struct hci_request req; 4659 4604 int err; 4660 4605 4661 4606 BT_DBG("%s", hdev->name); 4662 4607 4663 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) || 4608 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) || 4664 4609 hdev->hci_ver < BLUETOOTH_VER_1_2) 4665 - return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4666 - MGMT_STATUS_NOT_SUPPORTED); 4610 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4611 + MGMT_STATUS_NOT_SUPPORTED); 4667 4612 4668 4613 if (cp->val != 0x00 && cp->val != 0x01) 4669 - return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4670 - MGMT_STATUS_INVALID_PARAMS); 4671 - 4672 - if (!hdev_is_powered(hdev)) 4673 - return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4674 - MGMT_STATUS_NOT_POWERED); 4675 - 4676 - if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags)) 4677 - return cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4678 - MGMT_STATUS_REJECTED); 4614 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4615 + MGMT_STATUS_INVALID_PARAMS); 4679 4616 4680 4617 hci_dev_lock(hdev); 4681 4618 4682 4619 if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE, hdev)) { 4683 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4684 - MGMT_STATUS_BUSY); 4620 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4621 + MGMT_STATUS_BUSY); 4685 4622 goto unlock; 4686 4623 } 4687 4624 4688 - if (!!cp->val == test_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags)) { 4625 + if (!!cp->val == hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) { 4689 4626 err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE, 4690 4627 hdev); 4628 + goto unlock; 4629 + } 4630 + 4631 + if (!hdev_is_powered(hdev)) { 4632 + hci_dev_change_flag(hdev, HCI_FAST_CONNECTABLE); 4633 + err = send_settings_rsp(sk, MGMT_OP_SET_FAST_CONNECTABLE, 4634 + hdev); 4635 + new_settings(hdev, sk); 4691 4636 goto unlock; 4692 4637 } 4693 4638 ··· 4704 4649 4705 4650 err = hci_req_run(&req, fast_connectable_complete); 4706 4651 if (err < 0) { 4707 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4708 - MGMT_STATUS_FAILED); 4652 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_FAST_CONNECTABLE, 4653 + MGMT_STATUS_FAILED); 4709 4654 mgmt_pending_remove(cmd); 4710 4655 } 4711 4656 ··· 4717 4662 4718 4663 static void set_bredr_complete(struct hci_dev *hdev, u8 status, u16 opcode) 4719 4664 { 4720 - struct pending_cmd *cmd; 4665 + struct mgmt_pending_cmd *cmd; 4721 4666 4722 4667 BT_DBG("status 0x%02x", status); 4723 4668 ··· 4733 4678 /* We need to restore the flag if related HCI commands 4734 4679 * failed. 4735 4680 */ 4736 - clear_bit(HCI_BREDR_ENABLED, &hdev->dev_flags); 4681 + hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED); 4737 4682 4738 - cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 4683 + mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, mgmt_err); 4739 4684 } else { 4740 4685 send_settings_rsp(cmd->sk, MGMT_OP_SET_BREDR, hdev); 4741 4686 new_settings(hdev, cmd->sk); ··· 4750 4695 static int set_bredr(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) 4751 4696 { 4752 4697 struct mgmt_mode *cp = data; 4753 - struct pending_cmd *cmd; 4698 + struct mgmt_pending_cmd *cmd; 4754 4699 struct hci_request req; 4755 4700 int err; 4756 4701 4757 4702 BT_DBG("request for %s", hdev->name); 4758 4703 4759 4704 if (!lmp_bredr_capable(hdev) || !lmp_le_capable(hdev)) 4760 - return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4761 - MGMT_STATUS_NOT_SUPPORTED); 4705 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4706 + MGMT_STATUS_NOT_SUPPORTED); 4762 4707 4763 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 4764 - return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4765 - MGMT_STATUS_REJECTED); 4708 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 4709 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4710 + MGMT_STATUS_REJECTED); 4766 4711 4767 4712 if (cp->val != 0x00 && cp->val != 0x01) 4768 - return cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4769 - MGMT_STATUS_INVALID_PARAMS); 4713 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4714 + MGMT_STATUS_INVALID_PARAMS); 4770 4715 4771 4716 hci_dev_lock(hdev); 4772 4717 4773 - if (cp->val == test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 4718 + if (cp->val == hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 4774 4719 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev); 4775 4720 goto unlock; 4776 4721 } 4777 4722 4778 4723 if (!hdev_is_powered(hdev)) { 4779 4724 if (!cp->val) { 4780 - clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags); 4781 - clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags); 4782 - clear_bit(HCI_LINK_SECURITY, &hdev->dev_flags); 4783 - clear_bit(HCI_FAST_CONNECTABLE, &hdev->dev_flags); 4784 - clear_bit(HCI_HS_ENABLED, &hdev->dev_flags); 4725 + hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 4726 + hci_dev_clear_flag(hdev, HCI_SSP_ENABLED); 4727 + hci_dev_clear_flag(hdev, HCI_LINK_SECURITY); 4728 + hci_dev_clear_flag(hdev, HCI_FAST_CONNECTABLE); 4729 + hci_dev_clear_flag(hdev, HCI_HS_ENABLED); 4785 4730 } 4786 4731 4787 - change_bit(HCI_BREDR_ENABLED, &hdev->dev_flags); 4732 + hci_dev_change_flag(hdev, HCI_BREDR_ENABLED); 4788 4733 4789 4734 err = send_settings_rsp(sk, MGMT_OP_SET_BREDR, hdev); 4790 4735 if (err < 0) ··· 4796 4741 4797 4742 /* Reject disabling when powered on */ 4798 4743 if (!cp->val) { 4799 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4800 - MGMT_STATUS_REJECTED); 4744 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4745 + MGMT_STATUS_REJECTED); 4801 4746 goto unlock; 4802 4747 } else { 4803 4748 /* When configuring a dual-mode controller to operate ··· 4814 4759 * switching BR/EDR back on when secure connections has been 4815 4760 * enabled is not a supported transaction. 4816 4761 */ 4817 - if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) && 4762 + if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 4818 4763 (bacmp(&hdev->static_addr, BDADDR_ANY) || 4819 - test_bit(HCI_SC_ENABLED, &hdev->dev_flags))) { 4820 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4821 - MGMT_STATUS_REJECTED); 4764 + hci_dev_test_flag(hdev, HCI_SC_ENABLED))) { 4765 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4766 + MGMT_STATUS_REJECTED); 4822 4767 goto unlock; 4823 4768 } 4824 4769 } 4825 4770 4826 4771 if (mgmt_pending_find(MGMT_OP_SET_BREDR, hdev)) { 4827 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4828 - MGMT_STATUS_BUSY); 4772 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_BREDR, 4773 + MGMT_STATUS_BUSY); 4829 4774 goto unlock; 4830 4775 } 4831 4776 ··· 4838 4783 /* We need to flip the bit already here so that update_adv_data 4839 4784 * generates the correct flags. 4840 4785 */ 4841 - set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags); 4786 + hci_dev_set_flag(hdev, HCI_BREDR_ENABLED); 4842 4787 4843 4788 hci_req_init(&req, hdev); 4844 4789 ··· 4861 4806 4862 4807 static void sc_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode) 4863 4808 { 4864 - struct pending_cmd *cmd; 4809 + struct mgmt_pending_cmd *cmd; 4865 4810 struct mgmt_mode *cp; 4866 4811 4867 4812 BT_DBG("%s status %u", hdev->name, status); ··· 4873 4818 goto unlock; 4874 4819 4875 4820 if (status) { 4876 - cmd_status(cmd->sk, cmd->index, cmd->opcode, 4877 - mgmt_status(status)); 4821 + mgmt_cmd_status(cmd->sk, cmd->index, cmd->opcode, 4822 + mgmt_status(status)); 4878 4823 goto remove; 4879 4824 } 4880 4825 ··· 4882 4827 4883 4828 switch (cp->val) { 4884 4829 case 0x00: 4885 - clear_bit(HCI_SC_ENABLED, &hdev->dev_flags); 4886 - clear_bit(HCI_SC_ONLY, &hdev->dev_flags); 4830 + hci_dev_clear_flag(hdev, HCI_SC_ENABLED); 4831 + hci_dev_clear_flag(hdev, HCI_SC_ONLY); 4887 4832 break; 4888 4833 case 0x01: 4889 - set_bit(HCI_SC_ENABLED, &hdev->dev_flags); 4890 - clear_bit(HCI_SC_ONLY, &hdev->dev_flags); 4834 + hci_dev_set_flag(hdev, HCI_SC_ENABLED); 4835 + hci_dev_clear_flag(hdev, HCI_SC_ONLY); 4891 4836 break; 4892 4837 case 0x02: 4893 - set_bit(HCI_SC_ENABLED, &hdev->dev_flags); 4894 - set_bit(HCI_SC_ONLY, &hdev->dev_flags); 4838 + hci_dev_set_flag(hdev, HCI_SC_ENABLED); 4839 + hci_dev_set_flag(hdev, HCI_SC_ONLY); 4895 4840 break; 4896 4841 } 4897 4842 ··· 4908 4853 void *data, u16 len) 4909 4854 { 4910 4855 struct mgmt_mode *cp = data; 4911 - struct pending_cmd *cmd; 4856 + struct mgmt_pending_cmd *cmd; 4912 4857 struct hci_request req; 4913 4858 u8 val; 4914 4859 int err; ··· 4916 4861 BT_DBG("request for %s", hdev->name); 4917 4862 4918 4863 if (!lmp_sc_capable(hdev) && 4919 - !test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 4920 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4921 - MGMT_STATUS_NOT_SUPPORTED); 4864 + !hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 4865 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4866 + MGMT_STATUS_NOT_SUPPORTED); 4922 4867 4923 - if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) && 4868 + if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && 4924 4869 lmp_sc_capable(hdev) && 4925 - !test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) 4926 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4927 - MGMT_STATUS_REJECTED); 4870 + !hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) 4871 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4872 + MGMT_STATUS_REJECTED); 4928 4873 4929 4874 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 4930 - return cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4875 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4931 4876 MGMT_STATUS_INVALID_PARAMS); 4932 4877 4933 4878 hci_dev_lock(hdev); 4934 4879 4935 4880 if (!hdev_is_powered(hdev) || !lmp_sc_capable(hdev) || 4936 - !test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 4881 + !hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 4937 4882 bool changed; 4938 4883 4939 4884 if (cp->val) { 4940 - changed = !test_and_set_bit(HCI_SC_ENABLED, 4941 - &hdev->dev_flags); 4885 + changed = !hci_dev_test_and_set_flag(hdev, 4886 + HCI_SC_ENABLED); 4942 4887 if (cp->val == 0x02) 4943 - set_bit(HCI_SC_ONLY, &hdev->dev_flags); 4888 + hci_dev_set_flag(hdev, HCI_SC_ONLY); 4944 4889 else 4945 - clear_bit(HCI_SC_ONLY, &hdev->dev_flags); 4890 + hci_dev_clear_flag(hdev, HCI_SC_ONLY); 4946 4891 } else { 4947 - changed = test_and_clear_bit(HCI_SC_ENABLED, 4948 - &hdev->dev_flags); 4949 - clear_bit(HCI_SC_ONLY, &hdev->dev_flags); 4892 + changed = hci_dev_test_and_clear_flag(hdev, 4893 + HCI_SC_ENABLED); 4894 + hci_dev_clear_flag(hdev, HCI_SC_ONLY); 4950 4895 } 4951 4896 4952 4897 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev); ··· 4960 4905 } 4961 4906 4962 4907 if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN, hdev)) { 4963 - err = cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4964 - MGMT_STATUS_BUSY); 4908 + err = mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_SECURE_CONN, 4909 + MGMT_STATUS_BUSY); 4965 4910 goto failed; 4966 4911 } 4967 4912 4968 4913 val = !!cp->val; 4969 4914 4970 - if (val == test_bit(HCI_SC_ENABLED, &hdev->dev_flags) && 4971 - (cp->val == 0x02) == test_bit(HCI_SC_ONLY, &hdev->dev_flags)) { 4915 + if (val == hci_dev_test_flag(hdev, HCI_SC_ENABLED) && 4916 + (cp->val == 0x02) == hci_dev_test_flag(hdev, HCI_SC_ONLY)) { 4972 4917 err = send_settings_rsp(sk, MGMT_OP_SET_SECURE_CONN, hdev); 4973 4918 goto failed; 4974 4919 } ··· 5002 4947 BT_DBG("request for %s", hdev->name); 5003 4948 5004 4949 if (cp->val != 0x00 && cp->val != 0x01 && cp->val != 0x02) 5005 - return cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS, 5006 - MGMT_STATUS_INVALID_PARAMS); 4950 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_DEBUG_KEYS, 4951 + MGMT_STATUS_INVALID_PARAMS); 5007 4952 5008 4953 hci_dev_lock(hdev); 5009 4954 5010 4955 if (cp->val) 5011 - changed = !test_and_set_bit(HCI_KEEP_DEBUG_KEYS, 5012 - &hdev->dev_flags); 4956 + changed = !hci_dev_test_and_set_flag(hdev, HCI_KEEP_DEBUG_KEYS); 5013 4957 else 5014 - changed = test_and_clear_bit(HCI_KEEP_DEBUG_KEYS, 5015 - &hdev->dev_flags); 4958 + changed = hci_dev_test_and_clear_flag(hdev, 4959 + HCI_KEEP_DEBUG_KEYS); 5016 4960 5017 4961 if (cp->val == 0x02) 5018 - use_changed = !test_and_set_bit(HCI_USE_DEBUG_KEYS, 5019 - &hdev->dev_flags); 4962 + use_changed = !hci_dev_test_and_set_flag(hdev, 4963 + HCI_USE_DEBUG_KEYS); 5020 4964 else 5021 - use_changed = test_and_clear_bit(HCI_USE_DEBUG_KEYS, 5022 - &hdev->dev_flags); 4965 + use_changed = hci_dev_test_and_clear_flag(hdev, 4966 + HCI_USE_DEBUG_KEYS); 5023 4967 5024 4968 if (hdev_is_powered(hdev) && use_changed && 5025 - test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { 4969 + hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 5026 4970 u8 mode = (cp->val == 0x02) ? 0x01 : 0x00; 5027 4971 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE, 5028 4972 sizeof(mode), &mode); ··· 5049 4995 BT_DBG("request for %s", hdev->name); 5050 4996 5051 4997 if (!lmp_le_capable(hdev)) 5052 - return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 5053 - MGMT_STATUS_NOT_SUPPORTED); 4998 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 4999 + MGMT_STATUS_NOT_SUPPORTED); 5054 5000 5055 5001 if (cp->privacy != 0x00 && cp->privacy != 0x01) 5056 - return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 5057 - MGMT_STATUS_INVALID_PARAMS); 5002 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 5003 + MGMT_STATUS_INVALID_PARAMS); 5058 5004 5059 5005 if (hdev_is_powered(hdev)) 5060 - return cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 5061 - MGMT_STATUS_REJECTED); 5006 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PRIVACY, 5007 + MGMT_STATUS_REJECTED); 5062 5008 5063 5009 hci_dev_lock(hdev); 5064 5010 5065 5011 /* If user space supports this command it is also expected to 5066 5012 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag. 5067 5013 */ 5068 - set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags); 5014 + hci_dev_set_flag(hdev, HCI_RPA_RESOLVING); 5069 5015 5070 5016 if (cp->privacy) { 5071 - changed = !test_and_set_bit(HCI_PRIVACY, &hdev->dev_flags); 5017 + changed = !hci_dev_test_and_set_flag(hdev, HCI_PRIVACY); 5072 5018 memcpy(hdev->irk, cp->irk, sizeof(hdev->irk)); 5073 - set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags); 5019 + hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); 5074 5020 } else { 5075 - changed = test_and_clear_bit(HCI_PRIVACY, &hdev->dev_flags); 5021 + changed = hci_dev_test_and_clear_flag(hdev, HCI_PRIVACY); 5076 5022 memset(hdev->irk, 0, sizeof(hdev->irk)); 5077 - clear_bit(HCI_RPA_EXPIRED, &hdev->dev_flags); 5023 + hci_dev_clear_flag(hdev, HCI_RPA_EXPIRED); 5078 5024 } 5079 5025 5080 5026 err = send_settings_rsp(sk, MGMT_OP_SET_PRIVACY, hdev); ··· 5117 5063 BT_DBG("request for %s", hdev->name); 5118 5064 5119 5065 if (!lmp_le_capable(hdev)) 5120 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 5121 - MGMT_STATUS_NOT_SUPPORTED); 5066 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 5067 + MGMT_STATUS_NOT_SUPPORTED); 5122 5068 5123 5069 irk_count = __le16_to_cpu(cp->irk_count); 5124 5070 if (irk_count > max_irk_count) { 5125 5071 BT_ERR("load_irks: too big irk_count value %u", irk_count); 5126 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 5127 - MGMT_STATUS_INVALID_PARAMS); 5072 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 5073 + MGMT_STATUS_INVALID_PARAMS); 5128 5074 } 5129 5075 5130 5076 expected_len = sizeof(*cp) + irk_count * sizeof(struct mgmt_irk_info); 5131 5077 if (expected_len != len) { 5132 5078 BT_ERR("load_irks: expected %u bytes, got %u bytes", 5133 5079 expected_len, len); 5134 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 5135 - MGMT_STATUS_INVALID_PARAMS); 5080 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_IRKS, 5081 + MGMT_STATUS_INVALID_PARAMS); 5136 5082 } 5137 5083 5138 5084 BT_DBG("%s irk_count %u", hdev->name, irk_count); ··· 5141 5087 struct mgmt_irk_info *key = &cp->irks[i]; 5142 5088 5143 5089 if (!irk_is_valid(key)) 5144 - return cmd_status(sk, hdev->id, 5145 - MGMT_OP_LOAD_IRKS, 5146 - MGMT_STATUS_INVALID_PARAMS); 5090 + return mgmt_cmd_status(sk, hdev->id, 5091 + MGMT_OP_LOAD_IRKS, 5092 + MGMT_STATUS_INVALID_PARAMS); 5147 5093 } 5148 5094 5149 5095 hci_dev_lock(hdev); ··· 5163 5109 BDADDR_ANY); 5164 5110 } 5165 5111 5166 - set_bit(HCI_RPA_RESOLVING, &hdev->dev_flags); 5112 + hci_dev_set_flag(hdev, HCI_RPA_RESOLVING); 5167 5113 5168 - err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0); 5114 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_IRKS, 0, NULL, 0); 5169 5115 5170 5116 hci_dev_unlock(hdev); 5171 5117 ··· 5203 5149 BT_DBG("request for %s", hdev->name); 5204 5150 5205 5151 if (!lmp_le_capable(hdev)) 5206 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 5207 - MGMT_STATUS_NOT_SUPPORTED); 5152 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 5153 + MGMT_STATUS_NOT_SUPPORTED); 5208 5154 5209 5155 key_count = __le16_to_cpu(cp->key_count); 5210 5156 if (key_count > max_key_count) { 5211 5157 BT_ERR("load_ltks: too big key_count value %u", key_count); 5212 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 5213 - MGMT_STATUS_INVALID_PARAMS); 5158 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 5159 + MGMT_STATUS_INVALID_PARAMS); 5214 5160 } 5215 5161 5216 5162 expected_len = sizeof(*cp) + key_count * ··· 5218 5164 if (expected_len != len) { 5219 5165 BT_ERR("load_keys: expected %u bytes, got %u bytes", 5220 5166 expected_len, len); 5221 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 5222 - MGMT_STATUS_INVALID_PARAMS); 5167 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 5168 + MGMT_STATUS_INVALID_PARAMS); 5223 5169 } 5224 5170 5225 5171 BT_DBG("%s key_count %u", hdev->name, key_count); ··· 5228 5174 struct mgmt_ltk_info *key = &cp->keys[i]; 5229 5175 5230 5176 if (!ltk_is_valid(key)) 5231 - return cmd_status(sk, hdev->id, 5232 - MGMT_OP_LOAD_LONG_TERM_KEYS, 5233 - MGMT_STATUS_INVALID_PARAMS); 5177 + return mgmt_cmd_status(sk, hdev->id, 5178 + MGMT_OP_LOAD_LONG_TERM_KEYS, 5179 + MGMT_STATUS_INVALID_PARAMS); 5234 5180 } 5235 5181 5236 5182 hci_dev_lock(hdev); ··· 5275 5221 key->rand); 5276 5222 } 5277 5223 5278 - err = cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0, 5224 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_LONG_TERM_KEYS, 0, 5279 5225 NULL, 0); 5280 5226 5281 5227 hci_dev_unlock(hdev); ··· 5283 5229 return err; 5284 5230 } 5285 5231 5286 - static int conn_info_cmd_complete(struct pending_cmd *cmd, u8 status) 5232 + static int conn_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) 5287 5233 { 5288 5234 struct hci_conn *conn = cmd->user_data; 5289 5235 struct mgmt_rp_get_conn_info rp; ··· 5301 5247 rp.max_tx_power = HCI_TX_POWER_INVALID; 5302 5248 } 5303 5249 5304 - err = cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO, status, 5305 - &rp, sizeof(rp)); 5250 + err = mgmt_cmd_complete(cmd->sk, cmd->index, MGMT_OP_GET_CONN_INFO, 5251 + status, &rp, sizeof(rp)); 5306 5252 5307 5253 hci_conn_drop(conn); 5308 5254 hci_conn_put(conn); ··· 5314 5260 u16 opcode) 5315 5261 { 5316 5262 struct hci_cp_read_rssi *cp; 5317 - struct pending_cmd *cmd; 5263 + struct mgmt_pending_cmd *cmd; 5318 5264 struct hci_conn *conn; 5319 5265 u16 handle; 5320 5266 u8 status; ··· 5379 5325 rp.addr.type = cp->addr.type; 5380 5326 5381 5327 if (!bdaddr_type_is_valid(cp->addr.type)) 5382 - return cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5383 - MGMT_STATUS_INVALID_PARAMS, 5384 - &rp, sizeof(rp)); 5328 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5329 + MGMT_STATUS_INVALID_PARAMS, 5330 + &rp, sizeof(rp)); 5385 5331 5386 5332 hci_dev_lock(hdev); 5387 5333 5388 5334 if (!hdev_is_powered(hdev)) { 5389 - err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5390 - MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp)); 5335 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5336 + MGMT_STATUS_NOT_POWERED, &rp, 5337 + sizeof(rp)); 5391 5338 goto unlock; 5392 5339 } 5393 5340 ··· 5399 5344 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->addr.bdaddr); 5400 5345 5401 5346 if (!conn || conn->state != BT_CONNECTED) { 5402 - err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5403 - MGMT_STATUS_NOT_CONNECTED, &rp, sizeof(rp)); 5347 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5348 + MGMT_STATUS_NOT_CONNECTED, &rp, 5349 + sizeof(rp)); 5404 5350 goto unlock; 5405 5351 } 5406 5352 5407 5353 if (mgmt_pending_find_data(MGMT_OP_GET_CONN_INFO, hdev, conn)) { 5408 - err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5409 - MGMT_STATUS_BUSY, &rp, sizeof(rp)); 5354 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5355 + MGMT_STATUS_BUSY, &rp, sizeof(rp)); 5410 5356 goto unlock; 5411 5357 } 5412 5358 ··· 5427 5371 struct hci_request req; 5428 5372 struct hci_cp_read_tx_power req_txp_cp; 5429 5373 struct hci_cp_read_rssi req_rssi_cp; 5430 - struct pending_cmd *cmd; 5374 + struct mgmt_pending_cmd *cmd; 5431 5375 5432 5376 hci_req_init(&req, hdev); 5433 5377 req_rssi_cp.handle = cpu_to_le16(conn->handle); ··· 5475 5419 rp.tx_power = conn->tx_power; 5476 5420 rp.max_tx_power = conn->max_tx_power; 5477 5421 5478 - err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5479 - MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 5422 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CONN_INFO, 5423 + MGMT_STATUS_SUCCESS, &rp, sizeof(rp)); 5480 5424 } 5481 5425 5482 5426 unlock: ··· 5484 5428 return err; 5485 5429 } 5486 5430 5487 - static int clock_info_cmd_complete(struct pending_cmd *cmd, u8 status) 5431 + static int clock_info_cmd_complete(struct mgmt_pending_cmd *cmd, u8 status) 5488 5432 { 5489 5433 struct hci_conn *conn = cmd->user_data; 5490 5434 struct mgmt_rp_get_clock_info rp; ··· 5509 5453 } 5510 5454 5511 5455 complete: 5512 - err = cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp, 5513 - sizeof(rp)); 5456 + err = mgmt_cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp, 5457 + sizeof(rp)); 5514 5458 5515 5459 if (conn) { 5516 5460 hci_conn_drop(conn); ··· 5523 5467 static void get_clock_info_complete(struct hci_dev *hdev, u8 status, u16 opcode) 5524 5468 { 5525 5469 struct hci_cp_read_clock *hci_cp; 5526 - struct pending_cmd *cmd; 5470 + struct mgmt_pending_cmd *cmd; 5527 5471 struct hci_conn *conn; 5528 5472 5529 5473 BT_DBG("%s status %u", hdev->name, status); ··· 5558 5502 struct mgmt_cp_get_clock_info *cp = data; 5559 5503 struct mgmt_rp_get_clock_info rp; 5560 5504 struct hci_cp_read_clock hci_cp; 5561 - struct pending_cmd *cmd; 5505 + struct mgmt_pending_cmd *cmd; 5562 5506 struct hci_request req; 5563 5507 struct hci_conn *conn; 5564 5508 int err; ··· 5570 5514 rp.addr.type = cp->addr.type; 5571 5515 5572 5516 if (cp->addr.type != BDADDR_BREDR) 5573 - return cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 5574 - MGMT_STATUS_INVALID_PARAMS, 5575 - &rp, sizeof(rp)); 5517 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 5518 + MGMT_STATUS_INVALID_PARAMS, 5519 + &rp, sizeof(rp)); 5576 5520 5577 5521 hci_dev_lock(hdev); 5578 5522 5579 5523 if (!hdev_is_powered(hdev)) { 5580 - err = cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 5581 - MGMT_STATUS_NOT_POWERED, &rp, sizeof(rp)); 5524 + err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_CLOCK_INFO, 5525 + MGMT_STATUS_NOT_POWERED, &rp, 5526 + sizeof(rp)); 5582 5527 goto unlock; 5583 5528 } 5584 5529 ··· 5587 5530 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, 5588 5531 &cp->addr.bdaddr); 5589 5532 if (!conn || conn->state != BT_CONNECTED) { 5590 - err = cmd_complete(sk, hdev->id, 5591 - MGMT_OP_GET_CLOCK_INFO, 5592 - MGMT_STATUS_NOT_CONNECTED, 5593 - &rp, sizeof(rp)); 5533 + err = mgmt_cmd_complete(sk, hdev->id, 5534 + MGMT_OP_GET_CLOCK_INFO, 5535 + MGMT_STATUS_NOT_CONNECTED, 5536 + &rp, sizeof(rp)); 5594 5537 goto unlock; 5595 5538 } 5596 5539 } else { ··· 5701 5644 5702 5645 static void add_device_complete(struct hci_dev *hdev, u8 status, u16 opcode) 5703 5646 { 5704 - struct pending_cmd *cmd; 5647 + struct mgmt_pending_cmd *cmd; 5705 5648 5706 5649 BT_DBG("status 0x%02x", status); 5707 5650 ··· 5722 5665 void *data, u16 len) 5723 5666 { 5724 5667 struct mgmt_cp_add_device *cp = data; 5725 - struct pending_cmd *cmd; 5668 + struct mgmt_pending_cmd *cmd; 5726 5669 struct hci_request req; 5727 5670 u8 auto_conn, addr_type; 5728 5671 int err; ··· 5731 5674 5732 5675 if (!bdaddr_type_is_valid(cp->addr.type) || 5733 5676 !bacmp(&cp->addr.bdaddr, BDADDR_ANY)) 5734 - return cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 5735 - MGMT_STATUS_INVALID_PARAMS, 5736 - &cp->addr, sizeof(cp->addr)); 5677 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 5678 + MGMT_STATUS_INVALID_PARAMS, 5679 + &cp->addr, sizeof(cp->addr)); 5737 5680 5738 5681 if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02) 5739 - return cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 5740 - MGMT_STATUS_INVALID_PARAMS, 5741 - &cp->addr, sizeof(cp->addr)); 5682 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE, 5683 + MGMT_STATUS_INVALID_PARAMS, 5684 + &cp->addr, sizeof(cp->addr)); 5742 5685 5743 5686 hci_req_init(&req, hdev); 5744 5687 ··· 5824 5767 5825 5768 static void remove_device_complete(struct hci_dev *hdev, u8 status, u16 opcode) 5826 5769 { 5827 - struct pending_cmd *cmd; 5770 + struct mgmt_pending_cmd *cmd; 5828 5771 5829 5772 BT_DBG("status 0x%02x", status); 5830 5773 ··· 5845 5788 void *data, u16 len) 5846 5789 { 5847 5790 struct mgmt_cp_remove_device *cp = data; 5848 - struct pending_cmd *cmd; 5791 + struct mgmt_pending_cmd *cmd; 5849 5792 struct hci_request req; 5850 5793 int err; 5851 5794 ··· 5978 5921 int i; 5979 5922 5980 5923 if (!lmp_le_capable(hdev)) 5981 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 5982 - MGMT_STATUS_NOT_SUPPORTED); 5924 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 5925 + MGMT_STATUS_NOT_SUPPORTED); 5983 5926 5984 5927 param_count = __le16_to_cpu(cp->param_count); 5985 5928 if (param_count > max_param_count) { 5986 5929 BT_ERR("load_conn_param: too big param_count value %u", 5987 5930 param_count); 5988 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 5989 - MGMT_STATUS_INVALID_PARAMS); 5931 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 5932 + MGMT_STATUS_INVALID_PARAMS); 5990 5933 } 5991 5934 5992 5935 expected_len = sizeof(*cp) + param_count * ··· 5994 5937 if (expected_len != len) { 5995 5938 BT_ERR("load_conn_param: expected %u bytes, got %u bytes", 5996 5939 expected_len, len); 5997 - return cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 5998 - MGMT_STATUS_INVALID_PARAMS); 5940 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 5941 + MGMT_STATUS_INVALID_PARAMS); 5999 5942 } 6000 5943 6001 5944 BT_DBG("%s param_count %u", hdev->name, param_count); ··· 6050 5993 6051 5994 hci_dev_unlock(hdev); 6052 5995 6053 - return cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0, NULL, 0); 5996 + return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_LOAD_CONN_PARAM, 0, 5997 + NULL, 0); 6054 5998 } 6055 5999 6056 6000 static int set_external_config(struct sock *sk, struct hci_dev *hdev, ··· 6064 6006 BT_DBG("%s", hdev->name); 6065 6007 6066 6008 if (hdev_is_powered(hdev)) 6067 - return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 6068 - MGMT_STATUS_REJECTED); 6009 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 6010 + MGMT_STATUS_REJECTED); 6069 6011 6070 6012 if (cp->config != 0x00 && cp->config != 0x01) 6071 - return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 6072 - MGMT_STATUS_INVALID_PARAMS); 6013 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 6014 + MGMT_STATUS_INVALID_PARAMS); 6073 6015 6074 6016 if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks)) 6075 - return cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 6076 - MGMT_STATUS_NOT_SUPPORTED); 6017 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_EXTERNAL_CONFIG, 6018 + MGMT_STATUS_NOT_SUPPORTED); 6077 6019 6078 6020 hci_dev_lock(hdev); 6079 6021 6080 6022 if (cp->config) 6081 - changed = !test_and_set_bit(HCI_EXT_CONFIGURED, 6082 - &hdev->dev_flags); 6023 + changed = !hci_dev_test_and_set_flag(hdev, HCI_EXT_CONFIGURED); 6083 6024 else 6084 - changed = test_and_clear_bit(HCI_EXT_CONFIGURED, 6085 - &hdev->dev_flags); 6025 + changed = hci_dev_test_and_clear_flag(hdev, HCI_EXT_CONFIGURED); 6086 6026 6087 6027 err = send_options_rsp(sk, MGMT_OP_SET_EXTERNAL_CONFIG, hdev); 6088 6028 if (err < 0) ··· 6091 6035 6092 6036 err = new_options(hdev, sk); 6093 6037 6094 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) == is_configured(hdev)) { 6038 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) == is_configured(hdev)) { 6095 6039 mgmt_index_removed(hdev); 6096 6040 6097 - if (test_and_change_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) { 6098 - set_bit(HCI_CONFIG, &hdev->dev_flags); 6099 - set_bit(HCI_AUTO_OFF, &hdev->dev_flags); 6041 + if (hci_dev_test_and_change_flag(hdev, HCI_UNCONFIGURED)) { 6042 + hci_dev_set_flag(hdev, HCI_CONFIG); 6043 + hci_dev_set_flag(hdev, HCI_AUTO_OFF); 6100 6044 6101 6045 queue_work(hdev->req_workqueue, &hdev->power_on); 6102 6046 } else { ··· 6120 6064 BT_DBG("%s", hdev->name); 6121 6065 6122 6066 if (hdev_is_powered(hdev)) 6123 - return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 6124 - MGMT_STATUS_REJECTED); 6067 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 6068 + MGMT_STATUS_REJECTED); 6125 6069 6126 6070 if (!bacmp(&cp->bdaddr, BDADDR_ANY)) 6127 - return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 6128 - MGMT_STATUS_INVALID_PARAMS); 6071 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 6072 + MGMT_STATUS_INVALID_PARAMS); 6129 6073 6130 6074 if (!hdev->set_bdaddr) 6131 - return cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 6132 - MGMT_STATUS_NOT_SUPPORTED); 6075 + return mgmt_cmd_status(sk, hdev->id, MGMT_OP_SET_PUBLIC_ADDRESS, 6076 + MGMT_STATUS_NOT_SUPPORTED); 6133 6077 6134 6078 hci_dev_lock(hdev); 6135 6079 ··· 6143 6087 if (!changed) 6144 6088 goto unlock; 6145 6089 6146 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 6090 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 6147 6091 err = new_options(hdev, sk); 6148 6092 6149 6093 if (is_configured(hdev)) { 6150 6094 mgmt_index_removed(hdev); 6151 6095 6152 - clear_bit(HCI_UNCONFIGURED, &hdev->dev_flags); 6096 + hci_dev_clear_flag(hdev, HCI_UNCONFIGURED); 6153 6097 6154 - set_bit(HCI_CONFIG, &hdev->dev_flags); 6155 - set_bit(HCI_AUTO_OFF, &hdev->dev_flags); 6098 + hci_dev_set_flag(hdev, HCI_CONFIG); 6099 + hci_dev_set_flag(hdev, HCI_AUTO_OFF); 6156 6100 6157 6101 queue_work(hdev->req_workqueue, &hdev->power_on); 6158 6102 } ··· 6162 6106 return err; 6163 6107 } 6164 6108 6165 - static const struct mgmt_handler { 6166 - int (*func) (struct sock *sk, struct hci_dev *hdev, void *data, 6167 - u16 data_len); 6168 - bool var_len; 6169 - size_t data_len; 6170 - } mgmt_handlers[] = { 6109 + static const struct hci_mgmt_handler mgmt_handlers[] = { 6171 6110 { NULL }, /* 0x0000 (no command) */ 6172 - { read_version, false, MGMT_READ_VERSION_SIZE }, 6173 - { read_commands, false, MGMT_READ_COMMANDS_SIZE }, 6174 - { read_index_list, false, MGMT_READ_INDEX_LIST_SIZE }, 6175 - { read_controller_info, false, MGMT_READ_INFO_SIZE }, 6176 - { set_powered, false, MGMT_SETTING_SIZE }, 6177 - { set_discoverable, false, MGMT_SET_DISCOVERABLE_SIZE }, 6178 - { set_connectable, false, MGMT_SETTING_SIZE }, 6179 - { set_fast_connectable, false, MGMT_SETTING_SIZE }, 6180 - { set_bondable, false, MGMT_SETTING_SIZE }, 6181 - { set_link_security, false, MGMT_SETTING_SIZE }, 6182 - { set_ssp, false, MGMT_SETTING_SIZE }, 6183 - { set_hs, false, MGMT_SETTING_SIZE }, 6184 - { set_le, false, MGMT_SETTING_SIZE }, 6185 - { set_dev_class, false, MGMT_SET_DEV_CLASS_SIZE }, 6186 - { set_local_name, false, MGMT_SET_LOCAL_NAME_SIZE }, 6187 - { add_uuid, false, MGMT_ADD_UUID_SIZE }, 6188 - { remove_uuid, false, MGMT_REMOVE_UUID_SIZE }, 6189 - { load_link_keys, true, MGMT_LOAD_LINK_KEYS_SIZE }, 6190 - { load_long_term_keys, true, MGMT_LOAD_LONG_TERM_KEYS_SIZE }, 6191 - { disconnect, false, MGMT_DISCONNECT_SIZE }, 6192 - { get_connections, false, MGMT_GET_CONNECTIONS_SIZE }, 6193 - { pin_code_reply, false, MGMT_PIN_CODE_REPLY_SIZE }, 6194 - { pin_code_neg_reply, false, MGMT_PIN_CODE_NEG_REPLY_SIZE }, 6195 - { set_io_capability, false, MGMT_SET_IO_CAPABILITY_SIZE }, 6196 - { pair_device, false, MGMT_PAIR_DEVICE_SIZE }, 6197 - { cancel_pair_device, false, MGMT_CANCEL_PAIR_DEVICE_SIZE }, 6198 - { unpair_device, false, MGMT_UNPAIR_DEVICE_SIZE }, 6199 - { user_confirm_reply, false, MGMT_USER_CONFIRM_REPLY_SIZE }, 6200 - { user_confirm_neg_reply, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE }, 6201 - { user_passkey_reply, false, MGMT_USER_PASSKEY_REPLY_SIZE }, 6202 - { user_passkey_neg_reply, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE }, 6203 - { read_local_oob_data, false, MGMT_READ_LOCAL_OOB_DATA_SIZE }, 6204 - { add_remote_oob_data, true, MGMT_ADD_REMOTE_OOB_DATA_SIZE }, 6205 - { remove_remote_oob_data, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE }, 6206 - { start_discovery, false, MGMT_START_DISCOVERY_SIZE }, 6207 - { stop_discovery, false, MGMT_STOP_DISCOVERY_SIZE }, 6208 - { confirm_name, false, MGMT_CONFIRM_NAME_SIZE }, 6209 - { block_device, false, MGMT_BLOCK_DEVICE_SIZE }, 6210 - { unblock_device, false, MGMT_UNBLOCK_DEVICE_SIZE }, 6211 - { set_device_id, false, MGMT_SET_DEVICE_ID_SIZE }, 6212 - { set_advertising, false, MGMT_SETTING_SIZE }, 6213 - { set_bredr, false, MGMT_SETTING_SIZE }, 6214 - { set_static_address, false, MGMT_SET_STATIC_ADDRESS_SIZE }, 6215 - { set_scan_params, false, MGMT_SET_SCAN_PARAMS_SIZE }, 6216 - { set_secure_conn, false, MGMT_SETTING_SIZE }, 6217 - { set_debug_keys, false, MGMT_SETTING_SIZE }, 6218 - { set_privacy, false, MGMT_SET_PRIVACY_SIZE }, 6219 - { load_irks, true, MGMT_LOAD_IRKS_SIZE }, 6220 - { get_conn_info, false, MGMT_GET_CONN_INFO_SIZE }, 6221 - { get_clock_info, false, MGMT_GET_CLOCK_INFO_SIZE }, 6222 - { add_device, false, MGMT_ADD_DEVICE_SIZE }, 6223 - { remove_device, false, MGMT_REMOVE_DEVICE_SIZE }, 6224 - { load_conn_param, true, MGMT_LOAD_CONN_PARAM_SIZE }, 6225 - { read_unconf_index_list, false, MGMT_READ_UNCONF_INDEX_LIST_SIZE }, 6226 - { read_config_info, false, MGMT_READ_CONFIG_INFO_SIZE }, 6227 - { set_external_config, false, MGMT_SET_EXTERNAL_CONFIG_SIZE }, 6228 - { set_public_address, false, MGMT_SET_PUBLIC_ADDRESS_SIZE }, 6229 - { start_service_discovery,true, MGMT_START_SERVICE_DISCOVERY_SIZE }, 6111 + { read_version, MGMT_READ_VERSION_SIZE, 6112 + HCI_MGMT_NO_HDEV }, 6113 + { read_commands, MGMT_READ_COMMANDS_SIZE, 6114 + HCI_MGMT_NO_HDEV }, 6115 + { read_index_list, MGMT_READ_INDEX_LIST_SIZE, 6116 + HCI_MGMT_NO_HDEV }, 6117 + { read_controller_info, MGMT_READ_INFO_SIZE, 0 }, 6118 + { set_powered, MGMT_SETTING_SIZE, 0 }, 6119 + { set_discoverable, MGMT_SET_DISCOVERABLE_SIZE, 0 }, 6120 + { set_connectable, MGMT_SETTING_SIZE, 0 }, 6121 + { set_fast_connectable, MGMT_SETTING_SIZE, 0 }, 6122 + { set_bondable, MGMT_SETTING_SIZE, 0 }, 6123 + { set_link_security, MGMT_SETTING_SIZE, 0 }, 6124 + { set_ssp, MGMT_SETTING_SIZE, 0 }, 6125 + { set_hs, MGMT_SETTING_SIZE, 0 }, 6126 + { set_le, MGMT_SETTING_SIZE, 0 }, 6127 + { set_dev_class, MGMT_SET_DEV_CLASS_SIZE, 0 }, 6128 + { set_local_name, MGMT_SET_LOCAL_NAME_SIZE, 0 }, 6129 + { add_uuid, MGMT_ADD_UUID_SIZE, 0 }, 6130 + { remove_uuid, MGMT_REMOVE_UUID_SIZE, 0 }, 6131 + { load_link_keys, MGMT_LOAD_LINK_KEYS_SIZE, 6132 + HCI_MGMT_VAR_LEN }, 6133 + { load_long_term_keys, MGMT_LOAD_LONG_TERM_KEYS_SIZE, 6134 + HCI_MGMT_VAR_LEN }, 6135 + { disconnect, MGMT_DISCONNECT_SIZE, 0 }, 6136 + { get_connections, MGMT_GET_CONNECTIONS_SIZE, 0 }, 6137 + { pin_code_reply, MGMT_PIN_CODE_REPLY_SIZE, 0 }, 6138 + { pin_code_neg_reply, MGMT_PIN_CODE_NEG_REPLY_SIZE, 0 }, 6139 + { set_io_capability, MGMT_SET_IO_CAPABILITY_SIZE, 0 }, 6140 + { pair_device, MGMT_PAIR_DEVICE_SIZE, 0 }, 6141 + { cancel_pair_device, MGMT_CANCEL_PAIR_DEVICE_SIZE, 0 }, 6142 + { unpair_device, MGMT_UNPAIR_DEVICE_SIZE, 0 }, 6143 + { user_confirm_reply, MGMT_USER_CONFIRM_REPLY_SIZE, 0 }, 6144 + { user_confirm_neg_reply, MGMT_USER_CONFIRM_NEG_REPLY_SIZE, 0 }, 6145 + { user_passkey_reply, MGMT_USER_PASSKEY_REPLY_SIZE, 0 }, 6146 + { user_passkey_neg_reply, MGMT_USER_PASSKEY_NEG_REPLY_SIZE, 0 }, 6147 + { read_local_oob_data, MGMT_READ_LOCAL_OOB_DATA_SIZE }, 6148 + { add_remote_oob_data, MGMT_ADD_REMOTE_OOB_DATA_SIZE, 6149 + HCI_MGMT_VAR_LEN }, 6150 + { remove_remote_oob_data, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE, 0 }, 6151 + { start_discovery, MGMT_START_DISCOVERY_SIZE, 0 }, 6152 + { stop_discovery, MGMT_STOP_DISCOVERY_SIZE, 0 }, 6153 + { confirm_name, MGMT_CONFIRM_NAME_SIZE, 0 }, 6154 + { block_device, MGMT_BLOCK_DEVICE_SIZE, 0 }, 6155 + { unblock_device, MGMT_UNBLOCK_DEVICE_SIZE, 0 }, 6156 + { set_device_id, MGMT_SET_DEVICE_ID_SIZE, 0 }, 6157 + { set_advertising, MGMT_SETTING_SIZE, 0 }, 6158 + { set_bredr, MGMT_SETTING_SIZE, 0 }, 6159 + { set_static_address, MGMT_SET_STATIC_ADDRESS_SIZE, 0 }, 6160 + { set_scan_params, MGMT_SET_SCAN_PARAMS_SIZE, 0 }, 6161 + { set_secure_conn, MGMT_SETTING_SIZE, 0 }, 6162 + { set_debug_keys, MGMT_SETTING_SIZE, 0 }, 6163 + { set_privacy, MGMT_SET_PRIVACY_SIZE, 0 }, 6164 + { load_irks, MGMT_LOAD_IRKS_SIZE, 6165 + HCI_MGMT_VAR_LEN }, 6166 + { get_conn_info, MGMT_GET_CONN_INFO_SIZE, 0 }, 6167 + { get_clock_info, MGMT_GET_CLOCK_INFO_SIZE, 0 }, 6168 + { add_device, MGMT_ADD_DEVICE_SIZE, 0 }, 6169 + { remove_device, MGMT_REMOVE_DEVICE_SIZE, 0 }, 6170 + { load_conn_param, MGMT_LOAD_CONN_PARAM_SIZE, 6171 + HCI_MGMT_VAR_LEN }, 6172 + { read_unconf_index_list, MGMT_READ_UNCONF_INDEX_LIST_SIZE, 6173 + HCI_MGMT_NO_HDEV }, 6174 + { read_config_info, MGMT_READ_CONFIG_INFO_SIZE, 6175 + HCI_MGMT_UNCONFIGURED }, 6176 + { set_external_config, MGMT_SET_EXTERNAL_CONFIG_SIZE, 6177 + HCI_MGMT_UNCONFIGURED }, 6178 + { set_public_address, MGMT_SET_PUBLIC_ADDRESS_SIZE, 6179 + HCI_MGMT_UNCONFIGURED }, 6180 + { start_service_discovery, MGMT_START_SERVICE_DISCOVERY_SIZE, 6181 + HCI_MGMT_VAR_LEN }, 6230 6182 }; 6231 6183 6232 - int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen) 6184 + int mgmt_control(struct hci_mgmt_chan *chan, struct sock *sk, 6185 + struct msghdr *msg, size_t msglen) 6233 6186 { 6234 6187 void *buf; 6235 6188 u8 *cp; 6236 6189 struct mgmt_hdr *hdr; 6237 6190 u16 opcode, index, len; 6238 6191 struct hci_dev *hdev = NULL; 6239 - const struct mgmt_handler *handler; 6192 + const struct hci_mgmt_handler *handler; 6193 + bool var_len, no_hdev; 6240 6194 int err; 6241 6195 6242 6196 BT_DBG("got %zu bytes", msglen); ··· 6273 6207 goto done; 6274 6208 } 6275 6209 6210 + if (opcode >= chan->handler_count || 6211 + chan->handlers[opcode].func == NULL) { 6212 + BT_DBG("Unknown op %u", opcode); 6213 + err = mgmt_cmd_status(sk, index, opcode, 6214 + MGMT_STATUS_UNKNOWN_COMMAND); 6215 + goto done; 6216 + } 6217 + 6218 + handler = &chan->handlers[opcode]; 6219 + 6276 6220 if (index != MGMT_INDEX_NONE) { 6277 6221 hdev = hci_dev_get(index); 6278 6222 if (!hdev) { 6279 - err = cmd_status(sk, index, opcode, 6280 - MGMT_STATUS_INVALID_INDEX); 6223 + err = mgmt_cmd_status(sk, index, opcode, 6224 + MGMT_STATUS_INVALID_INDEX); 6281 6225 goto done; 6282 6226 } 6283 6227 6284 - if (test_bit(HCI_SETUP, &hdev->dev_flags) || 6285 - test_bit(HCI_CONFIG, &hdev->dev_flags) || 6286 - test_bit(HCI_USER_CHANNEL, &hdev->dev_flags)) { 6287 - err = cmd_status(sk, index, opcode, 6288 - MGMT_STATUS_INVALID_INDEX); 6228 + if (hci_dev_test_flag(hdev, HCI_SETUP) || 6229 + hci_dev_test_flag(hdev, HCI_CONFIG) || 6230 + hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { 6231 + err = mgmt_cmd_status(sk, index, opcode, 6232 + MGMT_STATUS_INVALID_INDEX); 6289 6233 goto done; 6290 6234 } 6291 6235 6292 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags) && 6293 - opcode != MGMT_OP_READ_CONFIG_INFO && 6294 - opcode != MGMT_OP_SET_EXTERNAL_CONFIG && 6295 - opcode != MGMT_OP_SET_PUBLIC_ADDRESS) { 6296 - err = cmd_status(sk, index, opcode, 6297 - MGMT_STATUS_INVALID_INDEX); 6236 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && 6237 + !(handler->flags & HCI_MGMT_UNCONFIGURED)) { 6238 + err = mgmt_cmd_status(sk, index, opcode, 6239 + MGMT_STATUS_INVALID_INDEX); 6298 6240 goto done; 6299 6241 } 6300 6242 } 6301 6243 6302 - if (opcode >= ARRAY_SIZE(mgmt_handlers) || 6303 - mgmt_handlers[opcode].func == NULL) { 6304 - BT_DBG("Unknown op %u", opcode); 6305 - err = cmd_status(sk, index, opcode, 6306 - MGMT_STATUS_UNKNOWN_COMMAND); 6244 + no_hdev = (handler->flags & HCI_MGMT_NO_HDEV); 6245 + if (no_hdev != !hdev) { 6246 + err = mgmt_cmd_status(sk, index, opcode, 6247 + MGMT_STATUS_INVALID_INDEX); 6307 6248 goto done; 6308 6249 } 6309 6250 6310 - if (hdev && (opcode <= MGMT_OP_READ_INDEX_LIST || 6311 - opcode == MGMT_OP_READ_UNCONF_INDEX_LIST)) { 6312 - err = cmd_status(sk, index, opcode, 6313 - MGMT_STATUS_INVALID_INDEX); 6314 - goto done; 6315 - } 6316 - 6317 - if (!hdev && (opcode > MGMT_OP_READ_INDEX_LIST && 6318 - opcode != MGMT_OP_READ_UNCONF_INDEX_LIST)) { 6319 - err = cmd_status(sk, index, opcode, 6320 - MGMT_STATUS_INVALID_INDEX); 6321 - goto done; 6322 - } 6323 - 6324 - handler = &mgmt_handlers[opcode]; 6325 - 6326 - if ((handler->var_len && len < handler->data_len) || 6327 - (!handler->var_len && len != handler->data_len)) { 6328 - err = cmd_status(sk, index, opcode, 6329 - MGMT_STATUS_INVALID_PARAMS); 6251 + var_len = (handler->flags & HCI_MGMT_VAR_LEN); 6252 + if ((var_len && len < handler->data_len) || 6253 + (!var_len && len != handler->data_len)) { 6254 + err = mgmt_cmd_status(sk, index, opcode, 6255 + MGMT_STATUS_INVALID_PARAMS); 6330 6256 goto done; 6331 6257 } 6332 6258 ··· 6349 6291 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks)) 6350 6292 return; 6351 6293 6352 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 6294 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 6353 6295 mgmt_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev, NULL, 0, NULL); 6354 6296 else 6355 6297 mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL); ··· 6367 6309 6368 6310 mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status); 6369 6311 6370 - if (test_bit(HCI_UNCONFIGURED, &hdev->dev_flags)) 6312 + if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) 6371 6313 mgmt_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev, NULL, 0, NULL); 6372 6314 else 6373 6315 mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL); ··· 6435 6377 6436 6378 hci_req_init(&req, hdev); 6437 6379 6438 - if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && 6380 + if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) && 6439 6381 !lmp_host_ssp_capable(hdev)) { 6440 6382 u8 mode = 0x01; 6441 6383 ··· 6449 6391 } 6450 6392 } 6451 6393 6452 - if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags) && 6394 + if (hci_dev_test_flag(hdev, HCI_LE_ENABLED) && 6453 6395 lmp_bredr_capable(hdev)) { 6454 6396 struct hci_cp_write_le_host_supported cp; 6455 6397 ··· 6470 6412 * advertising data. This also applies to the case 6471 6413 * where BR/EDR was toggled during the AUTO_OFF phase. 6472 6414 */ 6473 - if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { 6415 + if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { 6474 6416 update_adv_data(&req); 6475 6417 update_scan_rsp_data(&req); 6476 6418 } 6477 6419 6478 - if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) 6420 + if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) 6479 6421 enable_advertising(&req); 6480 6422 6481 6423 restart_le_actions(&req); 6482 6424 } 6483 6425 6484 - link_sec = test_bit(HCI_LINK_SECURITY, &hdev->dev_flags); 6426 + link_sec = hci_dev_test_flag(hdev, HCI_LINK_SECURITY); 6485 6427 if (link_sec != test_bit(HCI_AUTH, &hdev->flags)) 6486 6428 hci_req_add(&req, HCI_OP_WRITE_AUTH_ENABLE, 6487 6429 sizeof(link_sec), &link_sec); 6488 6430 6489 6431 if (lmp_bredr_capable(hdev)) { 6490 - write_fast_connectable(&req, false); 6432 + if (hci_dev_test_flag(hdev, HCI_FAST_CONNECTABLE)) 6433 + write_fast_connectable(&req, true); 6434 + else 6435 + write_fast_connectable(&req, false); 6491 6436 __hci_update_page_scan(&req); 6492 6437 update_class(&req); 6493 6438 update_name(&req); ··· 6506 6445 u8 status, zero_cod[] = { 0, 0, 0 }; 6507 6446 int err; 6508 6447 6509 - if (!test_bit(HCI_MGMT, &hdev->dev_flags)) 6448 + if (!hci_dev_test_flag(hdev, HCI_MGMT)) 6510 6449 return 0; 6511 6450 6512 6451 if (powered) { ··· 6527 6466 * been triggered, potentially causing misleading DISCONNECTED 6528 6467 * status responses. 6529 6468 */ 6530 - if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) 6469 + if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) 6531 6470 status = MGMT_STATUS_INVALID_INDEX; 6532 6471 else 6533 6472 status = MGMT_STATUS_NOT_POWERED; ··· 6549 6488 6550 6489 void mgmt_set_powered_failed(struct hci_dev *hdev, int err) 6551 6490 { 6552 - struct pending_cmd *cmd; 6491 + struct mgmt_pending_cmd *cmd; 6553 6492 u8 status; 6554 6493 6555 6494 cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev); ··· 6561 6500 else 6562 6501 status = MGMT_STATUS_FAILED; 6563 6502 6564 - cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status); 6503 + mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status); 6565 6504 6566 6505 mgmt_pending_remove(cmd); 6567 6506 } ··· 6577 6516 * of a timeout triggered from general discoverable, it is 6578 6517 * safe to unconditionally clear the flag. 6579 6518 */ 6580 - clear_bit(HCI_LIMITED_DISCOVERABLE, &hdev->dev_flags); 6581 - clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags); 6519 + hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); 6520 + hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); 6582 6521 6583 6522 hci_req_init(&req, hdev); 6584 - if (test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags)) { 6523 + if (hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { 6585 6524 u8 scan = SCAN_PAGE; 6586 6525 hci_req_add(&req, HCI_OP_WRITE_SCAN_ENABLE, 6587 6526 sizeof(scan), &scan); ··· 6800 6739 sizeof(*ev) + eir_len, NULL); 6801 6740 } 6802 6741 6803 - static void disconnect_rsp(struct pending_cmd *cmd, void *data) 6742 + static void disconnect_rsp(struct mgmt_pending_cmd *cmd, void *data) 6804 6743 { 6805 6744 struct sock **sk = data; 6806 6745 ··· 6812 6751 mgmt_pending_remove(cmd); 6813 6752 } 6814 6753 6815 - static void unpair_device_rsp(struct pending_cmd *cmd, void *data) 6754 + static void unpair_device_rsp(struct mgmt_pending_cmd *cmd, void *data) 6816 6755 { 6817 6756 struct hci_dev *hdev = data; 6818 6757 struct mgmt_cp_unpair_device *cp = cmd->param; ··· 6825 6764 6826 6765 bool mgmt_powering_down(struct hci_dev *hdev) 6827 6766 { 6828 - struct pending_cmd *cmd; 6767 + struct mgmt_pending_cmd *cmd; 6829 6768 struct mgmt_mode *cp; 6830 6769 6831 6770 cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev); ··· 6880 6819 { 6881 6820 u8 bdaddr_type = link_to_bdaddr(link_type, addr_type); 6882 6821 struct mgmt_cp_disconnect *cp; 6883 - struct pending_cmd *cmd; 6822 + struct mgmt_pending_cmd *cmd; 6884 6823 6885 6824 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE, hdev, unpair_device_rsp, 6886 6825 hdev); ··· 6935 6874 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 6936 6875 u8 status) 6937 6876 { 6938 - struct pending_cmd *cmd; 6877 + struct mgmt_pending_cmd *cmd; 6939 6878 6940 6879 cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, hdev); 6941 6880 if (!cmd) ··· 6948 6887 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr, 6949 6888 u8 status) 6950 6889 { 6951 - struct pending_cmd *cmd; 6890 + struct mgmt_pending_cmd *cmd; 6952 6891 6953 6892 cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, hdev); 6954 6893 if (!cmd) ··· 6993 6932 u8 link_type, u8 addr_type, u8 status, 6994 6933 u8 opcode) 6995 6934 { 6996 - struct pending_cmd *cmd; 6935 + struct mgmt_pending_cmd *cmd; 6997 6936 6998 6937 cmd = mgmt_pending_find(opcode, hdev); 6999 6938 if (!cmd) ··· 7054 6993 void mgmt_auth_failed(struct hci_conn *conn, u8 hci_status) 7055 6994 { 7056 6995 struct mgmt_ev_auth_failed ev; 7057 - struct pending_cmd *cmd; 6996 + struct mgmt_pending_cmd *cmd; 7058 6997 u8 status = mgmt_status(hci_status); 7059 6998 7060 6999 bacpy(&ev.addr.bdaddr, &conn->dst); ··· 7085 7024 } 7086 7025 7087 7026 if (test_bit(HCI_AUTH, &hdev->flags)) 7088 - changed = !test_and_set_bit(HCI_LINK_SECURITY, 7089 - &hdev->dev_flags); 7027 + changed = !hci_dev_test_and_set_flag(hdev, HCI_LINK_SECURITY); 7090 7028 else 7091 - changed = test_and_clear_bit(HCI_LINK_SECURITY, 7092 - &hdev->dev_flags); 7029 + changed = hci_dev_test_and_clear_flag(hdev, HCI_LINK_SECURITY); 7093 7030 7094 7031 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY, hdev, settings_rsp, 7095 7032 &match); ··· 7123 7064 if (status) { 7124 7065 u8 mgmt_err = mgmt_status(status); 7125 7066 7126 - if (enable && test_and_clear_bit(HCI_SSP_ENABLED, 7127 - &hdev->dev_flags)) { 7128 - clear_bit(HCI_HS_ENABLED, &hdev->dev_flags); 7067 + if (enable && hci_dev_test_and_clear_flag(hdev, 7068 + HCI_SSP_ENABLED)) { 7069 + hci_dev_clear_flag(hdev, HCI_HS_ENABLED); 7129 7070 new_settings(hdev, NULL); 7130 7071 } 7131 7072 ··· 7135 7076 } 7136 7077 7137 7078 if (enable) { 7138 - changed = !test_and_set_bit(HCI_SSP_ENABLED, &hdev->dev_flags); 7079 + changed = !hci_dev_test_and_set_flag(hdev, HCI_SSP_ENABLED); 7139 7080 } else { 7140 - changed = test_and_clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags); 7081 + changed = hci_dev_test_and_clear_flag(hdev, HCI_SSP_ENABLED); 7141 7082 if (!changed) 7142 - changed = test_and_clear_bit(HCI_HS_ENABLED, 7143 - &hdev->dev_flags); 7083 + changed = hci_dev_test_and_clear_flag(hdev, 7084 + HCI_HS_ENABLED); 7144 7085 else 7145 - clear_bit(HCI_HS_ENABLED, &hdev->dev_flags); 7086 + hci_dev_clear_flag(hdev, HCI_HS_ENABLED); 7146 7087 } 7147 7088 7148 7089 mgmt_pending_foreach(MGMT_OP_SET_SSP, hdev, settings_rsp, &match); ··· 7155 7096 7156 7097 hci_req_init(&req, hdev); 7157 7098 7158 - if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { 7159 - if (test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags)) 7099 + if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 7100 + if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) 7160 7101 hci_req_add(&req, HCI_OP_WRITE_SSP_DEBUG_MODE, 7161 7102 sizeof(enable), &enable); 7162 7103 update_eir(&req); ··· 7167 7108 hci_req_run(&req, NULL); 7168 7109 } 7169 7110 7170 - static void sk_lookup(struct pending_cmd *cmd, void *data) 7111 + static void sk_lookup(struct mgmt_pending_cmd *cmd, void *data) 7171 7112 { 7172 7113 struct cmd_lookup *match = data; 7173 7114 ··· 7197 7138 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status) 7198 7139 { 7199 7140 struct mgmt_cp_set_local_name ev; 7200 - struct pending_cmd *cmd; 7141 + struct mgmt_pending_cmd *cmd; 7201 7142 7202 7143 if (status) 7203 7144 return; ··· 7225 7166 u8 *rand192, u8 *hash256, u8 *rand256, 7226 7167 u8 status) 7227 7168 { 7228 - struct pending_cmd *cmd; 7169 + struct mgmt_pending_cmd *cmd; 7229 7170 7230 7171 BT_DBG("%s status %u", hdev->name, status); 7231 7172 ··· 7234 7175 return; 7235 7176 7236 7177 if (status) { 7237 - cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 7238 - mgmt_status(status)); 7178 + mgmt_cmd_status(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 7179 + mgmt_status(status)); 7239 7180 } else { 7240 7181 struct mgmt_rp_read_local_oob_data rp; 7241 7182 size_t rp_size = sizeof(rp); ··· 7250 7191 rp_size -= sizeof(rp.hash256) + sizeof(rp.rand256); 7251 7192 } 7252 7193 7253 - cmd_complete(cmd->sk, hdev->id, MGMT_OP_READ_LOCAL_OOB_DATA, 0, 7254 - &rp, rp_size); 7194 + mgmt_cmd_complete(cmd->sk, hdev->id, 7195 + MGMT_OP_READ_LOCAL_OOB_DATA, 0, 7196 + &rp, rp_size); 7255 7197 } 7256 7198 7257 7199 mgmt_pending_remove(cmd); ··· 7328 7268 static void restart_le_scan(struct hci_dev *hdev) 7329 7269 { 7330 7270 /* If controller is not scanning we are done. */ 7331 - if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags)) 7271 + if (!hci_dev_test_flag(hdev, HCI_LE_SCAN)) 7332 7272 return; 7333 7273 7334 7274 if (time_after(jiffies + DISCOV_LE_RESTART_DELAY, ··· 7340 7280 DISCOV_LE_RESTART_DELAY); 7341 7281 } 7342 7282 7283 + static bool is_filter_match(struct hci_dev *hdev, s8 rssi, u8 *eir, 7284 + u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len) 7285 + { 7286 + /* If a RSSI threshold has been specified, and 7287 + * HCI_QUIRK_STRICT_DUPLICATE_FILTER is not set, then all results with 7288 + * a RSSI smaller than the RSSI threshold will be dropped. If the quirk 7289 + * is set, let it through for further processing, as we might need to 7290 + * restart the scan. 7291 + * 7292 + * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry, 7293 + * the results are also dropped. 7294 + */ 7295 + if (hdev->discovery.rssi != HCI_RSSI_INVALID && 7296 + (rssi == HCI_RSSI_INVALID || 7297 + (rssi < hdev->discovery.rssi && 7298 + !test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)))) 7299 + return false; 7300 + 7301 + if (hdev->discovery.uuid_count != 0) { 7302 + /* If a list of UUIDs is provided in filter, results with no 7303 + * matching UUID should be dropped. 7304 + */ 7305 + if (!eir_has_uuids(eir, eir_len, hdev->discovery.uuid_count, 7306 + hdev->discovery.uuids) && 7307 + !eir_has_uuids(scan_rsp, scan_rsp_len, 7308 + hdev->discovery.uuid_count, 7309 + hdev->discovery.uuids)) 7310 + return false; 7311 + } 7312 + 7313 + /* If duplicate filtering does not report RSSI changes, then restart 7314 + * scanning to ensure updated result with updated RSSI values. 7315 + */ 7316 + if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)) { 7317 + restart_le_scan(hdev); 7318 + 7319 + /* Validate RSSI value against the RSSI threshold once more. */ 7320 + if (hdev->discovery.rssi != HCI_RSSI_INVALID && 7321 + rssi < hdev->discovery.rssi) 7322 + return false; 7323 + } 7324 + 7325 + return true; 7326 + } 7327 + 7343 7328 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, 7344 7329 u8 addr_type, u8 *dev_class, s8 rssi, u32 flags, 7345 7330 u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len) 7346 7331 { 7347 7332 char buf[512]; 7348 - struct mgmt_ev_device_found *ev = (void *) buf; 7333 + struct mgmt_ev_device_found *ev = (void *)buf; 7349 7334 size_t ev_size; 7350 - bool match; 7351 7335 7352 7336 /* Don't send events for a non-kernel initiated discovery. With 7353 7337 * LE one exception is if we have pend_le_reports > 0 in which ··· 7404 7300 return; 7405 7301 } 7406 7302 7407 - /* When using service discovery with a RSSI threshold, then check 7408 - * if such a RSSI threshold is specified. If a RSSI threshold has 7409 - * been specified, and HCI_QUIRK_STRICT_DUPLICATE_FILTER is not set, 7410 - * then all results with a RSSI smaller than the RSSI threshold will be 7411 - * dropped. If the quirk is set, let it through for further processing, 7412 - * as we might need to restart the scan. 7413 - * 7414 - * For BR/EDR devices (pre 1.2) providing no RSSI during inquiry, 7415 - * the results are also dropped. 7416 - */ 7417 - if (hdev->discovery.rssi != HCI_RSSI_INVALID && 7418 - (rssi == HCI_RSSI_INVALID || 7419 - (rssi < hdev->discovery.rssi && 7420 - !test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks)))) 7421 - return; 7303 + if (hdev->discovery.result_filtering) { 7304 + /* We are using service discovery */ 7305 + if (!is_filter_match(hdev, rssi, eir, eir_len, scan_rsp, 7306 + scan_rsp_len)) 7307 + return; 7308 + } 7422 7309 7423 7310 /* Make sure that the buffer is big enough. The 5 extra bytes 7424 7311 * are for the potential CoD field. ··· 7436 7341 ev->rssi = rssi; 7437 7342 ev->flags = cpu_to_le32(flags); 7438 7343 7439 - if (eir_len > 0) { 7440 - /* When using service discovery and a list of UUID is 7441 - * provided, results with no matching UUID should be 7442 - * dropped. In case there is a match the result is 7443 - * kept and checking possible scan response data 7444 - * will be skipped. 7445 - */ 7446 - if (hdev->discovery.uuid_count > 0) { 7447 - match = eir_has_uuids(eir, eir_len, 7448 - hdev->discovery.uuid_count, 7449 - hdev->discovery.uuids); 7450 - /* If duplicate filtering does not report RSSI changes, 7451 - * then restart scanning to ensure updated result with 7452 - * updated RSSI values. 7453 - */ 7454 - if (match && test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, 7455 - &hdev->quirks)) 7456 - restart_le_scan(hdev); 7457 - } else { 7458 - match = true; 7459 - } 7460 - 7461 - if (!match && !scan_rsp_len) 7462 - return; 7463 - 7344 + if (eir_len > 0) 7464 7345 /* Copy EIR or advertising data into event */ 7465 7346 memcpy(ev->eir, eir, eir_len); 7466 - } else { 7467 - /* When using service discovery and a list of UUID is 7468 - * provided, results with empty EIR or advertising data 7469 - * should be dropped since they do not match any UUID. 7470 - */ 7471 - if (hdev->discovery.uuid_count > 0 && !scan_rsp_len) 7472 - return; 7473 - 7474 - match = false; 7475 - } 7476 7347 7477 7348 if (dev_class && !eir_has_data_type(ev->eir, eir_len, EIR_CLASS_OF_DEV)) 7478 7349 eir_len = eir_append_data(ev->eir, eir_len, EIR_CLASS_OF_DEV, 7479 7350 dev_class, 3); 7480 7351 7481 - if (scan_rsp_len > 0) { 7482 - /* When using service discovery and a list of UUID is 7483 - * provided, results with no matching UUID should be 7484 - * dropped if there is no previous match from the 7485 - * advertising data. 7486 - */ 7487 - if (hdev->discovery.uuid_count > 0) { 7488 - if (!match && !eir_has_uuids(scan_rsp, scan_rsp_len, 7489 - hdev->discovery.uuid_count, 7490 - hdev->discovery.uuids)) 7491 - return; 7492 - 7493 - /* If duplicate filtering does not report RSSI changes, 7494 - * then restart scanning to ensure updated result with 7495 - * updated RSSI values. 7496 - */ 7497 - if (test_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, 7498 - &hdev->quirks)) 7499 - restart_le_scan(hdev); 7500 - } 7501 - 7352 + if (scan_rsp_len > 0) 7502 7353 /* Append scan response data to event */ 7503 7354 memcpy(ev->eir + eir_len, scan_rsp, scan_rsp_len); 7504 - } else { 7505 - /* When using service discovery and a list of UUID is 7506 - * provided, results with empty scan response and no 7507 - * previous matched advertising data should be dropped. 7508 - */ 7509 - if (hdev->discovery.uuid_count > 0 && !match) 7510 - return; 7511 - } 7512 - 7513 - /* Validate the reported RSSI value against the RSSI threshold once more 7514 - * incase HCI_QUIRK_STRICT_DUPLICATE_FILTER forced a restart of LE 7515 - * scanning. 7516 - */ 7517 - if (hdev->discovery.rssi != HCI_RSSI_INVALID && 7518 - rssi < hdev->discovery.rssi) 7519 - return; 7520 7355 7521 7356 ev->eir_len = cpu_to_le16(eir_len + scan_rsp_len); 7522 7357 ev_size = sizeof(*ev) + eir_len + scan_rsp_len; ··· 7499 7474 { 7500 7475 struct hci_request req; 7501 7476 7502 - if (!test_bit(HCI_ADVERTISING, &hdev->dev_flags)) 7477 + if (!hci_dev_test_flag(hdev, HCI_ADVERTISING)) 7503 7478 return; 7504 7479 7505 7480 hci_req_init(&req, hdev); 7506 7481 enable_advertising(&req); 7507 7482 hci_req_run(&req, adv_enable_complete); 7483 + } 7484 + 7485 + static struct hci_mgmt_chan chan = { 7486 + .channel = HCI_CHANNEL_CONTROL, 7487 + .handler_count = ARRAY_SIZE(mgmt_handlers), 7488 + .handlers = mgmt_handlers, 7489 + }; 7490 + 7491 + int mgmt_init(void) 7492 + { 7493 + return hci_mgmt_chan_register(&chan); 7494 + } 7495 + 7496 + void mgmt_exit(void) 7497 + { 7498 + hci_mgmt_chan_unregister(&chan); 7508 7499 }
+1 -1
net/bluetooth/sco.c
··· 1231 1231 return err; 1232 1232 } 1233 1233 1234 - void __exit sco_exit(void) 1234 + void sco_exit(void) 1235 1235 { 1236 1236 bt_procfs_cleanup(&init_net, "sco"); 1237 1237
+31 -31
net/bluetooth/smp.c
··· 52 52 53 53 #define SMP_TIMEOUT msecs_to_jiffies(30000) 54 54 55 - #define AUTH_REQ_MASK(dev) (test_bit(HCI_SC_ENABLED, &(dev)->dev_flags) ? \ 55 + #define AUTH_REQ_MASK(dev) (hci_dev_test_flag(dev, HCI_SC_ENABLED) ? \ 56 56 0x1f : 0x07) 57 57 #define KEY_DIST_MASK 0x07 58 58 ··· 589 589 struct hci_dev *hdev = hcon->hdev; 590 590 u8 local_dist = 0, remote_dist = 0, oob_flag = SMP_OOB_NOT_PRESENT; 591 591 592 - if (test_bit(HCI_BONDABLE, &conn->hcon->hdev->dev_flags)) { 592 + if (hci_dev_test_flag(hdev, HCI_BONDABLE)) { 593 593 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN; 594 594 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN; 595 595 authreq |= SMP_AUTH_BONDING; ··· 597 597 authreq &= ~SMP_AUTH_BONDING; 598 598 } 599 599 600 - if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags)) 600 + if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING)) 601 601 remote_dist |= SMP_DIST_ID_KEY; 602 602 603 - if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) 603 + if (hci_dev_test_flag(hdev, HCI_PRIVACY)) 604 604 local_dist |= SMP_DIST_ID_KEY; 605 605 606 - if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags) && 606 + if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) && 607 607 (authreq & SMP_AUTH_SC)) { 608 608 struct oob_data *oob_data; 609 609 u8 bdaddr_type; 610 610 611 - if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { 611 + if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { 612 612 local_dist |= SMP_DIST_LINK_KEY; 613 613 remote_dist |= SMP_DIST_LINK_KEY; 614 614 } ··· 692 692 * support hasn't been explicitly enabled. 693 693 */ 694 694 if (smp->ltk && smp->ltk->type == SMP_LTK_P256_DEBUG && 695 - !test_bit(HCI_KEEP_DEBUG_KEYS, &hcon->hdev->dev_flags)) { 695 + !hci_dev_test_flag(hcon->hdev, HCI_KEEP_DEBUG_KEYS)) { 696 696 list_del_rcu(&smp->ltk->list); 697 697 kfree_rcu(smp->ltk, rcu); 698 698 smp->ltk = NULL; ··· 1052 1052 /* Don't keep debug keys around if the relevant 1053 1053 * flag is not set. 1054 1054 */ 1055 - if (!test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags) && 1055 + if (!hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS) && 1056 1056 key->type == HCI_LK_DEBUG_COMBINATION) { 1057 1057 list_del_rcu(&key->list); 1058 1058 kfree_rcu(key, rcu); ··· 1604 1604 struct hci_dev *hdev = conn->hcon->hdev; 1605 1605 u8 local_dist = 0, remote_dist = 0; 1606 1606 1607 - if (test_bit(HCI_BONDABLE, &hdev->dev_flags)) { 1607 + if (hci_dev_test_flag(hdev, HCI_BONDABLE)) { 1608 1608 local_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN; 1609 1609 remote_dist = SMP_DIST_ENC_KEY | SMP_DIST_SIGN; 1610 1610 } 1611 1611 1612 - if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags)) 1612 + if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING)) 1613 1613 remote_dist |= SMP_DIST_ID_KEY; 1614 1614 1615 - if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) 1615 + if (hci_dev_test_flag(hdev, HCI_PRIVACY)) 1616 1616 local_dist |= SMP_DIST_ID_KEY; 1617 1617 1618 1618 if (!rsp) { ··· 1664 1664 /* We didn't start the pairing, so match remote */ 1665 1665 auth = req->auth_req & AUTH_REQ_MASK(hdev); 1666 1666 1667 - if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) && 1667 + if (!hci_dev_test_flag(hdev, HCI_BONDABLE) && 1668 1668 (auth & SMP_AUTH_BONDING)) 1669 1669 return SMP_PAIRING_NOTSUPP; 1670 1670 1671 - if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && !(auth & SMP_AUTH_SC)) 1671 + if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC)) 1672 1672 return SMP_AUTH_REQUIREMENTS; 1673 1673 1674 1674 smp->preq[0] = SMP_CMD_PAIRING_REQ; ··· 1679 1679 if (conn->hcon->type == ACL_LINK) { 1680 1680 /* We must have a BR/EDR SC link */ 1681 1681 if (!test_bit(HCI_CONN_AES_CCM, &conn->hcon->flags) && 1682 - !test_bit(HCI_FORCE_BREDR_SMP, &hdev->dbg_flags)) 1682 + !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP)) 1683 1683 return SMP_CROSS_TRANSP_NOT_ALLOWED; 1684 1684 1685 1685 set_bit(SMP_FLAG_SC, &smp->flags); ··· 1743 1743 smp->remote_key_dist &= ~SMP_SC_NO_DIST; 1744 1744 /* Wait for Public Key from Initiating Device */ 1745 1745 return 0; 1746 - } else { 1747 - SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM); 1748 1746 } 1747 + 1748 + SMP_ALLOW_CMD(smp, SMP_CMD_PAIRING_CONFIRM); 1749 1749 1750 1750 /* Request setup of TK */ 1751 1751 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability); ··· 1761 1761 1762 1762 BT_DBG(""); 1763 1763 1764 - if (test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags)) { 1764 + if (hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS)) { 1765 1765 BT_DBG("Using debug keys"); 1766 1766 memcpy(smp->local_pk, debug_pk, 64); 1767 1767 memcpy(smp->local_sk, debug_sk, 32); ··· 1816 1816 1817 1817 auth = rsp->auth_req & AUTH_REQ_MASK(hdev); 1818 1818 1819 - if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && !(auth & SMP_AUTH_SC)) 1819 + if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC)) 1820 1820 return SMP_AUTH_REQUIREMENTS; 1821 1821 1822 1822 smp->prsp[0] = SMP_CMD_PAIRING_RSP; ··· 1926 1926 1927 1927 if (test_bit(SMP_FLAG_TK_VALID, &smp->flags)) 1928 1928 return smp_confirm(smp); 1929 - else 1930 - set_bit(SMP_FLAG_CFM_PENDING, &smp->flags); 1929 + 1930 + set_bit(SMP_FLAG_CFM_PENDING, &smp->flags); 1931 1931 1932 1932 return 0; 1933 1933 } ··· 2086 2086 2087 2087 auth = rp->auth_req & AUTH_REQ_MASK(hdev); 2088 2088 2089 - if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) && !(auth & SMP_AUTH_SC)) 2089 + if (hci_dev_test_flag(hdev, HCI_SC_ONLY) && !(auth & SMP_AUTH_SC)) 2090 2090 return SMP_AUTH_REQUIREMENTS; 2091 2091 2092 2092 if (hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT) ··· 2107 2107 if (!smp) 2108 2108 return SMP_UNSPECIFIED; 2109 2109 2110 - if (!test_bit(HCI_BONDABLE, &hcon->hdev->dev_flags) && 2110 + if (!hci_dev_test_flag(hdev, HCI_BONDABLE) && 2111 2111 (auth & SMP_AUTH_BONDING)) 2112 2112 return SMP_PAIRING_NOTSUPP; 2113 2113 ··· 2141 2141 2142 2142 chan = conn->smp; 2143 2143 2144 - if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) 2144 + if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED)) 2145 2145 return 1; 2146 2146 2147 2147 if (smp_sufficient_security(hcon, sec_level, SMP_USE_LTK)) ··· 2170 2170 2171 2171 authreq = seclevel_to_authreq(sec_level); 2172 2172 2173 - if (test_bit(HCI_SC_ENABLED, &hcon->hdev->dev_flags)) 2173 + if (hci_dev_test_flag(hcon->hdev, HCI_SC_ENABLED)) 2174 2174 authreq |= SMP_AUTH_SC; 2175 2175 2176 2176 /* Require MITM if IO Capability allows or the security level ··· 2606 2606 if (skb->len < 1) 2607 2607 return -EILSEQ; 2608 2608 2609 - if (!test_bit(HCI_LE_ENABLED, &hcon->hdev->dev_flags)) { 2609 + if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED)) { 2610 2610 reason = SMP_PAIRING_NOTSUPP; 2611 2611 goto done; 2612 2612 } ··· 2744 2744 return; 2745 2745 2746 2746 /* Secure Connections support must be enabled */ 2747 - if (!test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) 2747 + if (!hci_dev_test_flag(hdev, HCI_SC_ENABLED)) 2748 2748 return; 2749 2749 2750 2750 /* BR/EDR must use Secure Connections for SMP */ 2751 2751 if (!test_bit(HCI_CONN_AES_CCM, &hcon->flags) && 2752 - !test_bit(HCI_FORCE_BREDR_SMP, &hdev->dbg_flags)) 2752 + !hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP)) 2753 2753 return; 2754 2754 2755 2755 /* If our LE support is not enabled don't do anything */ 2756 - if (!test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) 2756 + if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) 2757 2757 return; 2758 2758 2759 2759 /* Don't bother if remote LE support is not enabled */ ··· 3003 3003 struct hci_dev *hdev = file->private_data; 3004 3004 char buf[3]; 3005 3005 3006 - buf[0] = test_bit(HCI_FORCE_BREDR_SMP, &hdev->dbg_flags) ? 'Y': 'N'; 3006 + buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP) ? 'Y': 'N'; 3007 3007 buf[1] = '\n'; 3008 3008 buf[2] = '\0'; 3009 3009 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); ··· 3025 3025 if (strtobool(buf, &enable)) 3026 3026 return -EINVAL; 3027 3027 3028 - if (enable == test_bit(HCI_FORCE_BREDR_SMP, &hdev->dbg_flags)) 3028 + if (enable == hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP)) 3029 3029 return -EALREADY; 3030 3030 3031 3031 if (enable) { ··· 3044 3044 smp_del_chan(chan); 3045 3045 } 3046 3046 3047 - change_bit(HCI_FORCE_BREDR_SMP, &hdev->dbg_flags); 3047 + hci_dev_change_flag(hdev, HCI_FORCE_BREDR_SMP); 3048 3048 3049 3049 return count; 3050 3050 }
+1 -1
net/ieee802154/6lowpan/core.c
··· 113 113 { 114 114 dev->addr_len = IEEE802154_ADDR_LEN; 115 115 memset(dev->broadcast, 0xff, IEEE802154_ADDR_LEN); 116 - dev->type = ARPHRD_IEEE802154; 116 + dev->type = ARPHRD_6LOWPAN; 117 117 /* Frame Control + Sequence Number + Address fields + Security Header */ 118 118 dev->hard_header_len = 2 + 1 + 20 + 14; 119 119 dev->needed_tailroom = 2; /* FCS */
+4 -1
net/ieee802154/core.c
··· 25 25 #include "sysfs.h" 26 26 #include "core.h" 27 27 28 + /* name for sysfs, %d is appended */ 29 + #define PHY_NAME "phy" 30 + 28 31 /* RCU-protected (and RTNL for writers) */ 29 32 LIST_HEAD(cfg802154_rdev_list); 30 33 int cfg802154_rdev_list_generation; ··· 125 122 126 123 INIT_LIST_HEAD(&rdev->wpan_dev_list); 127 124 device_initialize(&rdev->wpan_phy.dev); 128 - dev_set_name(&rdev->wpan_phy.dev, "wpan-phy%d", rdev->wpan_phy_idx); 125 + dev_set_name(&rdev->wpan_phy.dev, PHY_NAME "%d", rdev->wpan_phy_idx); 129 126 130 127 rdev->wpan_phy.dev.class = &wpan_phy_class; 131 128 rdev->wpan_phy.dev.platform_data = rdev;
-1
net/ieee802154/nl-mac.c
··· 76 76 nlmsg_free(msg); 77 77 return -ENOBUFS; 78 78 } 79 - EXPORT_SYMBOL(ieee802154_nl_start_confirm); 80 79 81 80 static int ieee802154_nl_fill_iface(struct sk_buff *msg, u32 portid, 82 81 u32 seq, int flags, struct net_device *dev)
-49
net/ieee802154/sysfs.c
··· 48 48 } 49 49 static DEVICE_ATTR_RO(name); 50 50 51 - #define MASTER_SHOW_COMPLEX(name, format_string, args...) \ 52 - static ssize_t name ## _show(struct device *dev, \ 53 - struct device_attribute *attr, char *buf) \ 54 - { \ 55 - struct wpan_phy *phy = container_of(dev, struct wpan_phy, dev); \ 56 - int ret; \ 57 - \ 58 - mutex_lock(&phy->pib_lock); \ 59 - ret = snprintf(buf, PAGE_SIZE, format_string "\n", args); \ 60 - mutex_unlock(&phy->pib_lock); \ 61 - return ret; \ 62 - } \ 63 - static DEVICE_ATTR_RO(name) 64 - 65 - #define MASTER_SHOW(field, format_string) \ 66 - MASTER_SHOW_COMPLEX(field, format_string, phy->field) 67 - 68 - MASTER_SHOW(current_channel, "%d"); 69 - MASTER_SHOW(current_page, "%d"); 70 - MASTER_SHOW(transmit_power, "%d +- 1 dB"); 71 - MASTER_SHOW_COMPLEX(cca_mode, "%d", phy->cca.mode); 72 - 73 - static ssize_t channels_supported_show(struct device *dev, 74 - struct device_attribute *attr, 75 - char *buf) 76 - { 77 - struct wpan_phy *phy = container_of(dev, struct wpan_phy, dev); 78 - int ret; 79 - int i, len = 0; 80 - 81 - mutex_lock(&phy->pib_lock); 82 - for (i = 0; i < 32; i++) { 83 - ret = snprintf(buf + len, PAGE_SIZE - len, 84 - "%#09x\n", phy->channels_supported[i]); 85 - if (ret < 0) 86 - break; 87 - len += ret; 88 - } 89 - mutex_unlock(&phy->pib_lock); 90 - return len; 91 - } 92 - static DEVICE_ATTR_RO(channels_supported); 93 - 94 51 static void wpan_phy_release(struct device *dev) 95 52 { 96 53 struct cfg802154_registered_device *rdev = dev_to_rdev(dev); ··· 58 101 static struct attribute *pmib_attrs[] = { 59 102 &dev_attr_index.attr, 60 103 &dev_attr_name.attr, 61 - /* below will be removed soon */ 62 - &dev_attr_current_channel.attr, 63 - &dev_attr_current_page.attr, 64 - &dev_attr_channels_supported.attr, 65 - &dev_attr_transmit_power.attr, 66 - &dev_attr_cca_mode.attr, 67 104 NULL, 68 105 }; 69 106 ATTRIBUTE_GROUPS(pmib);
+12 -1
net/mac802154/util.c
··· 65 65 { 66 66 if (ifs_handling) { 67 67 struct ieee802154_local *local = hw_to_local(hw); 68 + u8 max_sifs_size; 68 69 69 - if (skb->len > 18) 70 + /* If transceiver sets CRC on his own we need to use lifs 71 + * threshold len above 16 otherwise 18, because it's not 72 + * part of skb->len. 73 + */ 74 + if (hw->flags & IEEE802154_HW_TX_OMIT_CKSUM) 75 + max_sifs_size = IEEE802154_MAX_SIFS_FRAME_SIZE - 76 + IEEE802154_FCS_LEN; 77 + else 78 + max_sifs_size = IEEE802154_MAX_SIFS_FRAME_SIZE; 79 + 80 + if (skb->len > max_sifs_size) 70 81 hrtimer_start(&local->ifs_timer, 71 82 ktime_set(0, hw->phy->lifs_period * NSEC_PER_USEC), 72 83 HRTIMER_MODE_REL);