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
|
#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
|
* dp_rx_process() - Brain of the Rx processing functionality
|
||||||
@@ -2253,6 +2278,12 @@ done:
|
|||||||
nbuf = nbuf_head;
|
nbuf = nbuf_head;
|
||||||
while (nbuf) {
|
while (nbuf) {
|
||||||
next = nbuf->next;
|
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);
|
rx_tlv_hdr = qdf_nbuf_data(nbuf);
|
||||||
vdev_id = QDF_NBUF_CB_RX_VDEV_ID(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);
|
pdev->soc->stats.rx.err.reo_err_oor_drop);
|
||||||
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
||||||
soc->stats.rx.err.rejected);
|
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("Reo Statistics");
|
||||||
DP_PRINT_STATS("near_full: %u ", soc->stats.rx.near_full);
|
DP_PRINT_STATS("near_full: %u ", soc->stats.rx.near_full);
|
||||||
|
@@ -849,6 +849,8 @@ struct dp_soc_stats {
|
|||||||
uint32_t rejected;
|
uint32_t rejected;
|
||||||
/* Incorrect msdu count in MPDU desc info */
|
/* Incorrect msdu count in MPDU desc info */
|
||||||
uint32_t msdu_count_mismatch;
|
uint32_t msdu_count_mismatch;
|
||||||
|
/* RX raw frame dropped count */
|
||||||
|
uint32_t raw_frm_drop;
|
||||||
} err;
|
} err;
|
||||||
|
|
||||||
/* packet count per core - per ring */
|
/* 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)
|
#define DP_RX_GET_SW_FT_ENTRY_SIZE sizeof(struct dp_rx_fse)
|
||||||
#elif WLAN_SUPPORT_RX_FISA
|
#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 {
|
enum fisa_aggr_ret {
|
||||||
FISA_AGGR_DONE,
|
FISA_AGGR_DONE,
|
||||||
FISA_AGGR_NOT_ELIGIBLE,
|
FISA_AGGR_NOT_ELIGIBLE,
|
||||||
@@ -2486,6 +2493,8 @@ struct dp_rx_fst {
|
|||||||
qdf_atomic_t fse_cache_flush_posted;
|
qdf_atomic_t fse_cache_flush_posted;
|
||||||
qdf_timer_t fse_cache_flush_timer;
|
qdf_timer_t fse_cache_flush_timer;
|
||||||
struct fse_cache_flush_history cache_fl_rec[MAX_FSE_CACHE_FL_HST];
|
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 */
|
#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;
|
struct rx_msdu_start *msdu_start = (struct rx_msdu_start *)msdustart;
|
||||||
|
|
||||||
hal_verbose_debug(
|
__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP,
|
||||||
"rx_msdu_start tlv (1/2) - "
|
"rx_msdu_start tlv (1/2) - "
|
||||||
"rxpcu_mpdu_filter_in_category: %x "
|
"rxpcu_mpdu_filter_in_category: %x "
|
||||||
"sw_frame_group_id: %x "
|
"sw_frame_group_id: %x "
|
||||||
"phy_ppdu_id: %x "
|
"phy_ppdu_id: %x "
|
||||||
"msdu_length: %x "
|
"msdu_length: %x "
|
||||||
"ipsec_esp: %x "
|
"ipsec_esp: %x "
|
||||||
"l3_offset: %x "
|
"l3_offset: %x "
|
||||||
"ipsec_ah: %x "
|
"ipsec_ah: %x "
|
||||||
"l4_offset: %x "
|
"l4_offset: %x "
|
||||||
"msdu_number: %x "
|
"msdu_number: %x "
|
||||||
"decap_format: %x "
|
"decap_format: %x "
|
||||||
"ipv4_proto: %x "
|
"ipv4_proto: %x "
|
||||||
"ipv6_proto: %x "
|
"ipv6_proto: %x "
|
||||||
"tcp_proto: %x "
|
"tcp_proto: %x "
|
||||||
"udp_proto: %x "
|
"udp_proto: %x "
|
||||||
"ip_frag: %x "
|
"ip_frag: %x "
|
||||||
"tcp_only_ack: %x "
|
"tcp_only_ack: %x "
|
||||||
"da_is_bcast_mcast: %x "
|
"da_is_bcast_mcast: %x "
|
||||||
"ip4_protocol_ip6_next_header: %x "
|
"ip4_protocol_ip6_next_header: %x "
|
||||||
"toeplitz_hash_2_or_4: %x "
|
"toeplitz_hash_2_or_4: %x "
|
||||||
"flow_id_toeplitz: %x "
|
"flow_id_toeplitz: %x "
|
||||||
"user_rssi: %x "
|
"user_rssi: %x "
|
||||||
"pkt_type: %x "
|
"pkt_type: %x "
|
||||||
"stbc: %x "
|
"stbc: %x "
|
||||||
"sgi: %x "
|
"sgi: %x "
|
||||||
"rate_mcs: %x "
|
"rate_mcs: %x "
|
||||||
"receive_bandwidth: %x "
|
"receive_bandwidth: %x "
|
||||||
"reception_type: %x "
|
"reception_type: %x "
|
||||||
"ppdu_start_timestamp: %u ",
|
"ppdu_start_timestamp: %u ",
|
||||||
msdu_start->rxpcu_mpdu_filter_in_category,
|
msdu_start->rxpcu_mpdu_filter_in_category,
|
||||||
msdu_start->sw_frame_group_id,
|
msdu_start->sw_frame_group_id,
|
||||||
msdu_start->phy_ppdu_id,
|
msdu_start->phy_ppdu_id,
|
||||||
msdu_start->msdu_length,
|
msdu_start->msdu_length,
|
||||||
msdu_start->ipsec_esp,
|
msdu_start->ipsec_esp,
|
||||||
msdu_start->l3_offset,
|
msdu_start->l3_offset,
|
||||||
msdu_start->ipsec_ah,
|
msdu_start->ipsec_ah,
|
||||||
msdu_start->l4_offset,
|
msdu_start->l4_offset,
|
||||||
msdu_start->msdu_number,
|
msdu_start->msdu_number,
|
||||||
msdu_start->decap_format,
|
msdu_start->decap_format,
|
||||||
msdu_start->ipv4_proto,
|
msdu_start->ipv4_proto,
|
||||||
msdu_start->ipv6_proto,
|
msdu_start->ipv6_proto,
|
||||||
msdu_start->tcp_proto,
|
msdu_start->tcp_proto,
|
||||||
msdu_start->udp_proto,
|
msdu_start->udp_proto,
|
||||||
msdu_start->ip_frag,
|
msdu_start->ip_frag,
|
||||||
msdu_start->tcp_only_ack,
|
msdu_start->tcp_only_ack,
|
||||||
msdu_start->da_is_bcast_mcast,
|
msdu_start->da_is_bcast_mcast,
|
||||||
msdu_start->ip4_protocol_ip6_next_header,
|
msdu_start->ip4_protocol_ip6_next_header,
|
||||||
msdu_start->toeplitz_hash_2_or_4,
|
msdu_start->toeplitz_hash_2_or_4,
|
||||||
msdu_start->flow_id_toeplitz,
|
msdu_start->flow_id_toeplitz,
|
||||||
msdu_start->user_rssi,
|
msdu_start->user_rssi,
|
||||||
msdu_start->pkt_type,
|
msdu_start->pkt_type,
|
||||||
msdu_start->stbc,
|
msdu_start->stbc,
|
||||||
msdu_start->sgi,
|
msdu_start->sgi,
|
||||||
msdu_start->rate_mcs,
|
msdu_start->rate_mcs,
|
||||||
msdu_start->receive_bandwidth,
|
msdu_start->receive_bandwidth,
|
||||||
msdu_start->reception_type,
|
msdu_start->reception_type,
|
||||||
msdu_start->ppdu_start_timestamp);
|
msdu_start->ppdu_start_timestamp);
|
||||||
|
|
||||||
hal_verbose_debug(
|
__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP,
|
||||||
"rx_msdu_start tlv (2/2) - "
|
"rx_msdu_start tlv (2/2) - "
|
||||||
"sw_phy_meta_data: %x ",
|
"sw_phy_meta_data: %x ",
|
||||||
msdu_start->sw_phy_meta_data);
|
msdu_start->sw_phy_meta_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user