diff options
author | David Lin <dlin@marvell.com> | 2015-10-16 12:52:21 +0800 |
---|---|---|
committer | David Lin <dlin@marvell.com> | 2015-10-16 12:52:21 +0800 |
commit | 7a6aff718d2de7dee6f9d82eae8af91667e8ee86 (patch) | |
tree | f814ad67ecaccb2f005ba5f739632f8a398f629a /isr.c | |
parent | 59e0d3d167a5bc2c03010df4ed54cc0653b5ae58 (diff) |
Commit mwlwifi driver 10.3.0.10.
1. Enhance Tx throughput.
2. Add the mechanism to stop and wake up sub Tx queue via ieee80211_stop_queue() and ieee80211_wake_queue().
3. Refine code related to BA.
4. Replace BUG_ON() with WARN_ON() as suggested by LWN.
5. Acknowledge all packets in AMSDU to mac80211 after transmission is done.
6. Merge patch from community: fix a problem where the resources are left claimed if the firmware fails to load.
7. Replace dma_alloc_coherent() with dmam_alloc_coherent().
8. Add debugfs.
9. Add linux version check to apply new API ieee80211_hw_set() existed after kernel 4.2.
10. Rearrange spin lock sequences in flushing AMSDU function to avoid dead lock on OpenWrt platform.
Signed-off-by: David Lin <dlin@marvell.com>
Diffstat (limited to 'isr.c')
-rw-r--r-- | isr.c | 16 |
1 files changed, 4 insertions, 12 deletions
@@ -66,12 +66,12 @@ irqreturn_t mwl_isr(int irq, void *dev_id) } } - if (int_status & MACREG_A2HRIC_BIT_QUEUE_EMPTY) { - int_status &= ~MACREG_A2HRIC_BIT_QUEUE_EMPTY; + if (int_status & MACREG_A2HRIC_BIT_QUE_EMPTY) { + int_status &= ~MACREG_A2HRIC_BIT_QUE_EMPTY; if (!priv->is_qe_schedule) { status = readl(int_status_mask); - writel((status & ~MACREG_A2HRIC_BIT_QUEUE_EMPTY), + writel((status & ~MACREG_A2HRIC_BIT_QUE_EMPTY), int_status_mask); tasklet_schedule(&priv->qe_task); priv->is_qe_schedule = true; @@ -100,7 +100,6 @@ void mwl_watchdog_ba_events(struct work_struct *work) struct mwl_ampdu_stream *streams; struct mwl_priv *priv = container_of(work, struct mwl_priv, watchdog_ba_handle); - struct ieee80211_hw *hw = priv->hw; u32 status; rc = mwl_fwcmd_get_watchdog_bitmap(priv->hw, &bitmap); @@ -123,13 +122,9 @@ void mwl_watchdog_ba_events(struct work_struct *work) /* Check if the stream is in use before disabling it */ streams = &priv->ampdu[stream_index]; - if (streams->state == AMPDU_STREAM_ACTIVE) { + if (streams->state == AMPDU_STREAM_ACTIVE) ieee80211_stop_tx_ba_session(streams->sta, streams->tid); - spin_unlock_bh(&priv->stream_lock); - mwl_fwcmd_destroy_ba(hw, stream_index); - spin_lock_bh(&priv->stream_lock); - } } else { for (stream_index = 0; stream_index < SYSADPT_TX_AMPDU_QUEUES; @@ -141,9 +136,6 @@ void mwl_watchdog_ba_events(struct work_struct *work) ieee80211_stop_tx_ba_session(streams->sta, streams->tid); - spin_unlock_bh(&priv->stream_lock); - mwl_fwcmd_destroy_ba(hw, stream_index); - spin_lock_bh(&priv->stream_lock); } } } |