staging: wfx: simplify hif_set_uapsd_info() usage
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>
This commit is contained in:
parent
010149e6fb
commit
d74d60c3a1
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user