aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-07-02 22:42:00 +0300
committerMarcel Holtmann <marcel@holtmann.org>2014-07-03 17:42:58 +0200
commit851efca8387e10a25ca259f7efcc47819b19bff9 (patch)
tree91644ae618384fdec8b351be5b21998ed718ddaa /net/bluetooth
parentBluetooth: Support HCI_QUIRK_RAW_DEVICE for hci_vhci driver (diff)
downloadlinux-dev-851efca8387e10a25ca259f7efcc47819b19bff9.tar.xz
linux-dev-851efca8387e10a25ca259f7efcc47819b19bff9.zip
Bluetooth: Track number of added devices with HCI_AUTO_CONN_REPORT
To be able to make the right choice of whether to start passive scanning or to send out a mgmt_device_found event we need to know if there are any devices in the le_conn_params list with the auto_connect value set to HCI_AUTO_CONN_REPORT. This patch adds a counter for this kind of devices. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth')
-rw-r--r--net/bluetooth/hci_core.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index df25a8329ecc..8e0061f72dd1 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -3545,20 +3545,28 @@ int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
if (!params)
return -EIO;
- params->auto_connect = auto_connect;
+ if (params->auto_connect == HCI_AUTO_CONN_REPORT &&
+ auto_connect != HCI_AUTO_CONN_REPORT)
+ hdev->pend_le_reports--;
switch (auto_connect) {
case HCI_AUTO_CONN_DISABLED:
- case HCI_AUTO_CONN_REPORT:
case HCI_AUTO_CONN_LINK_LOSS:
hci_pend_le_conn_del(hdev, addr, addr_type);
break;
+ case HCI_AUTO_CONN_REPORT:
+ if (params->auto_connect != HCI_AUTO_CONN_REPORT)
+ hdev->pend_le_reports++;
+ hci_pend_le_conn_del(hdev, addr, addr_type);
+ break;
case HCI_AUTO_CONN_ALWAYS:
if (!is_connected(hdev, addr, addr_type))
hci_pend_le_conn_add(hdev, addr, addr_type);
break;
}
+ params->auto_connect = auto_connect;
+
BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
auto_connect);
@@ -3574,6 +3582,9 @@ void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
if (!params)
return;
+ if (params->auto_connect == HCI_AUTO_CONN_REPORT)
+ hdev->pend_le_reports--;
+
hci_pend_le_conn_del(hdev, addr, addr_type);
list_del(&params->list);
@@ -3605,6 +3616,8 @@ void hci_conn_params_clear_enabled(struct hci_dev *hdev)
list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
if (params->auto_connect == HCI_AUTO_CONN_DISABLED)
continue;
+ if (params->auto_connect == HCI_AUTO_CONN_REPORT)
+ hdev->pend_le_reports--;
list_del(&params->list);
kfree(params);
}