summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCNSS_WLAN Service <cnssbldsw@qualcomm.com>2017-09-13 09:40:05 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-09-13 09:40:05 -0700
commit9343072bf70ab2befdbabfa765c7e61f296ab14f (patch)
treeb601b62ecb31689bfa42c356e4b2939d2f0542f7
parent093340957ce4b692b791d90c8c436d766e2e05ba (diff)
parentc774a3f219a00b9f24bc8362a82a13c6dacde59d (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.c46
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)