Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1df7b17a authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg
Browse files

Bluetooth: Simplify check if L2CAP connection is AMP capable



The check if a L2CAP connection is AMP capable was a little bit
complicated. This changes the code to make it simpler and more
readable.

Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 80d58d0b
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -1012,30 +1012,30 @@ static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
	return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
}

/* returns true if at least one AMP active */
static inline bool hci_amp_capable(void)
static bool __amp_capable(struct l2cap_chan *chan)
{
	struct l2cap_conn *conn = chan->conn;
	struct hci_dev *hdev;
	bool ret = false;
	bool amp_available = false;

	if (!conn->hs_enabled)
		return false;

	if (!(conn->fixed_chan_mask & L2CAP_FC_A2MP))
		return false;

	read_lock(&hci_dev_list_lock);
	list_for_each_entry(hdev, &hci_dev_list, list)
	list_for_each_entry(hdev, &hci_dev_list, list) {
		if (hdev->amp_type != AMP_TYPE_BREDR &&
		    test_bit(HCI_UP, &hdev->flags))
			ret = true;
	read_unlock(&hci_dev_list_lock);

	return ret;
		    test_bit(HCI_UP, &hdev->flags)) {
			amp_available = true;
			break;
		}
	}
	read_unlock(&hci_dev_list_lock);

static bool __amp_capable(struct l2cap_chan *chan)
{
	struct l2cap_conn *conn = chan->conn;

	if (conn->hs_enabled && hci_amp_capable() &&
	    chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED &&
	    conn->fixed_chan_mask & L2CAP_FC_A2MP)
		return true;
	if (chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED)
		return amp_available;

	return false;
}