Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e7dc07b authored by Jinwei Chen's avatar Jinwei Chen Committed by Gerrit - the friendly Code Review server
Browse files

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
parent 4febfb91
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -1871,6 +1871,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
@@ -2204,6 +2229,12 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
	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);

+2 −0
Original line number Diff line number Diff line
@@ -5551,6 +5551,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);
+9 −0
Original line number Diff line number Diff line
@@ -808,6 +808,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 */
@@ -2296,6 +2298,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,
@@ -2380,6 +2387,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 */
+63 −63
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ 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(
	__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 "
@@ -296,7 +296,7 @@ static void hal_rx_dump_msdu_start_tlv_6490(void *msdustart, uint8_t dbg_level)
		       msdu_start->reception_type,
		       msdu_start->ppdu_start_timestamp);

	hal_verbose_debug(
	__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);