mac80211: use correct channel in TX
Since we only need the band, remove the channel pointer from struct ieee80211_tx_data and also assign it properly, depending on context, to the correct operating or current channel. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
6b77863b71
commit
2d56577bc6
|
@ -193,8 +193,6 @@ struct ieee80211_tx_data {
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
struct ieee80211_key *key;
|
struct ieee80211_key *key;
|
||||||
|
|
||||||
struct ieee80211_channel *channel;
|
|
||||||
|
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
|
||||||
if (WARN_ON_ONCE(info->control.rates[0].idx < 0))
|
if (WARN_ON_ONCE(info->control.rates[0].idx < 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
sband = local->hw.wiphy->bands[tx->channel->band];
|
sband = local->hw.wiphy->bands[info->band];
|
||||||
txrate = &sband->bitrates[info->control.rates[0].idx];
|
txrate = &sband->bitrates[info->control.rates[0].idx];
|
||||||
|
|
||||||
erp = txrate->flags & IEEE80211_RATE_ERP_G;
|
erp = txrate->flags & IEEE80211_RATE_ERP_G;
|
||||||
|
@ -615,7 +615,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
|
||||||
|
|
||||||
memset(&txrc, 0, sizeof(txrc));
|
memset(&txrc, 0, sizeof(txrc));
|
||||||
|
|
||||||
sband = tx->local->hw.wiphy->bands[tx->channel->band];
|
sband = tx->local->hw.wiphy->bands[info->band];
|
||||||
|
|
||||||
len = min_t(u32, tx->skb->len + FCS_LEN,
|
len = min_t(u32, tx->skb->len + FCS_LEN,
|
||||||
tx->local->hw.wiphy->frag_threshold);
|
tx->local->hw.wiphy->frag_threshold);
|
||||||
|
@ -626,13 +626,13 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
|
||||||
txrc.bss_conf = &tx->sdata->vif.bss_conf;
|
txrc.bss_conf = &tx->sdata->vif.bss_conf;
|
||||||
txrc.skb = tx->skb;
|
txrc.skb = tx->skb;
|
||||||
txrc.reported_rate.idx = -1;
|
txrc.reported_rate.idx = -1;
|
||||||
txrc.rate_idx_mask = tx->sdata->rc_rateidx_mask[tx->channel->band];
|
txrc.rate_idx_mask = tx->sdata->rc_rateidx_mask[info->band];
|
||||||
if (txrc.rate_idx_mask == (1 << sband->n_bitrates) - 1)
|
if (txrc.rate_idx_mask == (1 << sband->n_bitrates) - 1)
|
||||||
txrc.max_rate_idx = -1;
|
txrc.max_rate_idx = -1;
|
||||||
else
|
else
|
||||||
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
|
||||||
memcpy(txrc.rate_idx_mcs_mask,
|
memcpy(txrc.rate_idx_mcs_mask,
|
||||||
tx->sdata->rc_rateidx_mcs_mask[tx->channel->band],
|
tx->sdata->rc_rateidx_mcs_mask[info->band],
|
||||||
sizeof(txrc.rate_idx_mcs_mask));
|
sizeof(txrc.rate_idx_mcs_mask));
|
||||||
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
|
||||||
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
|
||||||
|
@ -667,7 +667,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
|
||||||
"scanning and associated. Target station: "
|
"scanning and associated. Target station: "
|
||||||
"%pM on %d GHz band\n",
|
"%pM on %d GHz band\n",
|
||||||
tx->sdata->name, hdr->addr1,
|
tx->sdata->name, hdr->addr1,
|
||||||
tx->channel->band ? 5 : 2))
|
info->band ? 5 : 2))
|
||||||
return TX_DROP;
|
return TX_DROP;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1131,7 +1131,6 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata,
|
||||||
tx->skb = skb;
|
tx->skb = skb;
|
||||||
tx->local = local;
|
tx->local = local;
|
||||||
tx->sdata = sdata;
|
tx->sdata = sdata;
|
||||||
tx->channel = local->hw.conf.channel;
|
|
||||||
__skb_queue_head_init(&tx->skbs);
|
__skb_queue_head_init(&tx->skbs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1400,8 +1399,7 @@ static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.channel = local->hw.conf.channel;
|
info->band = local->hw.conf.channel->band;
|
||||||
info->band = tx.channel->band;
|
|
||||||
|
|
||||||
/* set up hw_queue value early */
|
/* set up hw_queue value early */
|
||||||
if (!(info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) ||
|
if (!(info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) ||
|
||||||
|
@ -2710,8 +2708,7 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw,
|
||||||
info = IEEE80211_SKB_CB(skb);
|
info = IEEE80211_SKB_CB(skb);
|
||||||
|
|
||||||
tx.flags |= IEEE80211_TX_PS_BUFFERED;
|
tx.flags |= IEEE80211_TX_PS_BUFFERED;
|
||||||
tx.channel = local->hw.conf.channel;
|
info->band = local->oper_channel->band;
|
||||||
info->band = tx.channel->band;
|
|
||||||
|
|
||||||
if (invoke_tx_handlers(&tx))
|
if (invoke_tx_handlers(&tx))
|
||||||
skb = NULL;
|
skb = NULL;
|
||||||
|
|
Loading…
Reference in New Issue