提交 1c03c462 编写于 作者: S Stanislaw Gruszka 提交者: John W. Linville

iwlegacy: move ht out of ctx structure

Signed-off-by: NStanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 8d44f2bd
...@@ -5793,23 +5793,23 @@ il4965_mac_channel_switch(struct ieee80211_hw *hw, ...@@ -5793,23 +5793,23 @@ il4965_mac_channel_switch(struct ieee80211_hw *hw,
il->current_ht_config.smps = conf->smps_mode; il->current_ht_config.smps = conf->smps_mode;
/* Configure HT40 channels */ /* Configure HT40 channels */
ctx->ht.enabled = conf_is_ht(conf); il->ht.enabled = conf_is_ht(conf);
if (ctx->ht.enabled) { if (il->ht.enabled) {
if (conf_is_ht40_minus(conf)) { if (conf_is_ht40_minus(conf)) {
ctx->ht.extension_chan_offset = il->ht.extension_chan_offset =
IEEE80211_HT_PARAM_CHA_SEC_BELOW; IEEE80211_HT_PARAM_CHA_SEC_BELOW;
ctx->ht.is_40mhz = true; il->ht.is_40mhz = true;
} else if (conf_is_ht40_plus(conf)) { } else if (conf_is_ht40_plus(conf)) {
ctx->ht.extension_chan_offset = il->ht.extension_chan_offset =
IEEE80211_HT_PARAM_CHA_SEC_ABOVE; IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
ctx->ht.is_40mhz = true; il->ht.is_40mhz = true;
} else { } else {
ctx->ht.extension_chan_offset = il->ht.extension_chan_offset =
IEEE80211_HT_PARAM_CHA_SEC_NONE; IEEE80211_HT_PARAM_CHA_SEC_NONE;
ctx->ht.is_40mhz = false; il->ht.is_40mhz = false;
} }
} else } else
ctx->ht.is_40mhz = false; il->ht.is_40mhz = false;
if ((le16_to_cpu(il->staging.channel) != ch)) if ((le16_to_cpu(il->staging.channel) != ch))
il->staging.flags = 0; il->staging.flags = 0;
......
...@@ -641,13 +641,10 @@ il4965_rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags, ...@@ -641,13 +641,10 @@ il4965_rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags,
* there are no non-GF stations present in the BSS. * there are no non-GF stations present in the BSS.
*/ */
static bool static bool
il4965_rs_use_green(struct ieee80211_sta *sta) il4965_rs_use_green(struct il_priv *il, struct ieee80211_sta *sta)
{ {
struct il_station_priv *sta_priv = (void *)sta->drv_priv;
struct il_rxon_context *ctx = sta_priv->common.ctx;
return (sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD) && return (sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD) &&
!(ctx->ht.non_gf_sta_present); !il->ht.non_gf_sta_present;
} }
/** /**
...@@ -1815,7 +1812,7 @@ il4965_rs_rate_scale_perform(struct il_priv *il, struct sk_buff *skb, ...@@ -1815,7 +1812,7 @@ il4965_rs_rate_scale_perform(struct il_priv *il, struct sk_buff *skb,
if (is_legacy(tbl->lq_type)) if (is_legacy(tbl->lq_type))
lq_sta->is_green = 0; lq_sta->is_green = 0;
else else
lq_sta->is_green = il4965_rs_use_green(sta); lq_sta->is_green = il4965_rs_use_green(il, sta);
is_green = lq_sta->is_green; is_green = lq_sta->is_green;
/* current tx rate */ /* current tx rate */
...@@ -2166,7 +2163,7 @@ il4965_rs_initialize_lq(struct il_priv *il, struct ieee80211_conf *conf, ...@@ -2166,7 +2163,7 @@ il4965_rs_initialize_lq(struct il_priv *il, struct ieee80211_conf *conf,
int rate_idx; int rate_idx;
int i; int i;
u32 rate; u32 rate;
u8 use_green = il4965_rs_use_green(sta); u8 use_green = il4965_rs_use_green(il, sta);
u8 active_tbl = 0; u8 active_tbl = 0;
u8 valid_tx_ant; u8 valid_tx_ant;
struct il_station_priv *sta_priv; struct il_station_priv *sta_priv;
...@@ -2341,7 +2338,7 @@ il4965_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_id) ...@@ -2341,7 +2338,7 @@ il4965_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_id)
lq_sta->is_dup = 0; lq_sta->is_dup = 0;
lq_sta->max_rate_idx = -1; lq_sta->max_rate_idx = -1;
lq_sta->missed_rate_counter = IL_MISSED_RATE_MAX; lq_sta->missed_rate_counter = IL_MISSED_RATE_MAX;
lq_sta->is_green = il4965_rs_use_green(sta); lq_sta->is_green = il4965_rs_use_green(il, sta);
lq_sta->active_legacy_rate = il->active_rate & ~(0x1000); lq_sta->active_legacy_rate = il->active_rate & ~(0x1000);
lq_sta->band = il->band; lq_sta->band = il->band;
/* /*
......
...@@ -2352,7 +2352,7 @@ il_is_lq_table_valid(struct il_priv *il, struct il_rxon_context *ctx, ...@@ -2352,7 +2352,7 @@ il_is_lq_table_valid(struct il_priv *il, struct il_rxon_context *ctx,
{ {
int i; int i;
if (ctx->ht.enabled) if (il->ht.enabled)
return true; return true;
D_INFO("Channel %u is not an HT channel\n", il->active.channel); D_INFO("Channel %u is not an HT channel\n", il->active.channel);
...@@ -3559,7 +3559,7 @@ bool ...@@ -3559,7 +3559,7 @@ bool
il_is_ht40_tx_allowed(struct il_priv *il, struct il_rxon_context *ctx, il_is_ht40_tx_allowed(struct il_priv *il, struct il_rxon_context *ctx,
struct ieee80211_sta_ht_cap *ht_cap) struct ieee80211_sta_ht_cap *ht_cap)
{ {
if (!ctx->ht.enabled || !ctx->ht.is_40mhz) if (!il->ht.enabled || !il->ht.is_40mhz)
return false; return false;
/* /*
...@@ -3576,7 +3576,7 @@ il_is_ht40_tx_allowed(struct il_priv *il, struct il_rxon_context *ctx, ...@@ -3576,7 +3576,7 @@ il_is_ht40_tx_allowed(struct il_priv *il, struct il_rxon_context *ctx,
return il_is_channel_extension(il, il->band, return il_is_channel_extension(il, il->band,
le16_to_cpu(il->staging.channel), le16_to_cpu(il->staging.channel),
ctx->ht.extension_chan_offset); il->ht.extension_chan_offset);
} }
EXPORT_SYMBOL(il_is_ht40_tx_allowed); EXPORT_SYMBOL(il_is_ht40_tx_allowed);
...@@ -3832,7 +3832,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf, ...@@ -3832,7 +3832,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf,
{ {
struct il_rxon_cmd *rxon = &il->staging; struct il_rxon_cmd *rxon = &il->staging;
if (!ctx->ht.enabled) { if (!il->ht.enabled) {
rxon->flags &= rxon->flags &=
~(RXON_FLG_CHANNEL_MODE_MSK | ~(RXON_FLG_CHANNEL_MODE_MSK |
RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK | RXON_FLG_HT40_PROT_MSK RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK | RXON_FLG_HT40_PROT_MSK
...@@ -3841,7 +3841,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf, ...@@ -3841,7 +3841,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf,
} }
rxon->flags |= rxon->flags |=
cpu_to_le32(ctx->ht.protection << RXON_FLG_HT_OPERATING_MODE_POS); cpu_to_le32(il->ht.protection << RXON_FLG_HT_OPERATING_MODE_POS);
/* Set up channel bandwidth: /* Set up channel bandwidth:
* 20 MHz only, 20/40 mixed or pure 40 if ht40 ok */ * 20 MHz only, 20/40 mixed or pure 40 if ht40 ok */
...@@ -3850,10 +3850,10 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf, ...@@ -3850,10 +3850,10 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf,
~(RXON_FLG_CHANNEL_MODE_MSK | RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK); ~(RXON_FLG_CHANNEL_MODE_MSK | RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK);
if (il_is_ht40_tx_allowed(il, ctx, NULL)) { if (il_is_ht40_tx_allowed(il, ctx, NULL)) {
/* pure ht40 */ /* pure ht40 */
if (ctx->ht.protection == IEEE80211_HT_OP_MODE_PROTECTION_20MHZ) { if (il->ht.protection == IEEE80211_HT_OP_MODE_PROTECTION_20MHZ) {
rxon->flags |= RXON_FLG_CHANNEL_MODE_PURE_40; rxon->flags |= RXON_FLG_CHANNEL_MODE_PURE_40;
/* Note: control channel is opposite of extension channel */ /* Note: control channel is opposite of extension channel */
switch (ctx->ht.extension_chan_offset) { switch (il->ht.extension_chan_offset) {
case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
rxon->flags &= rxon->flags &=
~RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK; ~RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK;
...@@ -3864,7 +3864,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf, ...@@ -3864,7 +3864,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf,
} }
} else { } else {
/* Note: control channel is opposite of extension channel */ /* Note: control channel is opposite of extension channel */
switch (ctx->ht.extension_chan_offset) { switch (il->ht.extension_chan_offset) {
case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
rxon->flags &= rxon->flags &=
~(RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK); ~(RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK);
...@@ -3890,7 +3890,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf, ...@@ -3890,7 +3890,7 @@ _il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf,
D_ASSOC("rxon flags 0x%X operation mode :0x%X " D_ASSOC("rxon flags 0x%X operation mode :0x%X "
"extension channel offset 0x%x\n", le32_to_cpu(rxon->flags), "extension channel offset 0x%x\n", le32_to_cpu(rxon->flags),
ctx->ht.protection, ctx->ht.extension_chan_offset); il->ht.protection, il->ht.extension_chan_offset);
} }
void void
...@@ -5236,7 +5236,7 @@ il_update_qos(struct il_priv *il, struct il_rxon_context *ctx) ...@@ -5236,7 +5236,7 @@ il_update_qos(struct il_priv *il, struct il_rxon_context *ctx)
il->qos_data.def_qos_parm.qos_flags |= il->qos_data.def_qos_parm.qos_flags |=
QOS_PARAM_FLG_UPDATE_EDCA_MSK; QOS_PARAM_FLG_UPDATE_EDCA_MSK;
if (ctx->ht.enabled) if (il->ht.enabled)
il->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK; il->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK;
D_QOS("send QoS cmd with Qos active=%d FLAGS=0x%X\n", D_QOS("send QoS cmd with Qos active=%d FLAGS=0x%X\n",
...@@ -5319,32 +5319,32 @@ il_mac_config(struct ieee80211_hw *hw, u32 changed) ...@@ -5319,32 +5319,32 @@ il_mac_config(struct ieee80211_hw *hw, u32 changed)
spin_lock_irqsave(&il->lock, flags); spin_lock_irqsave(&il->lock, flags);
/* Configure HT40 channels */ /* Configure HT40 channels */
if (ctx->ht.enabled != conf_is_ht(conf)) { if (il->ht.enabled != conf_is_ht(conf)) {
ctx->ht.enabled = conf_is_ht(conf); il->ht.enabled = conf_is_ht(conf);
ht_changed = true; ht_changed = true;
} }
if (ctx->ht.enabled) { if (il->ht.enabled) {
if (conf_is_ht40_minus(conf)) { if (conf_is_ht40_minus(conf)) {
ctx->ht.extension_chan_offset = il->ht.extension_chan_offset =
IEEE80211_HT_PARAM_CHA_SEC_BELOW; IEEE80211_HT_PARAM_CHA_SEC_BELOW;
ctx->ht.is_40mhz = true; il->ht.is_40mhz = true;
} else if (conf_is_ht40_plus(conf)) { } else if (conf_is_ht40_plus(conf)) {
ctx->ht.extension_chan_offset = il->ht.extension_chan_offset =
IEEE80211_HT_PARAM_CHA_SEC_ABOVE; IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
ctx->ht.is_40mhz = true; il->ht.is_40mhz = true;
} else { } else {
ctx->ht.extension_chan_offset = il->ht.extension_chan_offset =
IEEE80211_HT_PARAM_CHA_SEC_NONE; IEEE80211_HT_PARAM_CHA_SEC_NONE;
ctx->ht.is_40mhz = false; il->ht.is_40mhz = false;
} }
} else } else
ctx->ht.is_40mhz = false; il->ht.is_40mhz = false;
/* /*
* Default to no protection. Protection mode will * Default to no protection. Protection mode will
* later be set from BSS config in il_ht_conf * later be set from BSS config in il_ht_conf
*/ */
ctx->ht.protection = IEEE80211_HT_OP_MODE_PROTECTION_NONE; il->ht.protection = IEEE80211_HT_OP_MODE_PROTECTION_NONE;
/* if we are switching from ht to 2.4 clear flags /* if we are switching from ht to 2.4 clear flags
* from any ht related info since 2.4 does not * from any ht related info since 2.4 does not
...@@ -5460,16 +5460,15 @@ il_ht_conf(struct il_priv *il, struct ieee80211_vif *vif) ...@@ -5460,16 +5460,15 @@ il_ht_conf(struct il_priv *il, struct ieee80211_vif *vif)
struct il_ht_config *ht_conf = &il->current_ht_config; struct il_ht_config *ht_conf = &il->current_ht_config;
struct ieee80211_sta *sta; struct ieee80211_sta *sta;
struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
struct il_rxon_context *ctx = il_rxon_ctx_from_vif(vif);
D_ASSOC("enter:\n"); D_ASSOC("enter:\n");
if (!ctx->ht.enabled) if (!il->ht.enabled)
return; return;
ctx->ht.protection = il->ht.protection =
bss_conf->ht_operation_mode & IEEE80211_HT_OP_MODE_PROTECTION; bss_conf->ht_operation_mode & IEEE80211_HT_OP_MODE_PROTECTION;
ctx->ht.non_gf_sta_present = il->ht.non_gf_sta_present =
!!(bss_conf-> !!(bss_conf->
ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT); ht_operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
......
...@@ -1164,13 +1164,6 @@ struct il_rxon_context { ...@@ -1164,13 +1164,6 @@ struct il_rxon_context {
* we already removed the vif for type setting. * we already removed the vif for type setting.
*/ */
bool always_active, is_active; bool always_active, is_active;
struct {
bool non_gf_sta_present;
u8 protection;
bool enabled, is_40mhz;
u8 extension_chan_offset;
} ht;
}; };
struct il_power_mgr { struct il_power_mgr {
...@@ -1278,6 +1271,14 @@ struct il_priv { ...@@ -1278,6 +1271,14 @@ struct il_priv {
struct il_qos_info qos_data; struct il_qos_info qos_data;
struct {
bool enabled;
bool is_40mhz;
bool non_gf_sta_present;
u8 protection;
u8 extension_chan_offset;
} ht;
/* /*
* We declare this const so it can only be * We declare this const so it can only be
* changed via explicit cast within the * changed via explicit cast within the
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册