Loading dp/wifi3.0/dp_main.c +28 −6 Original line number Diff line number Diff line Loading @@ -1650,6 +1650,27 @@ static void dp_srng_free(struct dp_soc *soc, struct dp_srng *srng) srng->hal_srng = NULL; } #ifdef DISABLE_MON_RING_MSI_CFG /* * dp_skip_msi_cfg() - Check if msi cfg has to be skipped for ring_type * @ring_type: sring type * * Return: True if msi cfg should be skipped for srng type else false */ static inline bool dp_skip_msi_cfg(int ring_type) { if (ring_type == RXDMA_MONITOR_STATUS) return true; return false; } #else static inline bool dp_skip_msi_cfg(int ring_type) { return false; } #endif /* * dp_srng_init() - Initialize SRNG * @soc : Data path soc handle Loading Loading @@ -1688,11 +1709,10 @@ static QDF_STATUS dp_srng_init(struct dp_soc *soc, struct dp_srng *srng, (void *)ring_params.ring_base_paddr, ring_params.num_entries); if (soc->intr_mode == DP_INTR_MSI) { if (soc->intr_mode == DP_INTR_MSI && !dp_skip_msi_cfg(ring_type)) { dp_srng_msi_setup(soc, &ring_params, ring_type, ring_num); dp_verbose_debug("Using MSI for ring_type: %d, ring_num %d", ring_type, ring_num); } else { ring_params.msi_data = 0; ring_params.msi_addr = 0; Loading Loading @@ -5974,6 +5994,8 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc, else if (hif_get_target_status(soc->hif_handle) == TARGET_STATUS_RESET) dp_vdev_flush_peers((struct cdp_vdev *)vdev, true); /* indicate that the vdev needs to be deleted */ vdev->delete.pending = 1; dp_rx_vdev_detach(vdev); /* * move it after dp_rx_vdev_detach(), Loading Loading @@ -6004,8 +6026,6 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc, qdf_mem_free(vdev->vdev_dp_ext_handle); vdev->vdev_dp_ext_handle = NULL; } /* indicate that the vdev needs to be deleted */ vdev->delete.pending = 1; vdev->delete.callback = callback; vdev->delete.context = cb_context; Loading Loading @@ -7321,9 +7341,11 @@ void dp_get_os_rx_handles_from_vdev_wifi3(struct cdp_soc_t *soc_hdl, struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id, DP_MOD_ID_CDP); if (!vdev) if (qdf_unlikely(!vdev)) { *stack_fn_p = NULL; *osif_vdev_p = NULL; return; } *stack_fn_p = vdev->osif_rx_stack; *osif_vdev_p = vdev->osif_vdev; dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP); Loading dp/wifi3.0/dp_rx.c +3 −3 Original line number Diff line number Diff line Loading @@ -2261,7 +2261,6 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf, uint16_t peer_id, vdev_id; uint32_t pkt_len = 0; uint8_t *rx_tlv_hdr; uint32_t l2_hdr_offset = 0; struct hal_rx_msdu_metadata msdu_metadata; peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf); Loading @@ -2271,14 +2270,15 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf, msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + RX_PKT_TLVS_LEN; l2_hdr_offset = hal_rx_msdu_end_l3_hdr_padding_get(soc->hal_soc, rx_tlv_hdr); qdf_nbuf_set_pktlen(nbuf, pkt_len); dp_rx_skip_tlvs(nbuf, msdu_metadata.l3_hdr_pad); dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf, HTT_INVALID_VDEV, is_offload, 0); qdf_nbuf_push_head(nbuf, msdu_metadata.l3_hdr_pad + RX_PKT_TLVS_LEN); } #endif Loading dp/wifi3.0/dp_types.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <qdf_lro.h> #include <queue.h> #include <htt_common.h> #include <htt.h> #include <htt_stats.h> #include <cdp_txrx_cmn.h> #ifdef DP_MOB_DEFS Loading hal/wifi3.0/hal_api.h +1 −2 Original line number Diff line number Diff line Loading @@ -1788,8 +1788,7 @@ void *hal_srng_src_get_next_consumed(void *hal_soc, uint32_t next_entry = (srng->last_desc_cleared + srng->entry_size) % srng->ring_size; if (next_entry != (srng->u.src_ring.cached_tp + srng->entry_size) % srng->ring_size) { if (next_entry != srng->u.src_ring.cached_tp) { desc = &srng->ring_base_vaddr[next_entry]; srng->last_desc_cleared = next_entry; } Loading hal/wifi3.0/hal_srng.c +23 −0 Original line number Diff line number Diff line Loading @@ -1721,6 +1721,27 @@ static inline void hal_srng_hw_init(struct hal_soc *hal, #define CHECK_SHADOW_REGISTERS false #endif #if defined(CLEAR_SW2TCL_CONSUMED_DESC) /** * hal_srng_last_desc_cleared_init - Initialize SRNG last_desc_cleared ptr * * @srng: Source ring pointer * * Return: None */ static inline void hal_srng_last_desc_cleared_init(struct hal_srng *srng) { srng->last_desc_cleared = srng->ring_size - srng->entry_size; } #else static inline void hal_srng_last_desc_cleared_init(struct hal_srng *srng) { } #endif /* CLEAR_SW2TCL_CONSUMED_DESC */ /** * hal_srng_setup - Initialize HW SRNG ring. * @hal_soc: Opaque HAL SOC handle Loading Loading @@ -1799,6 +1820,8 @@ void *hal_srng_setup(void *hal_soc, int ring_type, int ring_num, srng->flags |= HAL_SRNG_RING_PTR_SWAP; #endif hal_srng_last_desc_cleared_init(srng); if (srng->ring_dir == HAL_SRNG_SRC_RING) { srng->u.src_ring.hp = 0; srng->u.src_ring.reap_hp = srng->ring_size - Loading Loading
dp/wifi3.0/dp_main.c +28 −6 Original line number Diff line number Diff line Loading @@ -1650,6 +1650,27 @@ static void dp_srng_free(struct dp_soc *soc, struct dp_srng *srng) srng->hal_srng = NULL; } #ifdef DISABLE_MON_RING_MSI_CFG /* * dp_skip_msi_cfg() - Check if msi cfg has to be skipped for ring_type * @ring_type: sring type * * Return: True if msi cfg should be skipped for srng type else false */ static inline bool dp_skip_msi_cfg(int ring_type) { if (ring_type == RXDMA_MONITOR_STATUS) return true; return false; } #else static inline bool dp_skip_msi_cfg(int ring_type) { return false; } #endif /* * dp_srng_init() - Initialize SRNG * @soc : Data path soc handle Loading Loading @@ -1688,11 +1709,10 @@ static QDF_STATUS dp_srng_init(struct dp_soc *soc, struct dp_srng *srng, (void *)ring_params.ring_base_paddr, ring_params.num_entries); if (soc->intr_mode == DP_INTR_MSI) { if (soc->intr_mode == DP_INTR_MSI && !dp_skip_msi_cfg(ring_type)) { dp_srng_msi_setup(soc, &ring_params, ring_type, ring_num); dp_verbose_debug("Using MSI for ring_type: %d, ring_num %d", ring_type, ring_num); } else { ring_params.msi_data = 0; ring_params.msi_addr = 0; Loading Loading @@ -5974,6 +5994,8 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc, else if (hif_get_target_status(soc->hif_handle) == TARGET_STATUS_RESET) dp_vdev_flush_peers((struct cdp_vdev *)vdev, true); /* indicate that the vdev needs to be deleted */ vdev->delete.pending = 1; dp_rx_vdev_detach(vdev); /* * move it after dp_rx_vdev_detach(), Loading Loading @@ -6004,8 +6026,6 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc, qdf_mem_free(vdev->vdev_dp_ext_handle); vdev->vdev_dp_ext_handle = NULL; } /* indicate that the vdev needs to be deleted */ vdev->delete.pending = 1; vdev->delete.callback = callback; vdev->delete.context = cb_context; Loading Loading @@ -7321,9 +7341,11 @@ void dp_get_os_rx_handles_from_vdev_wifi3(struct cdp_soc_t *soc_hdl, struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id, DP_MOD_ID_CDP); if (!vdev) if (qdf_unlikely(!vdev)) { *stack_fn_p = NULL; *osif_vdev_p = NULL; return; } *stack_fn_p = vdev->osif_rx_stack; *osif_vdev_p = vdev->osif_vdev; dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP); Loading
dp/wifi3.0/dp_rx.c +3 −3 Original line number Diff line number Diff line Loading @@ -2261,7 +2261,6 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf, uint16_t peer_id, vdev_id; uint32_t pkt_len = 0; uint8_t *rx_tlv_hdr; uint32_t l2_hdr_offset = 0; struct hal_rx_msdu_metadata msdu_metadata; peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf); Loading @@ -2271,14 +2270,15 @@ void dp_rx_deliver_to_pkt_capture_no_peer(struct dp_soc *soc, qdf_nbuf_t nbuf, msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); pkt_len = msdu_len + msdu_metadata.l3_hdr_pad + RX_PKT_TLVS_LEN; l2_hdr_offset = hal_rx_msdu_end_l3_hdr_padding_get(soc->hal_soc, rx_tlv_hdr); qdf_nbuf_set_pktlen(nbuf, pkt_len); dp_rx_skip_tlvs(nbuf, msdu_metadata.l3_hdr_pad); dp_wdi_event_handler(WDI_EVENT_PKT_CAPTURE_RX_DATA, soc, nbuf, HTT_INVALID_VDEV, is_offload, 0); qdf_nbuf_push_head(nbuf, msdu_metadata.l3_hdr_pad + RX_PKT_TLVS_LEN); } #endif Loading
dp/wifi3.0/dp_types.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <qdf_lro.h> #include <queue.h> #include <htt_common.h> #include <htt.h> #include <htt_stats.h> #include <cdp_txrx_cmn.h> #ifdef DP_MOB_DEFS Loading
hal/wifi3.0/hal_api.h +1 −2 Original line number Diff line number Diff line Loading @@ -1788,8 +1788,7 @@ void *hal_srng_src_get_next_consumed(void *hal_soc, uint32_t next_entry = (srng->last_desc_cleared + srng->entry_size) % srng->ring_size; if (next_entry != (srng->u.src_ring.cached_tp + srng->entry_size) % srng->ring_size) { if (next_entry != srng->u.src_ring.cached_tp) { desc = &srng->ring_base_vaddr[next_entry]; srng->last_desc_cleared = next_entry; } Loading
hal/wifi3.0/hal_srng.c +23 −0 Original line number Diff line number Diff line Loading @@ -1721,6 +1721,27 @@ static inline void hal_srng_hw_init(struct hal_soc *hal, #define CHECK_SHADOW_REGISTERS false #endif #if defined(CLEAR_SW2TCL_CONSUMED_DESC) /** * hal_srng_last_desc_cleared_init - Initialize SRNG last_desc_cleared ptr * * @srng: Source ring pointer * * Return: None */ static inline void hal_srng_last_desc_cleared_init(struct hal_srng *srng) { srng->last_desc_cleared = srng->ring_size - srng->entry_size; } #else static inline void hal_srng_last_desc_cleared_init(struct hal_srng *srng) { } #endif /* CLEAR_SW2TCL_CONSUMED_DESC */ /** * hal_srng_setup - Initialize HW SRNG ring. * @hal_soc: Opaque HAL SOC handle Loading Loading @@ -1799,6 +1820,8 @@ void *hal_srng_setup(void *hal_soc, int ring_type, int ring_num, srng->flags |= HAL_SRNG_RING_PTR_SWAP; #endif hal_srng_last_desc_cleared_init(srng); if (srng->ring_dir == HAL_SRNG_SRC_RING) { srng->u.src_ring.hp = 0; srng->u.src_ring.reap_hp = srng->ring_size - Loading