mirror of https://gitee.com/openkylin/linux.git
iwlwifi: improve timing handling with dual-mode
In dual-mode, a number of scenarios need to be considered, and the firmware can be very picky about them. Adjust the timing (most importantly the beacon interval) according to the different modes. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
This commit is contained in:
parent
763cc3bf5c
commit
f1f270b25c
|
@ -529,10 +529,22 @@ int iwl_send_rxon_timing(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
|
||||||
ctx->timing.atim_window = 0;
|
ctx->timing.atim_window = 0;
|
||||||
|
|
||||||
if (ctx->ctxid == IWL_RXON_CTX_PAN &&
|
if (ctx->ctxid == IWL_RXON_CTX_PAN &&
|
||||||
(!ctx->vif || ctx->vif->type != NL80211_IFTYPE_STATION)) {
|
(!ctx->vif || ctx->vif->type != NL80211_IFTYPE_STATION) &&
|
||||||
|
iwl_is_associated(priv, IWL_RXON_CTX_BSS) &&
|
||||||
|
priv->contexts[IWL_RXON_CTX_BSS].vif &&
|
||||||
|
priv->contexts[IWL_RXON_CTX_BSS].vif->bss_conf.beacon_int) {
|
||||||
ctx->timing.beacon_interval =
|
ctx->timing.beacon_interval =
|
||||||
priv->contexts[IWL_RXON_CTX_BSS].timing.beacon_interval;
|
priv->contexts[IWL_RXON_CTX_BSS].timing.beacon_interval;
|
||||||
beacon_int = le16_to_cpu(ctx->timing.beacon_interval);
|
beacon_int = le16_to_cpu(ctx->timing.beacon_interval);
|
||||||
|
} else if (ctx->ctxid == IWL_RXON_CTX_BSS &&
|
||||||
|
iwl_is_associated(priv, IWL_RXON_CTX_PAN) &&
|
||||||
|
priv->contexts[IWL_RXON_CTX_PAN].vif &&
|
||||||
|
priv->contexts[IWL_RXON_CTX_PAN].vif->bss_conf.beacon_int &&
|
||||||
|
(!iwl_is_associated_ctx(ctx) || !ctx->vif ||
|
||||||
|
!ctx->vif->bss_conf.beacon_int)) {
|
||||||
|
ctx->timing.beacon_interval =
|
||||||
|
priv->contexts[IWL_RXON_CTX_PAN].timing.beacon_interval;
|
||||||
|
beacon_int = le16_to_cpu(ctx->timing.beacon_interval);
|
||||||
} else {
|
} else {
|
||||||
beacon_int = iwl_adjust_beacon_interval(beacon_int,
|
beacon_int = iwl_adjust_beacon_interval(beacon_int,
|
||||||
priv->hw_params.max_beacon_itrvl * TIME_UNIT);
|
priv->hw_params.max_beacon_itrvl * TIME_UNIT);
|
||||||
|
|
Loading…
Reference in New Issue