diff options
| author | CNSS_WLAN Service <cnssbldsw@qualcomm.com> | 2017-09-13 09:40:05 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-09-13 09:40:05 -0700 |
| commit | 9343072bf70ab2befdbabfa765c7e61f296ab14f (patch) | |
| tree | b601b62ecb31689bfa42c356e4b2939d2f0542f7 | |
| parent | 093340957ce4b692b791d90c8c436d766e2e05ba (diff) | |
| parent | c774a3f219a00b9f24bc8362a82a13c6dacde59d (diff) | |
Merge "qcacmn: Return proper error status from modules under hif_start" into wlan-cmn.driver.lnx.1.0
| -rw-r--r-- | hif/src/ce/ce_main.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 6aa5d92955cf..c7ab60bb8d46 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -59,7 +59,7 @@ #include "mp_dev.h" /* Forward references */ -static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info); +QDF_STATUS hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info); /* * Fix EV118783, poll to check whether a BMI response comes @@ -81,7 +81,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info); #define HTT_DATA3_MSG_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP, 2) #endif -static int hif_post_recv_buffers(struct hif_softc *scn); +QDF_STATUS hif_post_recv_buffers(struct hif_softc *scn); static void hif_config_rri_on_ddr(struct hif_softc *scn); static void hif_clear_rri_on_ddr(struct hif_softc *scn); @@ -1761,7 +1761,7 @@ static void hif_post_recv_buffers_failure(struct HIF_CE_pipe_info *pipe_info, -static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) +QDF_STATUS hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) { struct CE_handle *ce_hdl; qdf_size_t buf_sz; @@ -1772,7 +1772,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) buf_sz = pipe_info->buf_sz; if (buf_sz == 0) { /* Unused Copy Engine */ - return 0; + return QDF_STATUS_SUCCESS; } ce_hdl = pipe_info->ce_hdl; @@ -1781,7 +1781,6 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) while (atomic_read(&pipe_info->recv_bufs_needed) > 0) { qdf_dma_addr_t CE_data; /* CE space buffer address */ qdf_nbuf_t nbuf; - int status; atomic_dec(&pipe_info->recv_bufs_needed); qdf_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); @@ -1792,7 +1791,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) &pipe_info->nbuf_alloc_err_count, HIF_RX_NBUF_ALLOC_FAILURE, "HIF_RX_NBUF_ALLOC_FAILURE"); - return 1; + return QDF_STATUS_E_NOMEM; } /* @@ -1809,16 +1808,16 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) HIF_RX_NBUF_MAP_FAILURE, "HIF_RX_NBUF_MAP_FAILURE"); qdf_nbuf_free(nbuf); - return 1; + return ret; } CE_data = qdf_nbuf_get_frag_paddr(nbuf, 0); qdf_mem_dma_sync_single_for_device(scn->qdf_dev, CE_data, buf_sz, DMA_FROM_DEVICE); - status = ce_recv_buf_enqueue(ce_hdl, (void *)nbuf, CE_data); - QDF_ASSERT(status == QDF_STATUS_SUCCESS); - if (unlikely(status != EOK)) { + ret = ce_recv_buf_enqueue(ce_hdl, (void *)nbuf, CE_data); + if (unlikely(ret != QDF_STATUS_SUCCESS)) { + QDF_ASSERT(0); hif_post_recv_buffers_failure(pipe_info, nbuf, &pipe_info->nbuf_ce_enqueue_err_count, HIF_RX_NBUF_ENQUEUE_FAILURE, @@ -1827,7 +1826,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) qdf_nbuf_unmap_single(scn->qdf_dev, nbuf, QDF_DMA_FROM_DEVICE); qdf_nbuf_free(nbuf); - return 1; + return ret; } qdf_spin_lock_bh(&pipe_info->recv_bufs_needed_lock); @@ -1845,7 +1844,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) qdf_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); - return 0; + return QDF_STATUS_SUCCESS; } /* @@ -1855,11 +1854,12 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) * failures, non-zero if unable to completely replenish * receive buffers for fastpath rx Copy engine. */ -static int hif_post_recv_buffers(struct hif_softc *scn) +QDF_STATUS hif_post_recv_buffers(struct hif_softc *scn) { struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn); - int pipe_num, rv = 0; + int pipe_num; struct CE_state *ce_state; + QDF_STATUS qdf_status; A_TARGET_ACCESS_LIKELY(scn); for (pipe_num = 0; pipe_num < scn->ce_count; pipe_num++) { @@ -1872,24 +1872,25 @@ static int hif_post_recv_buffers(struct hif_softc *scn) ce_state && (ce_state->htt_rx_data)) continue; - if (hif_post_recv_buffers_for_pipe(pipe_info) && + qdf_status = hif_post_recv_buffers_for_pipe(pipe_info); + if (!QDF_IS_STATUS_SUCCESS(qdf_status) && ce_state->htt_rx_data && scn->fastpath_mode_on) { - rv = 1; - goto done; + A_TARGET_ACCESS_UNLIKELY(scn); + return qdf_status; } } -done: A_TARGET_ACCESS_UNLIKELY(scn); - return rv; + return QDF_STATUS_SUCCESS; } QDF_STATUS hif_start(struct hif_opaque_softc *hif_ctx) { struct hif_softc *scn = HIF_GET_SOFTC(hif_ctx); struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn); + QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; hif_update_fastpath_recv_bufs_cnt(scn); @@ -1902,13 +1903,14 @@ QDF_STATUS hif_start(struct hif_opaque_softc *hif_ctx) hif_state->started = true; /* Post buffers once to start things off. */ - if (hif_post_recv_buffers(scn)) { + qdf_status = hif_post_recv_buffers(scn); + if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { /* cleanup is done in hif_ce_disable */ HIF_ERROR("%s:failed to post buffers", __func__); - return QDF_STATUS_E_FAILURE; + return qdf_status; } - return QDF_STATUS_SUCCESS; + return qdf_status; } static void hif_recv_buffer_cleanup_on_pipe(struct HIF_CE_pipe_info *pipe_info) |
