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: Ajay Singh <ajay.kat...@microchip.com>
---
 drivers/staging/wilc1000/wilc_wfi_cfgoperations.c | 187 +++++++++++++---------
 1 file changed, 111 insertions(+), 76 deletions(-)

diff --git a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c 
b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
index d7ff0a9..9950ca5 100644
--- a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
+++ b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
@@ -1555,6 +1555,58 @@ 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)) {
+               bool found = false;
+               bool oper_ch = false;
+
+               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)
+                                       oper_ch = true;
+
+                               found = true;
+                               break;
+                       }
+               }
+
+               if (found)
+                       wilc_wfi_cfg_parse_tx_action(&mgmt_tx->buff[i + 6],
+                                                    len - (i + 6), oper_ch,
+                                                    iftype);
+
+               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,
@@ -1568,9 +1620,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);
@@ -1580,92 +1632,75 @@ static int mgmt_tx(struct wiphy *wiphy,
        priv->tx_cookie = *cookie;
        mgmt = (const struct ieee80211_mgmt *)buf;
 
-       if (ieee80211_is_mgmt(mgmt->frame_control)) {
-               mgmt_tx = kmalloc(sizeof(struct p2p_mgmt_data), GFP_KERNEL);
-               if (!mgmt_tx)
-                       return -EFAULT;
+       if (!ieee80211_is_mgmt(mgmt->frame_control))
+               goto out;
 
-               mgmt_tx->buff = kmalloc(buf_len, GFP_KERNEL);
-               if (!mgmt_tx->buff) {
-                       kfree(mgmt_tx);
-                       return -ENOMEM;
-               }
+       mgmt_tx = kmalloc(sizeof(struct p2p_mgmt_data), GFP_KERNEL);
+       if (!mgmt_tx) {
+               ret = -ENOMEM;
+               goto out;
+       }
+
+       mgmt_tx->buff = kmalloc(buf_len, GFP_KERNEL);
+       if (!mgmt_tx->buff) {
+               ret = -ENOMEM;
+               kfree(mgmt_tx);
+               goto out;
+       }
+
+       memcpy(mgmt_tx->buff, buf, len);
+       mgmt_tx->size = len;
+
+       if (ieee80211_is_probe_resp(mgmt->frame_control)) {
+               wilc_set_mac_chnl_num(vif, chan->hw_value);
+               curr_channel = chan->hw_value;
+               goto out_txq_add_pkt;
+       }
 
-               memcpy(mgmt_tx->buff, buf, len);
-               mgmt_tx->size = len;
+       if (!ieee80211_is_action(mgmt->frame_control))
+               goto out_txq_add_pkt;
 
-               if (ieee80211_is_probe_resp(mgmt->frame_control)) {
+       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);
                        curr_channel = chan->hw_value;
-               } else if (ieee80211_is_action(mgmt->frame_control))   {
-                       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);
-                                       curr_channel = chan->hw_value;
-                               }
-                               switch (buf[ACTION_SUBTYPE_ID]) {
-                               case GAS_INITIAL_REQ:
-                                       break;
+               }
+               switch (buf[ACTION_SUBTYPE_ID]) {
+               case GAS_INITIAL_REQ:
+               case GAS_INITIAL_RSP:
+                       break;
 
-                               case GAS_INITIAL_RSP:
-                                       break;
+               case PUBLIC_ACT_VENDORSPEC:
+                       if (!memcmp(p2p_oui, &buf[ACTION_SUBTYPE_ID + 1], 4))
+                               wilc_wfi_cfg_tx_vendor_spec(mgmt_tx, params,
+                                                           vif->iftype,
+                                                           buf_len);
+                       else
+                               netdev_dbg(vif->ndev,
+                                          "Not a P2P public action frame\n");
 
-                               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);
-                                                                               
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");
-                                       }
+                       break;
 
-                                       break;
-                               }
+               default:
+                       netdev_dbg(vif->ndev,
+                                  "NOT HANDLED PUBLIC ACTION FRAME TYPE:%x\n",
+                                  buf[ACTION_SUBTYPE_ID]);
+                       break;
+               }
+       }
 
-                               default:
-                               {
-                                       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));
 
-                       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;
+       wilc_wlan_txq_add_mgmt_pkt(wdev->netdev, mgmt_tx,
+                                  mgmt_tx->buff, mgmt_tx->size,
+                                  wilc_wfi_mgmt_tx_complete);
+
+out:
+
+       return ret;
 }
 
 static int mgmt_tx_cancel_wait(struct wiphy *wiphy,
-- 
2.7.4

Reply via email to