iwlwifi: don't switch to SGI if not supported by AP
This patch fixes SGI support. RS didn't look at the capabilities of the AP before switching to SGI, this should lead to a stall in the traffic with an AP that doesn't support SGI. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Guy Cohen <guy.cohen@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
fd4abac54a
commit
a98410139a
@ -1439,6 +1439,15 @@ static int rs_move_siso_to_other(struct iwl_priv *priv,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IWL_SISO_SWITCH_GI:
|
case IWL_SISO_SWITCH_GI:
|
||||||
|
if (!tbl->is_fat &&
|
||||||
|
!(priv->current_ht_config.sgf &
|
||||||
|
HT_SHORT_GI_20MHZ))
|
||||||
|
break;
|
||||||
|
if (tbl->is_fat &&
|
||||||
|
!(priv->current_ht_config.sgf &
|
||||||
|
HT_SHORT_GI_40MHZ))
|
||||||
|
break;
|
||||||
|
|
||||||
IWL_DEBUG_RATE("LQ: SISO toggle SGI/NGI\n");
|
IWL_DEBUG_RATE("LQ: SISO toggle SGI/NGI\n");
|
||||||
|
|
||||||
memcpy(search_tbl, tbl, sz);
|
memcpy(search_tbl, tbl, sz);
|
||||||
@ -1521,6 +1530,15 @@ static int rs_move_mimo_to_other(struct iwl_priv *priv,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IWL_MIMO_SWITCH_GI:
|
case IWL_MIMO_SWITCH_GI:
|
||||||
|
if (!tbl->is_fat &&
|
||||||
|
!(priv->current_ht_config.sgf &
|
||||||
|
HT_SHORT_GI_20MHZ))
|
||||||
|
break;
|
||||||
|
if (tbl->is_fat &&
|
||||||
|
!(priv->current_ht_config.sgf &
|
||||||
|
HT_SHORT_GI_40MHZ))
|
||||||
|
break;
|
||||||
|
|
||||||
IWL_DEBUG_RATE("LQ: MIMO toggle SGI/NGI\n");
|
IWL_DEBUG_RATE("LQ: MIMO toggle SGI/NGI\n");
|
||||||
|
|
||||||
/* Set up new search table for MIMO */
|
/* Set up new search table for MIMO */
|
||||||
|
@ -610,8 +610,8 @@ struct iwl_hw_params {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HT_SHORT_GI_20MHZ_ONLY (1 << 0)
|
#define HT_SHORT_GI_20MHZ (1 << 0)
|
||||||
#define HT_SHORT_GI_40MHZ_ONLY (1 << 1)
|
#define HT_SHORT_GI_40MHZ (1 << 1)
|
||||||
|
|
||||||
|
|
||||||
#define IWL_RX_HDR(x) ((struct iwl4965_rx_frame_hdr *)(\
|
#define IWL_RX_HDR(x) ((struct iwl4965_rx_frame_hdr *)(\
|
||||||
|
@ -700,9 +700,9 @@ static void iwl4965_ht_conf(struct iwl_priv *priv,
|
|||||||
priv->ps_mode = (u8)((ht_conf->cap & IEEE80211_HT_CAP_MIMO_PS) >> 2);
|
priv->ps_mode = (u8)((ht_conf->cap & IEEE80211_HT_CAP_MIMO_PS) >> 2);
|
||||||
|
|
||||||
if (ht_conf->cap & IEEE80211_HT_CAP_SGI_20)
|
if (ht_conf->cap & IEEE80211_HT_CAP_SGI_20)
|
||||||
iwl_conf->sgf |= 0x1;
|
iwl_conf->sgf |= HT_SHORT_GI_20MHZ;
|
||||||
if (ht_conf->cap & IEEE80211_HT_CAP_SGI_40)
|
if (ht_conf->cap & IEEE80211_HT_CAP_SGI_40)
|
||||||
iwl_conf->sgf |= 0x2;
|
iwl_conf->sgf |= HT_SHORT_GI_40MHZ;
|
||||||
|
|
||||||
iwl_conf->is_green_field = !!(ht_conf->cap & IEEE80211_HT_CAP_GRN_FLD);
|
iwl_conf->is_green_field = !!(ht_conf->cap & IEEE80211_HT_CAP_GRN_FLD);
|
||||||
iwl_conf->max_amsdu_size =
|
iwl_conf->max_amsdu_size =
|
||||||
|
Reference in New Issue
Block a user