Commit 7c4f6fe4 authored by Ajay Singh's avatar Ajay Singh Committed by Greg Kroah-Hartman
Browse files

staging: wilc1000: refactor mgmt_tx to fix line over 80 chars



Refactor mgmt_tx() to fix line over 80 characters issue. Split the
function to avoid the checkpatch.pl warning. Returning the same error
code in case of memory allocation failure.

Signed-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Reviewed-by: default avatarClaudiu Beznea <claudiu.beznea@microchip.com>
Reviewed-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 34db1aac
Loading
Loading
Loading
Loading
+108 −76
Original line number Diff line number Diff line
@@ -1548,6 +1548,55 @@ static int cancel_remain_on_channel(struct wiphy *wiphy,
			priv->remain_on_ch_params.listen_session_id);
}

static void wilc_wfi_cfg_tx_vendor_spec(struct p2p_mgmt_data *mgmt_tx,
					struct cfg80211_mgmt_tx_params *params,
					u8 iftype, u32 buf_len)
{
	const u8 *buf = params->buf;
	size_t len = params->len;
	u32 i;
	u8 subtype = buf[P2P_PUB_ACTION_SUBTYPE];

	if (subtype == GO_NEG_REQ || subtype == GO_NEG_RSP) {
		if (p2p_local_random == 1 &&
		    p2p_recv_random < p2p_local_random) {
			get_random_bytes(&p2p_local_random, 1);
			p2p_local_random++;
		}
	}

	if (p2p_local_random <= p2p_recv_random || !(subtype == GO_NEG_REQ ||
						     subtype == GO_NEG_RSP ||
						     subtype == P2P_INV_REQ ||
						     subtype == P2P_INV_RSP))
		return;

	for (i = P2P_PUB_ACTION_SUBTYPE + 2; i < len; i++) {
		if (buf[i] == P2PELEM_ATTR_ID &&
		    !memcmp(p2p_oui, &buf[i + 2], 4)) {
			if (subtype == P2P_INV_REQ || subtype == P2P_INV_RSP)
				wilc_wfi_cfg_parse_tx_action(&mgmt_tx->buff[i + 6],
							     len - (i + 6),
							     true, iftype);
			else
				wilc_wfi_cfg_parse_tx_action(&mgmt_tx->buff[i + 6],
							     len - (i + 6),
							     false, iftype);

			break;
		}
	}

	if (subtype != P2P_INV_REQ && subtype != P2P_INV_RSP) {
		int vendor_spec_len = sizeof(p2p_vendor_spec);

		memcpy(&mgmt_tx->buff[len], p2p_vendor_spec,
		       vendor_spec_len);
		mgmt_tx->buff[len + vendor_spec_len] = p2p_local_random;
		mgmt_tx->size = buf_len;
	}
}

