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

Commit f8a355b0 authored by Karthik Kantamneni's avatar Karthik Kantamneni Committed by Madan Koyyalamudi
Browse files

qcacmn: Add history for REO queue descriptor events

Add history to log REO queue desc update and free events.

Change-Id: If2992ff1256fad49ea4ea6bd90b6dfe4a63d2bc4
CRs-Fixed: 2926919
parent 570e8e9d
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -41,6 +41,12 @@
#include "dp_hist.h"
#endif

#ifdef REO_QDESC_HISTORY
#define REO_QDESC_HISTORY_SIZE 512
uint64_t reo_qdesc_history_idx;
struct reo_qdesc_event reo_qdesc_history[REO_QDESC_HISTORY_SIZE];
#endif

#ifdef FEATURE_WDS
static inline bool
dp_peer_ast_free_in_unmap_supported(struct dp_soc *soc,
@@ -69,6 +75,42 @@ dp_peer_ast_free_in_unmap_supported(struct dp_soc *soc,
}
#endif

#ifdef REO_QDESC_HISTORY
static inline void
dp_rx_reo_qdesc_history_add(struct reo_desc_list_node *free_desc,
			    enum reo_qdesc_event_type type)
{
	struct reo_qdesc_event *evt;
	struct dp_rx_tid *rx_tid = &free_desc->rx_tid;
	uint32_t idx;

	reo_qdesc_history_idx++;
	idx = (reo_qdesc_history_idx & (REO_QDESC_HISTORY_SIZE - 1));

	evt = &reo_qdesc_history[idx];

	qdf_mem_copy(evt->peer_mac, free_desc->peer_mac, QDF_MAC_ADDR_SIZE);
	evt->qdesc_addr = rx_tid->hw_qdesc_paddr;
	evt->ts = qdf_get_log_timestamp();
	evt->type = type;
}

#define DP_RX_REO_QDESC_GET_MAC(freedesc, peer) \
	qdf_mem_copy(freedesc->peer_mac, peer->mac_addr.raw, QDF_MAC_ADDR_SIZE)

#define DP_RX_REO_QDESC_UPDATE_EVT(free_desc) \
	dp_rx_reo_qdesc_history_add((free_desc), REO_QDESC_UPDATE_CB)

#define DP_RX_REO_QDESC_FREE_EVT(free_desc) \
	dp_rx_reo_qdesc_history_add((free_desc), REO_QDESC_FREE)
#else
#define DP_RX_REO_QDESC_GET_MAC(freedesc, peer)

#define DP_RX_REO_QDESC_UPDATE_EVT(free_desc)

#define DP_RX_REO_QDESC_FREE_EVT(free_desc)
#endif

static inline void
dp_set_ssn_valid_flag(struct hal_reo_cmd_params *params,
					uint8_t valid)
@@ -2307,6 +2349,9 @@ static void dp_reo_desc_free(struct dp_soc *soc, void *cb_ctxt,
		  "%s:%lu hw_qdesc_paddr: %pK, tid:%d", __func__,
		  curr_ts,
		  (void *)(rx_tid->hw_qdesc_paddr), rx_tid->tid);

	DP_RX_REO_QDESC_FREE_EVT(freedesc);

	qdf_mem_unmap_nbytes_single(soc->osdev,
		rx_tid->hw_qdesc_paddr,
		QDF_DMA_BIDIRECTIONAL,
@@ -2651,6 +2696,8 @@ void dp_rx_tid_delete_cb(struct dp_soc *soc, void *cb_ctxt,
	struct hal_reo_cmd_params params;
	bool flush_failure = false;

	DP_RX_REO_QDESC_UPDATE_EVT(freedesc);

	if (reo_status->rx_queue_status.header.status == HAL_REO_CMD_DRAIN) {
		qdf_mem_zero(reo_status, sizeof(*reo_status));
		reo_status->fl_cache_status.header.status = HAL_REO_CMD_DRAIN;
@@ -2804,6 +2851,8 @@ static int dp_rx_tid_delete_wifi3(struct dp_peer *peer, int tid)

	qdf_mem_zero(&params, sizeof(params));

	DP_RX_REO_QDESC_GET_MAC(freedesc, peer);

	params.std.need_status = 1;
	params.std.addr_lo = rx_tid->hw_qdesc_paddr & 0xffffffff;
	params.std.addr_hi = (uint64_t)(rx_tid->hw_qdesc_paddr) >> 32;
+14 −0
Original line number Diff line number Diff line
@@ -30,6 +30,20 @@

#define DP_FW_PEER_STATS_CMP_TIMEOUT_MSEC 5000

#ifdef REO_QDESC_HISTORY
enum reo_qdesc_event_type {
	REO_QDESC_UPDATE_CB = 0,
	REO_QDESC_FREE,
};

struct reo_qdesc_event {
	qdf_dma_addr_t qdesc_addr;
	uint64_t ts;
	enum reo_qdesc_event_type type;
	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
};
#endif

typedef void dp_peer_iter_func(struct dp_soc *soc, struct dp_peer *peer,
			       void *arg);
void dp_peer_unref_delete(struct dp_peer *peer, enum dp_mod_id id);
+3 −0
Original line number Diff line number Diff line
@@ -821,6 +821,9 @@ struct reo_desc_list_node {
	struct dp_rx_tid rx_tid;
	bool resend_update_reo_cmd;
	uint32_t pending_ext_desc_size;
#ifdef REO_QDESC_HISTORY
	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
#endif
};

#ifdef WLAN_FEATURE_DP_EVENT_HISTORY