diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 9873a2e3f6..9650f82593 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -1918,6 +1918,31 @@ void dp_rx_set_hdr_pad(qdf_nbuf_t nbuf, uint32_t l3_padding) } #endif +#ifdef DP_RX_DROP_RAW_FRM +/** + * dp_rx_is_raw_frame_dropped() - if raw frame nbuf, free and drop + * @nbuf: pkt skb pointer + * + * Return: true - raw frame, dropped + * false - not raw frame, do nothing + */ +static inline +bool dp_rx_is_raw_frame_dropped(qdf_nbuf_t nbuf) +{ + if (qdf_nbuf_is_raw_frame(nbuf)) { + qdf_nbuf_free(nbuf); + return true; + } + + return false; +} +#else +static inline +bool dp_rx_is_raw_frame_dropped(qdf_nbuf_t nbuf) +{ + return false; +} +#endif /** * dp_rx_process() - Brain of the Rx processing functionality @@ -2253,6 +2278,12 @@ done: nbuf = nbuf_head; while (nbuf) { next = nbuf->next; + if (qdf_unlikely(dp_rx_is_raw_frame_dropped(nbuf))) { + nbuf = next; + DP_STATS_INC(soc, rx.err.raw_frm_drop, 1); + continue; + } + rx_tlv_hdr = qdf_nbuf_data(nbuf); vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf); diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 61e6cdb422..1c045d7397 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -6049,6 +6049,8 @@ void dp_txrx_path_stats(struct dp_soc *soc) pdev->soc->stats.rx.err.reo_err_oor_drop); DP_PRINT_STATS("Rx err msdu rejected: %d", soc->stats.rx.err.rejected); + DP_PRINT_STATS("Rx raw frame dropped: %d", + soc->stats.rx.err.raw_frm_drop); DP_PRINT_STATS("Reo Statistics"); DP_PRINT_STATS("near_full: %u ", soc->stats.rx.near_full); diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index b2946a2108..3a7d435215 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -849,6 +849,8 @@ struct dp_soc_stats { uint32_t rejected; /* Incorrect msdu count in MPDU desc info */ uint32_t msdu_count_mismatch; + /* RX raw frame dropped count */ + uint32_t raw_frm_drop; } err; /* packet count per core - per ring */ @@ -2401,6 +2403,11 @@ struct dp_rx_fst { #define DP_RX_GET_SW_FT_ENTRY_SIZE sizeof(struct dp_rx_fse) #elif WLAN_SUPPORT_RX_FISA +struct dp_fisa_stats { + /* flow index invalid from RX HW TLV */ + uint32_t invalid_flow_index; +}; + enum fisa_aggr_ret { FISA_AGGR_DONE, FISA_AGGR_NOT_ELIGIBLE, @@ -2486,6 +2493,8 @@ struct dp_rx_fst { qdf_atomic_t fse_cache_flush_posted; qdf_timer_t fse_cache_flush_timer; struct fse_cache_flush_history cache_fl_rec[MAX_FSE_CACHE_FL_HST]; + /* FISA DP stats */ + struct dp_fisa_stats stats; }; #endif /* WLAN_SUPPORT_RX_FISA */ diff --git a/hal/wifi3.0/qca6490/hal_6490.c b/hal/wifi3.0/qca6490/hal_6490.c index e3992f83a5..2ee4e9cfc0 100644 --- a/hal/wifi3.0/qca6490/hal_6490.c +++ b/hal/wifi3.0/qca6490/hal_6490.c @@ -240,69 +240,69 @@ static void hal_rx_dump_msdu_start_tlv_6490(void *msdustart, uint8_t dbg_level) { struct rx_msdu_start *msdu_start = (struct rx_msdu_start *)msdustart; - hal_verbose_debug( - "rx_msdu_start tlv (1/2) - " - "rxpcu_mpdu_filter_in_category: %x " - "sw_frame_group_id: %x " - "phy_ppdu_id: %x " - "msdu_length: %x " - "ipsec_esp: %x " - "l3_offset: %x " - "ipsec_ah: %x " - "l4_offset: %x " - "msdu_number: %x " - "decap_format: %x " - "ipv4_proto: %x " - "ipv6_proto: %x " - "tcp_proto: %x " - "udp_proto: %x " - "ip_frag: %x " - "tcp_only_ack: %x " - "da_is_bcast_mcast: %x " - "ip4_protocol_ip6_next_header: %x " - "toeplitz_hash_2_or_4: %x " - "flow_id_toeplitz: %x " - "user_rssi: %x " - "pkt_type: %x " - "stbc: %x " - "sgi: %x " - "rate_mcs: %x " - "receive_bandwidth: %x " - "reception_type: %x " - "ppdu_start_timestamp: %u ", - msdu_start->rxpcu_mpdu_filter_in_category, - msdu_start->sw_frame_group_id, - msdu_start->phy_ppdu_id, - msdu_start->msdu_length, - msdu_start->ipsec_esp, - msdu_start->l3_offset, - msdu_start->ipsec_ah, - msdu_start->l4_offset, - msdu_start->msdu_number, - msdu_start->decap_format, - msdu_start->ipv4_proto, - msdu_start->ipv6_proto, - msdu_start->tcp_proto, - msdu_start->udp_proto, - msdu_start->ip_frag, - msdu_start->tcp_only_ack, - msdu_start->da_is_bcast_mcast, - msdu_start->ip4_protocol_ip6_next_header, - msdu_start->toeplitz_hash_2_or_4, - msdu_start->flow_id_toeplitz, - msdu_start->user_rssi, - msdu_start->pkt_type, - msdu_start->stbc, - msdu_start->sgi, - msdu_start->rate_mcs, - msdu_start->receive_bandwidth, - msdu_start->reception_type, - msdu_start->ppdu_start_timestamp); + __QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP, + "rx_msdu_start tlv (1/2) - " + "rxpcu_mpdu_filter_in_category: %x " + "sw_frame_group_id: %x " + "phy_ppdu_id: %x " + "msdu_length: %x " + "ipsec_esp: %x " + "l3_offset: %x " + "ipsec_ah: %x " + "l4_offset: %x " + "msdu_number: %x " + "decap_format: %x " + "ipv4_proto: %x " + "ipv6_proto: %x " + "tcp_proto: %x " + "udp_proto: %x " + "ip_frag: %x " + "tcp_only_ack: %x " + "da_is_bcast_mcast: %x " + "ip4_protocol_ip6_next_header: %x " + "toeplitz_hash_2_or_4: %x " + "flow_id_toeplitz: %x " + "user_rssi: %x " + "pkt_type: %x " + "stbc: %x " + "sgi: %x " + "rate_mcs: %x " + "receive_bandwidth: %x " + "reception_type: %x " + "ppdu_start_timestamp: %u ", + msdu_start->rxpcu_mpdu_filter_in_category, + msdu_start->sw_frame_group_id, + msdu_start->phy_ppdu_id, + msdu_start->msdu_length, + msdu_start->ipsec_esp, + msdu_start->l3_offset, + msdu_start->ipsec_ah, + msdu_start->l4_offset, + msdu_start->msdu_number, + msdu_start->decap_format, + msdu_start->ipv4_proto, + msdu_start->ipv6_proto, + msdu_start->tcp_proto, + msdu_start->udp_proto, + msdu_start->ip_frag, + msdu_start->tcp_only_ack, + msdu_start->da_is_bcast_mcast, + msdu_start->ip4_protocol_ip6_next_header, + msdu_start->toeplitz_hash_2_or_4, + msdu_start->flow_id_toeplitz, + msdu_start->user_rssi, + msdu_start->pkt_type, + msdu_start->stbc, + msdu_start->sgi, + msdu_start->rate_mcs, + msdu_start->receive_bandwidth, + msdu_start->reception_type, + msdu_start->ppdu_start_timestamp); - hal_verbose_debug( - "rx_msdu_start tlv (2/2) - " - "sw_phy_meta_data: %x ", - msdu_start->sw_phy_meta_data); + __QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP, + "rx_msdu_start tlv (2/2) - " + "sw_phy_meta_data: %x ", + msdu_start->sw_phy_meta_data); } /**