qcacmn: Fix for CE Ring full error in ce_send_single path

sw_index is updated based DATA_CE_SW_INDEX_UPDATE_SKIP compile time flag.
If DATA_CE_SW_INDEX_UPDATE_SKIP is enabled software has to take care of
sw_index updation. Otherwise it will be read through register

Change-Id: I994e04cf08170441eba034a747e6224ec4c8370e
CRs-Fixed: 1072217
Esse commit está contido em:
Venkateswara Swamy Bandaru
2016-09-30 16:02:43 +05:30
commit de qcabuildsw
commit 17cf2be2d4

Ver arquivo

@@ -68,6 +68,15 @@
#endif /* QCA_WIFI_3_0 */
#endif /* IPA_OFFLOAD */
#ifndef DATA_CE_SW_INDEX_NO_INLINE_UPDATE
#define DATA_CE_UPDATE_SWINDEX(x, scn, addr) \
do { \
x = CE_SRC_RING_READ_IDX_GET_FROM_DDR(scn, addr); \
} while (0);
#else
#define DATA_CE_UPDATE_SWINDEX(x, scn, addr)
#endif
static int war1_allow_sleep;
/* io32 write workaround */
static int hif_ce_war1;
@@ -597,7 +606,7 @@ int ce_send_fast(struct CE_handle *copyeng, qdf_nbuf_t msdu,
qdf_spin_lock_bh(&ce_state->ce_index_lock);
Q_TARGET_ACCESS_BEGIN(scn);
src_ring->sw_index = CE_SRC_RING_READ_IDX_GET_FROM_DDR(scn, ctrl_addr);
DATA_CE_UPDATE_SWINDEX(src_ring->sw_index, scn, ctrl_addr);
write_index = src_ring->write_index;
sw_index = src_ring->sw_index;
@@ -800,6 +809,7 @@ qdf_nbuf_t ce_batch_send(struct CE_handle *ce_tx_hdl, qdf_nbuf_t msdu,
int deltacount = 0;
qdf_nbuf_t freelist = NULL, hfreelist = NULL, tempnext;
DATA_CE_UPDATE_SWINDEX(src_ring->sw_index, scn, ctrl_addr);
sw_index = src_ring->sw_index;
write_index = src_ring->write_index;
@@ -878,6 +888,7 @@ qdf_nbuf_t ce_batch_send(struct CE_handle *ce_tx_hdl, qdf_nbuf_t msdu,
*
* Return: void
*/
#ifdef DATA_CE_SW_INDEX_NO_INLINE_UPDATE
void ce_update_tx_ring(struct CE_handle *ce_tx_hdl, uint32_t num_htt_cmpls)
{
struct CE_state *ce_state = (struct CE_state *)ce_tx_hdl;
@@ -891,6 +902,10 @@ void ce_update_tx_ring(struct CE_handle *ce_tx_hdl, uint32_t num_htt_cmpls)
CE_RING_IDX_ADD(nentries_mask, src_ring->sw_index,
num_htt_cmpls);
}
#else
void ce_update_tx_ring(struct CE_handle *ce_tx_hdl, uint32_t num_htt_cmpls)
{}
#endif
/**
* ce_send_single() - sends
@@ -923,6 +938,7 @@ int ce_send_single(struct CE_handle *ce_tx_hdl, qdf_nbuf_t msdu,
struct CE_src_desc lsrc_desc = {0};
DATA_CE_UPDATE_SWINDEX(src_ring->sw_index, scn, ctrl_addr);
sw_index = src_ring->sw_index;
write_index = src_ring->write_index;