Commit 4b10966f authored by Marcel Holtmann's avatar Marcel Holtmann
Browse files

Bluetooth: Move hci_pend_le_conn_* functions to different location



The hci_pend_le_conn_* function should be placed before their actual
users. So move them before hci_conn_params_* functions.

Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 6ab535a7
Loading
Loading
Loading
Loading
+72 −72
Original line number Diff line number Diff line
@@ -3414,6 +3414,78 @@ static bool is_identity_address(bdaddr_t *addr, u8 addr_type)
	return false;
}

/* This function requires the caller holds hdev->lock */
struct bdaddr_list *hci_pend_le_conn_lookup(struct hci_dev *hdev,
					    bdaddr_t *addr, u8 addr_type)
{
	struct bdaddr_list *entry;

	list_for_each_entry(entry, &hdev->pend_le_conns, list) {
		if (bacmp(&entry->bdaddr, addr) == 0 &&
		    entry->bdaddr_type == addr_type)
			return entry;
	}

	return NULL;
}

/* This function requires the caller holds hdev->lock */
void hci_pend_le_conn_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
{
	struct bdaddr_list *entry;

	entry = hci_pend_le_conn_lookup(hdev, addr, addr_type);
	if (entry)
		goto done;

	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
	if (!entry) {
		BT_ERR("Out of memory");
		return;
	}

	bacpy(&entry->bdaddr, addr);
	entry->bdaddr_type = addr_type;

	list_add(&entry->list, &hdev->pend_le_conns);

	BT_DBG("addr %pMR (type %u)", addr, addr_type);

done:
	hci_update_background_scan(hdev);
}

/* This function requires the caller holds hdev->lock */
void hci_pend_le_conn_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
{
	struct bdaddr_list *entry;

	entry = hci_pend_le_conn_lookup(hdev, addr, addr_type);
	if (!entry)
		goto done;

	list_del(&entry->list);
	kfree(entry);

	BT_DBG("addr %pMR (type %u)", addr, addr_type);

done:
	hci_update_background_scan(hdev);
}

/* This function requires the caller holds hdev->lock */
void hci_pend_le_conns_clear(struct hci_dev *hdev)
{
	struct bdaddr_list *entry, *tmp;

	list_for_each_entry_safe(entry, tmp, &hdev->pend_le_conns, list) {
		list_del(&entry->list);
		kfree(entry);
	}

	BT_DBG("All LE pending connections cleared");
}

/* This function requires the caller holds hdev->lock */
int hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
			u8 auto_connect, u16 conn_min_interval,
@@ -3492,78 +3564,6 @@ void hci_conn_params_clear(struct hci_dev *hdev)
	BT_DBG("All LE connection parameters were removed");
}

/* This function requires the caller holds hdev->lock */
struct bdaddr_list *hci_pend_le_conn_lookup(struct hci_dev *hdev,
					    bdaddr_t *addr, u8 addr_type)
{
	struct bdaddr_list *entry;

	list_for_each_entry(entry, &hdev->pend_le_conns, list) {
		if (bacmp(&entry->bdaddr, addr) == 0 &&
		    entry->bdaddr_type == addr_type)
			return entry;
	}

	return NULL;
}

/* This function requires the caller holds hdev->lock */
void hci_pend_le_conn_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
{
	struct bdaddr_list *entry;

	entry = hci_pend_le_conn_lookup(hdev, addr, addr_type);
	if (entry)
		goto done;

	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
	if (!entry) {
		BT_ERR("Out of memory");
		return;
	}

	bacpy(&entry->bdaddr, addr);
	entry->bdaddr_type = addr_type;

	list_add(&entry->list, &hdev->pend_le_conns);

	BT_DBG("addr %pMR (type %u)", addr, addr_type);

done:
	hci_update_background_scan(hdev);
}

/* This function requires the caller holds hdev->lock */
void hci_pend_le_conn_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
{
	struct bdaddr_list *entry;

	entry = hci_pend_le_conn_lookup(hdev, addr, addr_type);
	if (!entry)
		goto done;

	list_del(&entry->list);
	kfree(entry);

	BT_DBG("addr %pMR (type %u)", addr, addr_type);

done:
	hci_update_background_scan(hdev);
}

/* This function requires the caller holds hdev->lock */
void hci_pend_le_conns_clear(struct hci_dev *hdev)
{
	struct bdaddr_list *entry, *tmp;

	list_for_each_entry_safe(entry, tmp, &hdev->pend_le_conns, list) {
		list_del(&entry->list);
		kfree(entry);
	}

	BT_DBG("All LE pending connections cleared");
}

static void inquiry_complete(struct hci_dev *hdev, u8 status)
{
	if (status) {