mac80211: move TX station pointer and restructure TX

Remove the control.sta pointer from ieee80211_tx_info to free up
sufficient space in the TX skb control buffer for the upcoming
Transmit Power Control (TPC).
Instead, the pointer is now on the stack in a new control struct
that is passed as a function parameter to the drivers' tx method.

Signed-off-by: Thomas Huehn <[email protected]>
Signed-off-by: Alina Friedrichsen <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
[reworded commit message]
Signed-off-by: Johannes Berg <[email protected]>
This commit is contained in:
Thomas Huehn 2012-07-23 21:33:42 +02:00 • committed by Johannes Berg
commit 36323f817a
53 changed files with 232 additions and 132 deletions

View file

@ -22,9 +22,11 @@ get_bss_sdata(struct ieee80211_sub_if_data *sdata)
return sdata;
}
static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb)
static inline void drv_tx(struct ieee80211_local *local,
struct ieee80211_tx_control *control,
struct sk_buff *skb)
{
local->ops->tx(&local->hw, skb);
local->ops->tx(&local->hw, control, skb);
}
static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata,

View file

@ -1204,6 +1204,7 @@ static bool ieee80211_tx_frags(struct ieee80211_local *local,
struct sk_buff_head *skbs,
bool txpending)
{
struct ieee80211_tx_control control;
struct sk_buff *skb, *tmp;
unsigned long flags;
@ -1240,10 +1241,10 @@ static bool ieee80211_tx_frags(struct ieee80211_local *local,
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
info->control.vif = vif;
info->control.sta = sta;
control.sta = sta;
__skb_unlink(skb, skbs);
drv_tx(local, skb);
drv_tx(local, &control, skb);
}
return true;