staging: wfx: simplify hif_set_uapsd_info() usage
authorJérôme Pouiller <jerome.pouiller@silabs.com>
Tue, 17 Dec 2019 16:15:21 +0000 (16:15 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Dec 2019 14:56:21 +0000 (15:56 +0100)
It is useless to keep uapsd_info in struct wfx_vif. This structure can
be rebuilt just before to be sent.

In add, the struct hif_mib_set_uapsd_information comes from hardware
API. It is not intended to be manipulated in upper layers of the driver.
So, this patch relocates the handling of this struct to
hif_set_uapsd_info() (the low level function).

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

index 9be7488..d77765f 100644 (file)
@@ -238,12 +238,21 @@ static inline int hif_use_multi_tx_conf(struct wfx_dev *wdev,
                             &arg, sizeof(arg));
 }
 
-static inline int hif_set_uapsd_info(struct wfx_vif *wvif,
-                                    struct hif_mib_set_uapsd_information *arg)
+static inline int hif_set_uapsd_info(struct wfx_vif *wvif, unsigned long val)
 {
+       struct hif_mib_set_uapsd_information arg = { };
+
+       if (val & BIT(IEEE80211_AC_VO))
+               arg.trig_voice = 1;
+       if (val & BIT(IEEE80211_AC_VI))
+               arg.trig_video = 1;
+       if (val & BIT(IEEE80211_AC_BE))
+               arg.trig_be = 1;
+       if (val & BIT(IEEE80211_AC_BK))
+               arg.trig_bckgrnd = 1;
        return hif_write_mib(wvif->wdev, wvif->id,
                             HIF_MIB_ID_SET_UAPSD_INFORMATION,
-                            arg, sizeof(*arg));
+                            &arg, sizeof(arg));
 }
 
 static inline int hif_erp_use_protection(struct wfx_vif *wvif, bool enable)
index e59560f..9eca35d 100644 (file)
@@ -112,44 +112,6 @@ end:
        mutex_unlock(&wvif->bss_loss_lock);
 }
 
-static int wfx_set_uapsd_param(struct wfx_vif *wvif,
-                          const struct wfx_edca_params *arg)
-{
-       /* Here's the mapping AC [queue, bit]
-        *  VO [0,3], VI [1, 2], BE [2, 1], BK [3, 0]
-        */
-
-       if (arg->uapsd_mask & BIT(IEEE80211_AC_VO))
-               wvif->uapsd_info.trig_voice = 1;
-       else
-               wvif->uapsd_info.trig_voice = 0;
-
-       if (arg->uapsd_mask & BIT(IEEE80211_AC_VI))
-               wvif->uapsd_info.trig_video = 1;
-       else
-               wvif->uapsd_info.trig_video = 0;
-
-       if (arg->uapsd_mask & BIT(IEEE80211_AC_BE))
-               wvif->uapsd_info.trig_be = 1;
-       else
-               wvif->uapsd_info.trig_be = 0;
-
-       if (arg->uapsd_mask & BIT(IEEE80211_AC_BK))
-               wvif->uapsd_info.trig_bckgrnd = 1;
-       else
-               wvif->uapsd_info.trig_bckgrnd = 0;
-
-       /* Currently pseudo U-APSD operation is not supported, so setting
-        * MinAutoTriggerInterval, MaxAutoTriggerInterval and
-        * AutoTriggerStep to 0
-        */
-       wvif->uapsd_info.min_auto_trigger_interval = 0;
-       wvif->uapsd_info.max_auto_trigger_interval = 0;
-       wvif->uapsd_info.auto_trigger_step = 0;
-
-       return hif_set_uapsd_info(wvif, &wvif->uapsd_info);
-}
-
 int wfx_fwd_probe_req(struct wfx_vif *wvif, bool enable)
 {
        wvif->fwd_probe_req = enable;
@@ -382,7 +344,7 @@ int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        hif_set_edca_queue_params(wvif, edca);
 
        if (wvif->vif->type == NL80211_IFTYPE_STATION) {
-               wfx_set_uapsd_param(wvif, &wvif->edca);
+               hif_set_uapsd_info(wvif, wvif->edca.uapsd_mask);
                if (wvif->setbssparams_done && wvif->state == WFX_STATE_STA)
                        wfx_update_pm(wvif);
        }
@@ -1552,7 +1514,7 @@ int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
                hif_set_edca_queue_params(wvif, &wvif->edca.params[i]);
        }
        wvif->edca.uapsd_mask = 0;
-       wfx_set_uapsd_param(wvif, &wvif->edca);
+       hif_set_uapsd_info(wvif, wvif->edca.uapsd_mask);
 
        wfx_tx_policy_init(wvif);
        wvif = NULL;
index c82d297..ff29163 100644 (file)
@@ -114,7 +114,6 @@ struct wfx_vif {
        bool                    setbssparams_done;
        struct wfx_ht_info      ht_info;
        struct wfx_edca_params  edca;
-       struct hif_mib_set_uapsd_information uapsd_info;
        struct hif_req_set_bss_params bss_params;
        struct work_struct      bss_params_work;
        struct work_struct      set_cts_work;