mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
iwlegacy: add flush callback
Dump implementation of flush, which just wait until all TX queues become empty. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
93476b1e68
commit
70277f47b5
@ -3474,6 +3474,7 @@ struct ieee80211_ops il3945_mac_ops = {
|
||||
.sta_add = il3945_mac_sta_add,
|
||||
.sta_remove = il_mac_sta_remove,
|
||||
.tx_last_beacon = il_mac_tx_last_beacon,
|
||||
.flush = il_mac_flush,
|
||||
};
|
||||
|
||||
static int
|
||||
|
@ -6308,6 +6308,7 @@ const struct ieee80211_ops il4965_mac_ops = {
|
||||
.sta_remove = il_mac_sta_remove,
|
||||
.channel_switch = il4965_mac_channel_switch,
|
||||
.tx_last_beacon = il_mac_tx_last_beacon,
|
||||
.flush = il_mac_flush,
|
||||
};
|
||||
|
||||
static int
|
||||
|
@ -4707,6 +4707,42 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(il_mac_change_interface);
|
||||
|
||||
void
|
||||
il_mac_flush(struct ieee80211_hw *hw, bool drop)
|
||||
{
|
||||
struct il_priv *il = hw->priv;
|
||||
unsigned long timeout = jiffies + msecs_to_jiffies(500);
|
||||
int i;
|
||||
|
||||
mutex_lock(&il->mutex);
|
||||
D_MAC80211("enter\n");
|
||||
|
||||
if (il->txq == NULL)
|
||||
goto out;
|
||||
|
||||
for (i = 0; i < il->hw_params.max_txq_num; i++) {
|
||||
struct il_queue *q;
|
||||
|
||||
if (i == il->cmd_queue)
|
||||
continue;
|
||||
|
||||
q = &il->txq[i].q;
|
||||
if (q->read_ptr == q->write_ptr)
|
||||
continue;
|
||||
|
||||
if (time_after(jiffies, timeout)) {
|
||||
IL_ERR("Failed to flush queue %d\n", q->id);
|
||||
break;
|
||||
}
|
||||
|
||||
msleep(20);
|
||||
}
|
||||
out:
|
||||
D_MAC80211("leave\n");
|
||||
mutex_unlock(&il->mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(il_mac_flush);
|
||||
|
||||
/*
|
||||
* On every watchdog tick we check (latest) time stamp. If it does not
|
||||
* change during timeout period and queue is not empty we reset firmware.
|
||||
|
@ -1723,6 +1723,7 @@ void il_mac_remove_interface(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif);
|
||||
int il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
enum nl80211_iftype newtype, bool newp2p);
|
||||
void il_mac_flush(struct ieee80211_hw *hw, bool drop);
|
||||
int il_alloc_txq_mem(struct il_priv *il);
|
||||
void il_free_txq_mem(struct il_priv *il);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user