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

Commit 9ed46549 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge ed8a7b06 on remote branch

Change-Id: I4de50654b5561eff6424b3ba459da8ea981c7a6d
parents 042b923e ed8a7b06
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -1388,13 +1388,15 @@ int wlan_cfg80211_scan(struct wlan_objmgr_vdev *vdev,
		req->scan_req.p2p_scan_type = SCAN_P2P_SEARCH;

	/* Set dwell time mode according to scan policy type flags */
	if (ucfg_scan_cfg_honour_nl_scan_policy_flags(psoc)) {
		if (req->scan_req.scan_policy_high_accuracy)
			req->scan_req.adaptive_dwell_time_mode =
						SCAN_DWELL_MODE_STATIC;
	if ((req->scan_req.scan_policy_low_power) ||
	   (req->scan_req.scan_policy_low_span))
		if (req->scan_req.scan_policy_low_power ||
		    req->scan_req.scan_policy_low_span)
			req->scan_req.adaptive_dwell_time_mode =
						SCAN_DWELL_MODE_AGGRESSIVE;
	}

	/*
	 * FW require at least 1 MAC to send probe request.
+47 −8
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ static int wifi_pos_parse_req(const void *data, int len, int pid,
{
	tAniMsgHdr *msg_hdr;
	struct nlattr *tb[CLD80211_ATTR_MAX + 1];
	uint32_t msg_len, id, nl_field_info_size, expected_field_info_size;
	struct wifi_pos_field_info *field_info;

	if (wlan_cfg80211_nla_parse(tb, CLD80211_ATTR_MAX, data, len, NULL)) {
		cfg80211_err("invalid data in request");
@@ -94,23 +96,54 @@ static int wifi_pos_parse_req(const void *data, int len, int pid,
		return OEM_ERR_INVALID_MESSAGE_TYPE;
	}

	msg_hdr = (tAniMsgHdr *)nla_data(tb[CLD80211_ATTR_DATA]);
	if (!msg_hdr) {
		cfg80211_err("msg_hdr null");
		return OEM_ERR_NULL_MESSAGE_HEADER;
	msg_len = nla_len(tb[CLD80211_ATTR_DATA]);
	if (msg_len < sizeof(*msg_hdr)) {
		cfg80211_err("Insufficient length for msg_hdr: %u", msg_len);
		return OEM_ERR_INVALID_MESSAGE_LENGTH;
	}

	msg_hdr = nla_data(tb[CLD80211_ATTR_DATA]);
	req->msg_type = msg_hdr->type;

	if (msg_len < sizeof(*msg_hdr) + msg_hdr->length) {
		cfg80211_err("Insufficient length for msg_hdr buffer: %u",
			     msg_len);
		return OEM_ERR_INVALID_MESSAGE_LENGTH;
	}

	req->buf_len = msg_hdr->length;
	req->buf = (uint8_t *)&msg_hdr[1];
	req->pid = pid;

	if (tb[CLD80211_ATTR_META_DATA]) {
		req->field_info_buf = (struct wifi_pos_field_info *)
					nla_data(tb[CLD80211_ATTR_META_DATA]);
		req->field_info_buf_len = nla_len(tb[CLD80211_ATTR_META_DATA]);
	id = CLD80211_ATTR_META_DATA;
	if (!tb[id])
		return 0;

	nl_field_info_size = nla_len(tb[id]);
	if (nl_field_info_size < sizeof(*field_info)) {
		cfg80211_err("Insufficient length for field_info_buf: %u",
			     nl_field_info_size);
		return OEM_ERR_INVALID_MESSAGE_LENGTH;
	}

	field_info = nla_data(tb[id]);
	if (!field_info->count) {
		cfg80211_debug("field_info->count is zero, ignoring META_DATA");
		return 0;
	}

	expected_field_info_size = sizeof(*field_info) +
		(field_info->count - 1) * sizeof(struct wifi_pos_field);

	if (nl_field_info_size < expected_field_info_size) {
		cfg80211_err("Insufficient len for total no.of %u fields",
			     field_info->count);
		return OEM_ERR_INVALID_MESSAGE_LENGTH;
	}

	req->field_info_buf = field_info;
	req->field_info_buf_len = nl_field_info_size;

	return 0;
}
#else
@@ -127,6 +160,12 @@ static int wifi_pos_parse_req(struct sk_buff *skb, struct wifi_pos_req_msg *req)
		return OEM_ERR_NULL_MESSAGE_HEADER;
	}

	if (nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*msg_hdr))) {
		cfg80211_err("nlmsg_len(%d) and msg_hdr_size(%zu) mis-match",
			     nlh->nlmsg_len, sizeof(*msg_hdr));
		return OEM_ERR_INVALID_MESSAGE_LENGTH;
	}

	msg_hdr = NLMSG_DATA(nlh);
	if (!msg_hdr) {
		cfg80211_err("Message header null");
+6 −0
Original line number Diff line number Diff line
@@ -151,6 +151,12 @@ void wlan_mgmt_txrx_desc_put(
		return;
	}
	desc->in_use = false;
	desc->context = NULL;
	desc->peer = NULL;
	desc->nbuf = NULL;
	desc->tx_dwnld_cmpl_cb = NULL;
	desc->tx_ota_cmpl_cb = NULL;
	desc->vdev_id = WLAN_UMAC_VDEV_ID_MAX;
	qdf_list_insert_front(&mgmt_txrx_pdev_ctx->mgmt_desc_pool.free_list,
			      &desc->entry);

+4 −4
Original line number Diff line number Diff line
@@ -1070,7 +1070,7 @@ QDF_STATUS tgt_mgmt_txrx_tx_completion_handler(
		return QDF_STATUS_E_INVAL;
	}
	mgmt_desc = &mgmt_txrx_pdev_ctx->mgmt_desc_pool.pool[desc_id];
	if (!mgmt_desc) {
	if (!mgmt_desc || !mgmt_desc->in_use) {
		mgmt_txrx_err("Mgmt desc empty for id %d pdev %pK ",
				desc_id, pdev);
		return QDF_STATUS_E_NULL_VALUE;
@@ -1142,7 +1142,7 @@ qdf_nbuf_t tgt_mgmt_txrx_get_nbuf_from_desc_id(
	}

	mgmt_desc = &mgmt_txrx_pdev_ctx->mgmt_desc_pool.pool[desc_id];
	if (!mgmt_desc) {
	if (!mgmt_desc || !mgmt_desc->in_use) {
		mgmt_txrx_err("Mgmt descriptor unavailable for id %d pdev %pK",
				desc_id, pdev);
		goto fail;
@@ -1172,7 +1172,7 @@ tgt_mgmt_txrx_get_peer_from_desc_id(
	}

	mgmt_desc = &mgmt_txrx_pdev_ctx->mgmt_desc_pool.pool[desc_id];
	if (!mgmt_desc) {
	if (!mgmt_desc || !mgmt_desc->in_use) {
		mgmt_txrx_err("Mgmt descriptor unavailable for id %d pdev %pK",
				desc_id, pdev);
		goto fail;
@@ -1206,7 +1206,7 @@ uint8_t tgt_mgmt_txrx_get_vdev_id_from_desc_id(
	}

	mgmt_desc = &mgmt_txrx_pdev_ctx->mgmt_desc_pool.pool[desc_id];
	if (!mgmt_desc) {
	if (!mgmt_desc || !mgmt_desc->in_use) {
		mgmt_txrx_err("Mgmt descriptor unavailable for id %d pdev %pK",
				desc_id, pdev);
		goto fail;
+6 −1
Original line number Diff line number Diff line
@@ -370,13 +370,18 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
	struct wlan_objmgr_pdev *pdev;
	struct mgmt_txrx_priv_pdev_context *txrx_ctx;
	struct wlan_objmgr_vdev *vdev;
	QDF_STATUS status;

	if (!peer) {
		mgmt_txrx_err("peer passed is NULL");
		return QDF_STATUS_E_NULL_VALUE;
	}

	wlan_objmgr_peer_get_ref(peer, WLAN_MGMT_NB_ID);
	status = wlan_objmgr_peer_try_get_ref(peer, WLAN_MGMT_NB_ID);
	if (QDF_IS_STATUS_ERROR(status)) {
		mgmt_txrx_err("failed to get ref count for peer %pK", peer);
		return QDF_STATUS_E_NULL_VALUE;
	}

	vdev = wlan_peer_get_vdev(peer);
	if (!vdev) {
Loading