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

Commit ccd556fe authored by Johan Hedberg's avatar Johan Hedberg Committed by Gustavo Padovan
Browse files

Bluetooth: Simplify remote features callback function logic



The current remote and remote extended features event callbacks logic
can be made simpler by using a label and goto statements instead of the
current multiple levels of nested if statements.

Signed-off-by: default avatarJohan Hedberg <johan.hedberg@nokia.com>
Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
parent 17f490bc
Loading
Loading
Loading
Loading
+47 −44
Original line number Original line Diff line number Diff line
@@ -1162,33 +1162,33 @@ static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff
	hci_dev_lock(hdev);
	hci_dev_lock(hdev);


	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
	if (conn) {
	if (!conn)
		goto unlock;

	if (!ev->status)
	if (!ev->status)
		memcpy(conn->features, ev->features, 8);
		memcpy(conn->features, ev->features, 8);


		if (conn->state == BT_CONFIG) {
	if (conn->state != BT_CONFIG)
			if (!ev->status && lmp_ssp_capable(hdev) &&
		goto unlock;
						lmp_ssp_capable(conn)) {

	if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
		struct hci_cp_read_remote_ext_features cp;
		struct hci_cp_read_remote_ext_features cp;
		cp.handle = ev->handle;
		cp.handle = ev->handle;
		cp.page = 0x01;
		cp.page = 0x01;
				hci_send_cmd(hdev,
		hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
					HCI_OP_READ_REMOTE_EXT_FEATURES,
							sizeof(cp), &cp);
							sizeof(cp), &cp);
	} else if (!ev->status && conn->out &&
	} else if (!ev->status && conn->out &&
			conn->sec_level == BT_SECURITY_HIGH) {
			conn->sec_level == BT_SECURITY_HIGH) {
		struct hci_cp_auth_requested cp;
		struct hci_cp_auth_requested cp;
		cp.handle = ev->handle;
		cp.handle = ev->handle;
				hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
							sizeof(cp), &cp);
	} else {
	} else {
		conn->state = BT_CONNECTED;
		conn->state = BT_CONNECTED;
		hci_proto_connect_cfm(conn, ev->status);
		hci_proto_connect_cfm(conn, ev->status);
		hci_conn_put(conn);
		hci_conn_put(conn);
	}
	}
		}
	}


unlock:
	hci_dev_unlock(hdev);
	hci_dev_unlock(hdev);
}
}


@@ -1646,7 +1646,9 @@ static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_b
	hci_dev_lock(hdev);
	hci_dev_lock(hdev);


	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
	if (conn) {
	if (!conn)
		goto unlock;

	if (!ev->status && ev->page == 0x01) {
	if (!ev->status && ev->page == 0x01) {
		struct inquiry_entry *ie;
		struct inquiry_entry *ie;


@@ -1656,7 +1658,9 @@ static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_b
		conn->ssp_mode = (ev->features[0] & 0x01);
		conn->ssp_mode = (ev->features[0] & 0x01);
	}
	}


		if (conn->state == BT_CONFIG) {
	if (conn->state != BT_CONFIG)
		goto unlock;

	if (!ev->status && hdev->ssp_mode > 0 &&
	if (!ev->status && hdev->ssp_mode > 0 &&
			conn->ssp_mode > 0 && conn->out &&
			conn->ssp_mode > 0 && conn->out &&
			conn->sec_level != BT_SECURITY_SDP) {
			conn->sec_level != BT_SECURITY_SDP) {
@@ -1669,9 +1673,8 @@ static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_b
		hci_proto_connect_cfm(conn, ev->status);
		hci_proto_connect_cfm(conn, ev->status);
		hci_conn_put(conn);
		hci_conn_put(conn);
	}
	}
		}
	}


unlock:
	hci_dev_unlock(hdev);
	hci_dev_unlock(hdev);
}
}