qcacmn: Handle raw frames and invalid flow_idx stats
Make sure to drop the raw Rx frames as both driver and stack are not expected to handle them. Add counter for invalid fisa flow_idx packet received. Change-Id: I5107c554b8ce6a9a7973f2aeca44bb0f360dc2df CRs-Fixed: 2733981
This commit is contained in:
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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 */
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user