diff options
author | John W. Linville <linville@tuxdriver.com> | 2014-06-02 11:20:17 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-06-02 11:20:17 -0400 |
commit | fcb2c0d6cf75750e2912b09a3d0a782c90e2b1a0 (patch) | |
tree | a17982638b066ae29f8ab1a6e37f18e6dddb5272 /drivers/net/wireless/ath/ath10k/ce.c | |
parent | 96b2e73c5471542cb9c622c4360716684f8797ed (diff) | |
parent | a715c7ddd65a1a3b2839b8ebd759bb2d361f7675 (diff) | |
download | talos-op-linux-fcb2c0d6cf75750e2912b09a3d0a782c90e2b1a0.tar.gz talos-op-linux-fcb2c0d6cf75750e2912b09a3d0a782c90e2b1a0.zip |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/ce.c')
-rw-r--r-- | drivers/net/wireless/ath/ath10k/ce.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c index 1e4cad8632b5..d185dc0cd12b 100644 --- a/drivers/net/wireless/ath/ath10k/ce.c +++ b/drivers/net/wireless/ath/ath10k/ce.c @@ -329,6 +329,33 @@ exit: return ret; } +void __ath10k_ce_send_revert(struct ath10k_ce_pipe *pipe) +{ + struct ath10k *ar = pipe->ar; + struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); + struct ath10k_ce_ring *src_ring = pipe->src_ring; + u32 ctrl_addr = pipe->ctrl_addr; + + lockdep_assert_held(&ar_pci->ce_lock); + + /* + * This function must be called only if there is an incomplete + * scatter-gather transfer (before index register is updated) + * that needs to be cleaned up. + */ + if (WARN_ON_ONCE(src_ring->write_index == src_ring->sw_index)) + return; + + if (WARN_ON_ONCE(src_ring->write_index == + ath10k_ce_src_ring_write_index_get(ar, ctrl_addr))) + return; + + src_ring->write_index--; + src_ring->write_index &= src_ring->nentries_mask; + + src_ring->per_transfer_context[src_ring->write_index] = NULL; +} + int ath10k_ce_send(struct ath10k_ce_pipe *ce_state, void *per_transfer_context, u32 buffer, |