static int mgmt_tx(struct wiphy *wiphy,
		   struct wireless_dev *wdev,
		   struct cfg80211_mgmt_tx_params *params,
@@ -1561,9 +1610,9 @@ static int mgmt_tx(struct wiphy *wiphy,
	struct p2p_mgmt_data *mgmt_tx;
	struct wilc_priv *priv;
	struct host_if_drv *wfi_drv;
	u32 i;
	struct wilc_vif *vif;
	u32 buf_len = len + sizeof(p2p_vendor_spec) + sizeof(p2p_local_random);
	int ret = 0;

	vif = netdev_priv(wdev->netdev);
	priv = wiphy_priv(wiphy);
@@ -1573,15 +1622,20 @@ static int mgmt_tx(struct wiphy *wiphy,
	priv->tx_cookie = *cookie;
	mgmt = (const struct ieee80211_mgmt *)buf;

	if (ieee80211_is_mgmt(mgmt->frame_control)) {
	if (!ieee80211_is_mgmt(mgmt->frame_control))
		goto out;

	mgmt_tx = kmalloc(sizeof(struct p2p_mgmt_data), GFP_KERNEL);
		if (!mgmt_tx)
			return -EFAULT;
	if (!mgmt_tx) {
		ret = -ENOMEM;
		goto out;
	}

	mgmt_tx->buff = kmalloc(buf_len, GFP_KERNEL);
	if (!mgmt_tx->buff) {
		ret = -ENOMEM;
		kfree(mgmt_tx);
			return -ENOMEM;
		goto out;
	}

	memcpy(mgmt_tx->buff, buf, len);
@@ -1590,75 +1644,53 @@ static int mgmt_tx(struct wiphy *wiphy,
	if (ieee80211_is_probe_resp(mgmt->frame_control)) {
		wilc_set_mac_chnl_num(vif, chan->hw_value);
		curr_channel = chan->hw_value;
		} else if (ieee80211_is_action(mgmt->frame_control))   {
		goto out_txq_add_pkt;
	}

	if (!ieee80211_is_action(mgmt->frame_control))
		goto out_txq_add_pkt;

	if (buf[ACTION_CAT_ID] == PUB_ACTION_ATTR_ID) {
		if (buf[ACTION_SUBTYPE_ID] != PUBLIC_ACT_VENDORSPEC ||
		    buf[P2P_PUB_ACTION_SUBTYPE] != GO_NEG_CONF) {
					wilc_set_mac_chnl_num(vif,
							      chan->hw_value);
			wilc_set_mac_chnl_num(vif, chan->hw_value);
			curr_channel = chan->hw_value;
		}
		switch (buf[ACTION_SUBTYPE_ID]) {
		case GAS_INITIAL_REQ:
					break;

		case GAS_INITIAL_RSP:
			break;

		case PUBLIC_ACT_VENDORSPEC:
				{
					if (!memcmp(p2p_oui, &buf[ACTION_SUBTYPE_ID + 1], 4)) {
						if ((buf[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_REQ || buf[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_RSP)) {
							if (p2p_local_random == 1 && p2p_recv_random < p2p_local_random) {
								get_random_bytes(&p2p_local_random, 1);
								p2p_local_random++;
							}
						}

						if ((buf[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_REQ || buf[P2P_PUB_ACTION_SUBTYPE] == GO_NEG_RSP ||
						     buf[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_REQ || buf[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_RSP)) {
							if (p2p_local_random > p2p_recv_random)	{
								for (i = P2P_PUB_ACTION_SUBTYPE + 2; i < len; i++) {
									if (buf[i] == P2PELEM_ATTR_ID && !(memcmp(p2p_oui, &buf[i + 2], 4))) {
										if (buf[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_REQ || buf[P2P_PUB_ACTION_SUBTYPE] == P2P_INV_RSP)
											wilc_wfi_cfg_parse_tx_action(&mgmt_tx->buff[i + 6], len - (i + 6), true, vif->iftype);
			if (!memcmp(p2p_oui, &buf[ACTION_SUBTYPE_ID + 1], 4))
				wilc_wfi_cfg_tx_vendor_spec(mgmt_tx, params,
							    vif->iftype,
							    buf_len);
			else
											wilc_wfi_cfg_parse_tx_action(&mgmt_tx->buff[i + 6], len - (i + 6), false, vif->iftype);
										break;
									}
								}

								if (buf[P2P_PUB_ACTION_SUBTYPE] != P2P_INV_REQ && buf[P2P_PUB_ACTION_SUBTYPE] != P2P_INV_RSP) {
									memcpy(&mgmt_tx->buff[len], p2p_vendor_spec, sizeof(p2p_vendor_spec));
									mgmt_tx->buff[len + sizeof(p2p_vendor_spec)] = p2p_local_random;
									mgmt_tx->size = buf_len;
								}
							}
						}

					} else {
						netdev_dbg(vif->ndev, "Not a P2P public action frame\n");
					}
				netdev_dbg(vif->ndev,
					   "Not a P2P public action frame\n");

			break;
				}

		default:
				{
					netdev_dbg(vif->ndev, "NOT HANDLED PUBLIC ACTION FRAME TYPE:%x\n", buf[ACTION_SUBTYPE_ID]);
			netdev_dbg(vif->ndev,
				   "NOT HANDLED PUBLIC ACTION FRAME TYPE:%x\n",
				   buf[ACTION_SUBTYPE_ID]);
			break;
		}
	}
			}

	wfi_drv->p2p_timeout = (jiffies + msecs_to_jiffies(wait));
		}

out_txq_add_pkt:

	wilc_wlan_txq_add_mgmt_pkt(wdev->netdev, mgmt_tx,
				   mgmt_tx->buff, mgmt_tx->size,
				   wilc_wfi_mgmt_tx_complete);
	}
	return 0;

out:

	return ret;
}

static int mgmt_tx_cancel_wait(struct wiphy *wiphy,