Loading dp/inc/cdp_txrx_cmn_struct.h +21 −3 Original line number Diff line number Diff line Loading @@ -2139,6 +2139,7 @@ struct cdp_rx_indication_msdu { * @lro_enable: Enable/Disable LRO * @gro_enable: Enable/Disable GRO * @flow_steering_enable: Enable/Disable Rx Hash based flow steering * @p2p_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for P2P * @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN * @tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload * @napi_enable: Enable/Disable Napi Loading @@ -2155,6 +2156,7 @@ struct cdp_config_params { unsigned int lro_enable:1; unsigned int gro_enable:1; unsigned int flow_steering_enable:1; unsigned int p2p_tcp_udp_checksumoffload:1; unsigned int nan_tcp_udp_checksumoffload:1; unsigned int tcp_udp_checksumoffload:1; unsigned int napi_enable:1; Loading Loading @@ -2211,13 +2213,29 @@ struct cdp_monitor_filter { }; /** * cdp_dp_cfg - dp ini config enum * enum cdp_dp_cfg - CDP ENUMs to get to DP configation * @cfg_dp_enable_data_stall: context passed to be used by consumer * @cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload: get P2P checksum config * @cfg_dp_enable_nan_ip_tcp_udp_checksum_offload: get NAN TX checksum config * @cfg_dp_enable_ip_tcp_udp_checksum_offload: get TX checksum config for others * @cfg_dp_tso_enable: get TSO enable config * @cfg_dp_lro_enable: get LRO enable config * @cfg_dp_gro_enable: get GRP enable config * @cfg_dp_tx_flow_start_queue_offset: get DP TX flow start queue offset * @cfg_dp_tx_flow_stop_queue_threshold: get DP TX flow stop queue threshold * @cfg_dp_ipa_uc_tx_buf_size: get IPA TX buf size config * @cfg_dp_ipa_uc_tx_partition_base: get IPA UC TX partition base config * @cfg_dp_ipa_uc_rx_ind_ring_count: get IPA rx indication ring count config * @cfg_dp_enable_flow_steering: get flow steerint enable config * @cfg_dp_reorder_offload_supported: get reorder offload support config * @cfg_dp_ce_classify_enable: get CE classify enable config * @cfg_dp_disable_intra_bss_fwd: get intra bss fwd config * @cfg_dp_pktlog_buffer_size: get packet log buffer size config */ enum cdp_dp_cfg { cfg_dp_enable_data_stall, /* checksum offload for NAN interface */ cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload, cfg_dp_enable_nan_ip_tcp_udp_checksum_offload, /* generic checksum offload for other interfaces */ cfg_dp_enable_ip_tcp_udp_checksum_offload, cfg_dp_tso_enable, cfg_dp_lro_enable, Loading dp/inc/cdp_txrx_mob_def.h +2 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,8 @@ struct txrx_pdev_cfg_param_t { bool ip_tcp_udp_checksum_offload; /* IP, TCP and UDP checksum offload for NAN Mode*/ bool nan_ip_tcp_udp_checksum_offload; /* IP, TCP and UDP checksum offload for P2P Mode*/ bool p2p_ip_tcp_udp_checksum_offload; /* Rx processing in thread from TXRX */ bool enable_rxthread; /* CE classification enabled through INI */ Loading dp/wifi3.0/dp_ipa.c +7 −7 Original line number Diff line number Diff line Loading @@ -1775,20 +1775,20 @@ bool dp_ipa_rx_intrabss_fwd(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, if (!qdf_mem_cmp(eh->h_dest, vdev->mac_addr.raw, QDF_MAC_ADDR_SIZE)) return false; da_peer = dp_find_peer_by_addr((struct cdp_pdev *)pdev, eh->h_dest); da_peer = dp_find_peer_by_addr_and_vdev(dp_pdev_to_cdp_pdev(pdev), dp_vdev_to_cdp_vdev(vdev), eh->h_dest); if (!da_peer) return false; if (da_peer->vdev != vdev) return false; sa_peer = dp_find_peer_by_addr_and_vdev(dp_pdev_to_cdp_pdev(pdev), dp_vdev_to_cdp_vdev(vdev), eh->h_source); sa_peer = dp_find_peer_by_addr((struct cdp_pdev *)pdev, eh->h_source); if (!sa_peer) return false; if (sa_peer->vdev != vdev) return false; /* * In intra-bss forwarding scenario, skb is allocated by IPA driver. * Need to add skb to internal tracking table to avoid nbuf memory Loading dp/wifi3.0/dp_main.c +5 −0 Original line number Diff line number Diff line Loading @@ -9220,6 +9220,8 @@ QDF_STATUS dp_update_config_parameters(struct cdp_soc *psoc, soc->wlan_cfg_ctx->tso_enabled = params->tso_enable; soc->wlan_cfg_ctx->lro_enabled = params->lro_enable; soc->wlan_cfg_ctx->rx_hash = params->flow_steering_enable; soc->wlan_cfg_ctx->p2p_tcp_udp_checksumoffload = params->p2p_tcp_udp_checksumoffload; soc->wlan_cfg_ctx->nan_tcp_udp_checksumoffload = params->nan_tcp_udp_checksumoffload; soc->wlan_cfg_ctx->tcp_udp_checksumoffload = Loading Loading @@ -9852,6 +9854,9 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg) case cfg_dp_enable_data_stall: value = dpsoc->wlan_cfg_ctx->enable_data_stall_detection; break; case cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload: value = dpsoc->wlan_cfg_ctx->p2p_tcp_udp_checksumoffload; break; case cfg_dp_enable_nan_ip_tcp_udp_checksum_offload: value = dpsoc->wlan_cfg_ctx->nan_tcp_udp_checksumoffload; break; Loading dp/wifi3.0/dp_rx.c +10 −10 Original line number Diff line number Diff line Loading @@ -2216,7 +2216,13 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, tid = qdf_nbuf_get_tid_val(nbuf); peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf); if (qdf_unlikely(!peer)) { peer = dp_peer_find_by_id(soc, peer_id); } else if (peer && peer->peer_ids[0] != peer_id) { dp_peer_unref_del_find_by_id(peer); peer = dp_peer_find_by_id(soc, peer_id); } if (peer) { QDF_NBUF_CB_DP_TRACE_PRINT(nbuf) = false; Loading @@ -2241,7 +2247,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); nbuf = next; DP_STATS_INC(soc, rx.err.invalid_vdev, 1); dp_peer_unref_del_find_by_id(peer); continue; } Loading Loading @@ -2329,7 +2334,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, dp_info_rl("scatter msdu len %d, dropped", msdu_len); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } } else { Loading @@ -2351,7 +2355,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, DP_STATS_INC(peer, rx.multipass_rx_pkt_drop, 1); qdf_nbuf_free(nbuf); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } } Loading @@ -2365,7 +2368,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); /* Statistics */ nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } Loading @@ -2378,7 +2380,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, DP_STATS_INC(peer, rx.nawds_mcast_drop, 1); qdf_nbuf_free(nbuf); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } Loading Loading @@ -2407,7 +2408,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } dp_rx_fill_mesh_stats(vdev, nbuf, rx_tlv_hdr, peer); Loading @@ -2434,7 +2434,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); nbuf = next; DP_STATS_INC(soc, rx.err.invalid_sa_da_idx, 1); dp_peer_unref_del_find_by_id(peer); continue; } /* WDS Source Port Learning */ Loading @@ -2453,7 +2452,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, nbuf, msdu_metadata)) { nbuf = next; dp_peer_unref_del_find_by_id(peer); tid_stats->intrabss_cnt++; continue; /* Get next desc */ } Loading @@ -2469,7 +2467,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, tid_stats->delivered_to_stack++; nbuf = next; dp_peer_unref_del_find_by_id(peer); } if (qdf_likely(deliver_list_head)) { Loading @@ -2488,6 +2485,9 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, } } if (qdf_likely(peer)) dp_peer_unref_del_find_by_id(peer); if (dp_rx_enable_eol_data_check(soc) && rx_bufs_used) { if (quota) { num_pending = Loading Loading
dp/inc/cdp_txrx_cmn_struct.h +21 −3 Original line number Diff line number Diff line Loading @@ -2139,6 +2139,7 @@ struct cdp_rx_indication_msdu { * @lro_enable: Enable/Disable LRO * @gro_enable: Enable/Disable GRO * @flow_steering_enable: Enable/Disable Rx Hash based flow steering * @p2p_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for P2P * @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN * @tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload * @napi_enable: Enable/Disable Napi Loading @@ -2155,6 +2156,7 @@ struct cdp_config_params { unsigned int lro_enable:1; unsigned int gro_enable:1; unsigned int flow_steering_enable:1; unsigned int p2p_tcp_udp_checksumoffload:1; unsigned int nan_tcp_udp_checksumoffload:1; unsigned int tcp_udp_checksumoffload:1; unsigned int napi_enable:1; Loading Loading @@ -2211,13 +2213,29 @@ struct cdp_monitor_filter { }; /** * cdp_dp_cfg - dp ini config enum * enum cdp_dp_cfg - CDP ENUMs to get to DP configation * @cfg_dp_enable_data_stall: context passed to be used by consumer * @cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload: get P2P checksum config * @cfg_dp_enable_nan_ip_tcp_udp_checksum_offload: get NAN TX checksum config * @cfg_dp_enable_ip_tcp_udp_checksum_offload: get TX checksum config for others * @cfg_dp_tso_enable: get TSO enable config * @cfg_dp_lro_enable: get LRO enable config * @cfg_dp_gro_enable: get GRP enable config * @cfg_dp_tx_flow_start_queue_offset: get DP TX flow start queue offset * @cfg_dp_tx_flow_stop_queue_threshold: get DP TX flow stop queue threshold * @cfg_dp_ipa_uc_tx_buf_size: get IPA TX buf size config * @cfg_dp_ipa_uc_tx_partition_base: get IPA UC TX partition base config * @cfg_dp_ipa_uc_rx_ind_ring_count: get IPA rx indication ring count config * @cfg_dp_enable_flow_steering: get flow steerint enable config * @cfg_dp_reorder_offload_supported: get reorder offload support config * @cfg_dp_ce_classify_enable: get CE classify enable config * @cfg_dp_disable_intra_bss_fwd: get intra bss fwd config * @cfg_dp_pktlog_buffer_size: get packet log buffer size config */ enum cdp_dp_cfg { cfg_dp_enable_data_stall, /* checksum offload for NAN interface */ cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload, cfg_dp_enable_nan_ip_tcp_udp_checksum_offload, /* generic checksum offload for other interfaces */ cfg_dp_enable_ip_tcp_udp_checksum_offload, cfg_dp_tso_enable, cfg_dp_lro_enable, Loading
dp/inc/cdp_txrx_mob_def.h +2 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,8 @@ struct txrx_pdev_cfg_param_t { bool ip_tcp_udp_checksum_offload; /* IP, TCP and UDP checksum offload for NAN Mode*/ bool nan_ip_tcp_udp_checksum_offload; /* IP, TCP and UDP checksum offload for P2P Mode*/ bool p2p_ip_tcp_udp_checksum_offload; /* Rx processing in thread from TXRX */ bool enable_rxthread; /* CE classification enabled through INI */ Loading
dp/wifi3.0/dp_ipa.c +7 −7 Original line number Diff line number Diff line Loading @@ -1775,20 +1775,20 @@ bool dp_ipa_rx_intrabss_fwd(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, if (!qdf_mem_cmp(eh->h_dest, vdev->mac_addr.raw, QDF_MAC_ADDR_SIZE)) return false; da_peer = dp_find_peer_by_addr((struct cdp_pdev *)pdev, eh->h_dest); da_peer = dp_find_peer_by_addr_and_vdev(dp_pdev_to_cdp_pdev(pdev), dp_vdev_to_cdp_vdev(vdev), eh->h_dest); if (!da_peer) return false; if (da_peer->vdev != vdev) return false; sa_peer = dp_find_peer_by_addr_and_vdev(dp_pdev_to_cdp_pdev(pdev), dp_vdev_to_cdp_vdev(vdev), eh->h_source); sa_peer = dp_find_peer_by_addr((struct cdp_pdev *)pdev, eh->h_source); if (!sa_peer) return false; if (sa_peer->vdev != vdev) return false; /* * In intra-bss forwarding scenario, skb is allocated by IPA driver. * Need to add skb to internal tracking table to avoid nbuf memory Loading
dp/wifi3.0/dp_main.c +5 −0 Original line number Diff line number Diff line Loading @@ -9220,6 +9220,8 @@ QDF_STATUS dp_update_config_parameters(struct cdp_soc *psoc, soc->wlan_cfg_ctx->tso_enabled = params->tso_enable; soc->wlan_cfg_ctx->lro_enabled = params->lro_enable; soc->wlan_cfg_ctx->rx_hash = params->flow_steering_enable; soc->wlan_cfg_ctx->p2p_tcp_udp_checksumoffload = params->p2p_tcp_udp_checksumoffload; soc->wlan_cfg_ctx->nan_tcp_udp_checksumoffload = params->nan_tcp_udp_checksumoffload; soc->wlan_cfg_ctx->tcp_udp_checksumoffload = Loading Loading @@ -9852,6 +9854,9 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg) case cfg_dp_enable_data_stall: value = dpsoc->wlan_cfg_ctx->enable_data_stall_detection; break; case cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload: value = dpsoc->wlan_cfg_ctx->p2p_tcp_udp_checksumoffload; break; case cfg_dp_enable_nan_ip_tcp_udp_checksum_offload: value = dpsoc->wlan_cfg_ctx->nan_tcp_udp_checksumoffload; break; Loading
dp/wifi3.0/dp_rx.c +10 −10 Original line number Diff line number Diff line Loading @@ -2216,7 +2216,13 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, tid = qdf_nbuf_get_tid_val(nbuf); peer_id = QDF_NBUF_CB_RX_PEER_ID(nbuf); if (qdf_unlikely(!peer)) { peer = dp_peer_find_by_id(soc, peer_id); } else if (peer && peer->peer_ids[0] != peer_id) { dp_peer_unref_del_find_by_id(peer); peer = dp_peer_find_by_id(soc, peer_id); } if (peer) { QDF_NBUF_CB_DP_TRACE_PRINT(nbuf) = false; Loading @@ -2241,7 +2247,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); nbuf = next; DP_STATS_INC(soc, rx.err.invalid_vdev, 1); dp_peer_unref_del_find_by_id(peer); continue; } Loading Loading @@ -2329,7 +2334,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, dp_info_rl("scatter msdu len %d, dropped", msdu_len); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } } else { Loading @@ -2351,7 +2355,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, DP_STATS_INC(peer, rx.multipass_rx_pkt_drop, 1); qdf_nbuf_free(nbuf); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } } Loading @@ -2365,7 +2368,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); /* Statistics */ nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } Loading @@ -2378,7 +2380,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, DP_STATS_INC(peer, rx.nawds_mcast_drop, 1); qdf_nbuf_free(nbuf); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } Loading Loading @@ -2407,7 +2408,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); nbuf = next; dp_peer_unref_del_find_by_id(peer); continue; } dp_rx_fill_mesh_stats(vdev, nbuf, rx_tlv_hdr, peer); Loading @@ -2434,7 +2434,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, qdf_nbuf_free(nbuf); nbuf = next; DP_STATS_INC(soc, rx.err.invalid_sa_da_idx, 1); dp_peer_unref_del_find_by_id(peer); continue; } /* WDS Source Port Learning */ Loading @@ -2453,7 +2452,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, nbuf, msdu_metadata)) { nbuf = next; dp_peer_unref_del_find_by_id(peer); tid_stats->intrabss_cnt++; continue; /* Get next desc */ } Loading @@ -2469,7 +2467,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, tid_stats->delivered_to_stack++; nbuf = next; dp_peer_unref_del_find_by_id(peer); } if (qdf_likely(deliver_list_head)) { Loading @@ -2488,6 +2485,9 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, } } if (qdf_likely(peer)) dp_peer_unref_del_find_by_id(peer); if (dp_rx_enable_eol_data_check(soc) && rx_bufs_used) { if (quota) { num_pending = Loading