staging: wfx: simplify wfx_suspend_resume_mc()
authorJérôme Pouiller <jerome.pouiller@silabs.com>
Wed, 15 Jan 2020 13:55:24 +0000 (13:55 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 Jan 2020 19:59:52 +0000 (20:59 +0100)
Indeed, it is not necessary to pass whole hif_ind_suspend_resume_tx to
wfx_suspend_resume_mc().

In add, the structure hif_ind_suspend_resume_tx come from hardware API.
It is not intended to be manipulated in upper layers of the driver.

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200115135338.14374-57-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wfx/data_tx.c
drivers/staging/wfx/hif_rx.c
drivers/staging/wfx/sta.c
drivers/staging/wfx/sta.h

index 7914c06..8710383 100644 (file)
@@ -600,13 +600,8 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg)
                        tx_info->flags |= IEEE80211_TX_STAT_ACK;
        } else if (arg->status == HIF_REQUEUE) {
                /* "REQUEUE" means "implicit suspend" */
-               struct hif_ind_suspend_resume_tx suspend = {
-                       .suspend_resume_flags.resume = 0,
-                       .suspend_resume_flags.bc_mc_only = 1,
-               };
-
                WARN(!arg->tx_result_flags.requeue, "incoherent status and result_flags");
-               wfx_suspend_resume(wvif, &suspend);
+               wfx_suspend_resume_mc(wvif, STA_NOTIFY_SLEEP);
                tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
        } else {
                if (wvif->bss_loss_state &&
index f04afc6..f798cd6 100644 (file)
@@ -230,7 +230,11 @@ static int hif_suspend_resume_indication(struct wfx_dev *wdev,
        const struct hif_ind_suspend_resume_tx *body = buf;
 
        WARN_ON(!wvif);
-       wfx_suspend_resume(wvif, body);
+       WARN(!body->suspend_resume_flags.bc_mc_only, "unsupported suspend/resume notification");
+       if (body->suspend_resume_flags.resume)
+               wfx_suspend_resume_mc(wvif, STA_NOTIFY_AWAKE);
+       else
+               wfx_suspend_resume_mc(wvif, STA_NOTIFY_SLEEP);
 
        return 0;
 }
index 7c9e93f..bdc1555 100644 (file)
@@ -985,18 +985,12 @@ int wfx_ampdu_action(struct ieee80211_hw *hw,
        return -ENOTSUPP;
 }
 
-void wfx_suspend_resume(struct wfx_vif *wvif,
-                       const struct hif_ind_suspend_resume_tx *arg)
+void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd notify_cmd)
 {
        bool cancel_tmo = false;
 
-       if (!arg->suspend_resume_flags.bc_mc_only) {
-               dev_warn(wvif->wdev->dev, "unsupported suspend/resume notification\n");
-               return;
-       }
-
        spin_lock_bh(&wvif->ps_state_lock);
-       if (!arg->suspend_resume_flags.resume)
+       if (notify_cmd == STA_NOTIFY_SLEEP)
                wvif->mcast_tx = false;
        else
                wvif->mcast_tx = wvif->aid0_bit_set &&
index e832405..cf99a8a 100644 (file)
@@ -82,8 +82,7 @@ void wfx_unassign_vif_chanctx(struct ieee80211_hw *hw,
                              struct ieee80211_chanctx_conf *conf);
 
 // WSM Callbacks
-void wfx_suspend_resume(struct wfx_vif *wvif,
-                       const struct hif_ind_suspend_resume_tx *arg);
+void wfx_suspend_resume_mc(struct wfx_vif *wvif, enum sta_notify_cmd cmd);
 
 // Other Helpers
 void wfx_cqm_bssloss_sm(struct wfx_vif *wvif, int init, int good, int bad);