aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-07-02 10:37:26 -0400
committerMarcel Holtmann <marcel@holtmann.org>2014-07-03 11:42:56 -0400
commit55af49a8fe85278ea244e72d2d264cf5e0941c61 (patch)
treee3bfd77100187acca4f8d872b28eaf43421b81fa
parent373110c5d30b0944b47cddbe586069b7457f8845 (diff)
Bluetooth: Add specific connection parameter clear functions
In some circumstances we'll need to either clear only the enabled parameters or only the disabled ones. This patch adds convenience functions for this purpose. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
-rw-r--r--include/net/bluetooth/hci_core.h2
-rw-r--r--net/bluetooth/hci_core.c32
2 files changed, 34 insertions, 0 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 091934bcfd84..2091e0013b8c 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -862,6 +862,8 @@ int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
862 u8 auto_connect); 862 u8 auto_connect);
863void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type); 863void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
864void hci_conn_params_clear_all(struct hci_dev *hdev); 864void hci_conn_params_clear_all(struct hci_dev *hdev);
865void hci_conn_params_clear_disabled(struct hci_dev *hdev);
866void hci_conn_params_clear_enabled(struct hci_dev *hdev);
865 867
866struct bdaddr_list *hci_pend_le_conn_lookup(struct hci_dev *hdev, 868struct bdaddr_list *hci_pend_le_conn_lookup(struct hci_dev *hdev,
867 bdaddr_t *addr, u8 addr_type); 869 bdaddr_t *addr, u8 addr_type);
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index e6e169007fd2..7e46a7c6092f 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -3580,6 +3580,38 @@ void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
3580} 3580}
3581 3581
3582/* This function requires the caller holds hdev->lock */ 3582/* This function requires the caller holds hdev->lock */
3583void hci_conn_params_clear_disabled(struct hci_dev *hdev)
3584{
3585 struct hci_conn_params *params, *tmp;
3586
3587 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
3588 if (params->auto_connect != HCI_AUTO_CONN_DISABLED)
3589 continue;
3590 list_del(&params->list);
3591 kfree(params);
3592 }
3593
3594 BT_DBG("All LE disabled connection parameters were removed");
3595}
3596
3597/* This function requires the caller holds hdev->lock */
3598void hci_conn_params_clear_enabled(struct hci_dev *hdev)
3599{
3600 struct hci_conn_params *params, *tmp;
3601
3602 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
3603 if (params->auto_connect == HCI_AUTO_CONN_DISABLED)
3604 continue;
3605 list_del(&params->list);
3606 kfree(params);
3607 }
3608
3609 hci_pend_le_conns_clear(hdev);
3610
3611 BT_DBG("All enabled LE connection parameters were removed");
3612}
3613
3614/* This function requires the caller holds hdev->lock */
3583void hci_conn_params_clear_all(struct hci_dev *hdev) 3615void hci_conn_params_clear_all(struct hci_dev *hdev)
3584{ 3616{
3585 struct hci_conn_params *params, *tmp; 3617 struct hci_conn_params *params, *tmp;