diff options
| author | Tang Yingying <yintang@codeaurora.org> | 2018-06-08 12:14:10 +0800 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2018-06-13 10:50:21 -0700 |
| commit | c681e16408c23405708a6118b47495b0cc166b8a (patch) | |
| tree | e10274c2eb4da2dbe24d419fbaa2a76289f9a4ef | |
| parent | 851cb82fe3601b5db70aaa1d623f78d7b58df4c4 (diff) | |
qcacld-3.0: Avoid to use WDI 2 related resource in WDI 1 platform
rx2_rdy_ring and rx2_proc_done_idx are WDI 2 related resource. They will
not be allocated memory in WDI 1 platform. Add a WDI version check before
use them to avoid NULL pointer issue.
CRs-Fixed: 2256816
Change-Id: If0e17bc4aa7a1e93020b638e3782ccffafb5326b
| -rw-r--r-- | core/hdd/src/wlan_hdd_ipa.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index 719bde01880f..ed6b489b3b24 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -561,9 +561,23 @@ do { \ (0 == qdf_mem_get_dma_addr(osdev, &ipa_resource->tx_comp_ring->mem_info)) || \ (0 == qdf_mem_get_dma_addr(osdev, &ipa_resource->rx_rdy_ring->mem_info)) || \ (0 == qdf_mem_get_dma_addr(osdev, &ipa_resource->rx2_rdy_ring->mem_info))) + +#define HDD_IPA_WDI2_SET_SMMU() \ +do { \ + qdf_mem_copy(&pipe_in.u.ul_smmu.rdy_comp_ring, \ + &ipa_res->rx2_rdy_ring->sgtable, \ + sizeof(sgtable_t)); \ + pipe_in.u.ul_smmu.rdy_comp_ring_size = \ + ipa_res->rx2_rdy_ring->mem_info.size; \ + pipe_in.u.ul_smmu.rdy_comp_ring_wp_pa = \ + ipa_res->rx2_proc_done_idx->mem_info.pa; \ + pipe_in.u.ul_smmu.rdy_comp_ring_wp_va = \ + ipa_res->rx2_proc_done_idx->vaddr; \ +} while (0) #else /* Do nothing */ #define HDD_IPA_WDI2_SET(pipe_in, ipa_ctxt, osdev) +#define HDD_IPA_WDI2_SET_SMMU() #define IPA_RESOURCE_READY(ipa_resource, osdev) \ ((0 == qdf_mem_get_dma_addr(osdev, &ipa_resource->ce_sr->mem_info)) || \ @@ -1215,13 +1229,15 @@ static int hdd_ipa_wdi_conn_pipes(struct hdd_ipa_priv *hdd_ipa, info_smmu->transfer_ring_doorbell_pa = ipa_res->rx_proc_done_idx->mem_info.pa; - qdf_mem_copy(&info_smmu->event_ring_base, - &ipa_res->rx2_rdy_ring->sgtable, - sizeof(sgtable_t)); - info_smmu->event_ring_size = - ipa_res->rx2_rdy_ring->mem_info.size; - info_smmu->event_ring_doorbell_pa = - ipa_res->rx2_proc_done_idx->mem_info.pa; + if (hdd_ipa->wdi_version == IPA_WDI_2) { + qdf_mem_copy(&info_smmu->event_ring_base, + &ipa_res->rx2_rdy_ring->sgtable, + sizeof(sgtable_t)); + info_smmu->event_ring_size = + ipa_res->rx2_rdy_ring->mem_info.size; + info_smmu->event_ring_doorbell_pa = + ipa_res->rx2_proc_done_idx->mem_info.pa; + } } else { /* TX */ info = &in->u_tx.tx; @@ -1736,18 +1752,7 @@ static int hdd_ipa_wdi_conn_pipes(struct hdd_ipa_priv *hdd_ipa, pipe_in.u.ul_smmu.rdy_ring_rp_va = ipa_res->rx_proc_done_idx->vaddr; - qdf_mem_copy(&pipe_in.u.ul_smmu.rdy_comp_ring, - &ipa_res->rx2_rdy_ring->sgtable, - sizeof(sgtable_t)); - - pipe_in.u.ul_smmu.rdy_comp_ring_size = - ipa_res->rx2_rdy_ring->mem_info.size; - - pipe_in.u.ul_smmu.rdy_comp_ring_wp_pa = - ipa_res->rx2_proc_done_idx->mem_info.pa; - - pipe_in.u.ul_smmu.rdy_comp_ring_wp_va = - ipa_res->rx2_proc_done_idx->vaddr; + HDD_IPA_WDI2_SET_SMMU(); } else { pipe_in.u.ul.rdy_ring_base_pa = ipa_res->rx_rdy_ring->mem_info.pa; |
