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

Commit 5d05416e authored by Andrei Emeltchenko's avatar Andrei Emeltchenko Committed by Gustavo Padovan
Browse files

Bluetooth: AMP: Check that AMP is present and active



Before starting quering remote AMP controllers make sure
that there is local active AMP controller.

Signed-off-by: default avatarAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
parent ced5c338
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -779,6 +779,22 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
#define lmp_host_le_capable(dev)   !!((dev)->host_features[0] & LMP_HOST_LE)
#define lmp_host_le_capable(dev)   !!((dev)->host_features[0] & LMP_HOST_LE)
#define lmp_host_le_br_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE_BREDR)
#define lmp_host_le_br_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE_BREDR)


/* returns true if at least one AMP active */
static inline bool hci_amp_capable(void)
{
	struct hci_dev *hdev;
	bool ret = false;

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

	return ret;
}

/* ----- HCI protocols ----- */
/* ----- HCI protocols ----- */
#define HCI_PROTO_DEFER             0x01
#define HCI_PROTO_DEFER             0x01


+1 −0
Original line number Original line Diff line number Diff line
@@ -1013,6 +1013,7 @@ static bool __amp_capable(struct l2cap_chan *chan)
	struct l2cap_conn *conn = chan->conn;
	struct l2cap_conn *conn = chan->conn;


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