mac80211: remove tx_frags driver callback

The implementation of tx_frags is buggy due to
not handling queue stop, and there's no driver
implementing it so remove it.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Johannes Berg 2012-07-02 15:40:18 +02:00
parent ba0afa2f22
commit cb831b537d
4 changed files with 3 additions and 29 deletions

View File

@ -1896,19 +1896,6 @@ enum ieee80211_rate_control_changed {
* The low-level driver should send the frame out based on * The low-level driver should send the frame out based on
* configuration in the TX control data. This handler should, * configuration in the TX control data. This handler should,
* preferably, never fail and stop queues appropriately. * preferably, never fail and stop queues appropriately.
* This must be implemented if @tx_frags is not.
* Must be atomic.
*
* @tx_frags: Called to transmit multiple fragments of a single MSDU.
* This handler must consume all fragments, sending out some of
* them only is useless and it can't ask for some of them to be
* queued again. If the frame is not fragmented the queue has a
* single SKB only. To avoid issues with the networking stack
* when TX status is reported the frames should be removed from
* the skb queue.
* If this is used, the tx_info @vif and @sta pointers will be
* invalid -- you must not use them in that case.
* This must be implemented if @tx isn't.
* Must be atomic. * Must be atomic.
* *
* @start: Called before the first netdevice attached to the hardware * @start: Called before the first netdevice attached to the hardware
@ -2260,8 +2247,6 @@ enum ieee80211_rate_control_changed {
*/ */
struct ieee80211_ops { struct ieee80211_ops {
void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
void (*tx_frags)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_sta *sta, struct sk_buff_head *skbs);
int (*start)(struct ieee80211_hw *hw); int (*start)(struct ieee80211_hw *hw);
void (*stop)(struct ieee80211_hw *hw); void (*stop)(struct ieee80211_hw *hw);
#ifdef CONFIG_PM #ifdef CONFIG_PM

View File

@ -27,14 +27,6 @@ static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb)
local->ops->tx(&local->hw, skb); local->ops->tx(&local->hw, skb);
} }
static inline void drv_tx_frags(struct ieee80211_local *local,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct sk_buff_head *skbs)
{
local->ops->tx_frags(&local->hw, vif, sta, skbs);
}
static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata, static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata,
u32 sset, u8 *data) u32 sset, u8 *data)
{ {

View File

@ -587,7 +587,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN); local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);
BUG_ON(!ops->tx && !ops->tx_frags); BUG_ON(!ops->tx);
BUG_ON(!ops->start); BUG_ON(!ops->start);
BUG_ON(!ops->stop); BUG_ON(!ops->stop);
BUG_ON(!ops->config); BUG_ON(!ops->config);

View File

@ -1295,11 +1295,8 @@ static bool __ieee80211_tx(struct ieee80211_local *local,
break; break;
} }
if (local->ops->tx_frags) result = ieee80211_tx_frags(local, vif, pubsta, skbs,
drv_tx_frags(local, vif, pubsta, skbs); txpending);
else
result = ieee80211_tx_frags(local, vif, pubsta, skbs,
txpending);
ieee80211_tpt_led_trig_tx(local, fc, led_len); ieee80211_tpt_led_trig_tx(local, fc, led_len);
ieee80211_led_tx(local, 1); ieee80211_led_tx(local, 1);