Selaa lähdekoodia

Merge "qca-wifi: CFR: Update RCC specific debug counters"

Linux Build Service Account 5 vuotta sitten
vanhempi
sitoutus
b8a344d2df

+ 5 - 2
target_if/cfr/inc/target_if_cfr.h

@@ -42,8 +42,11 @@
 
 
 /* Module IDs using corrlation function */
 /* Module IDs using corrlation function */
 #define CORRELATE_DBR_MODULE_ID   0
 #define CORRELATE_DBR_MODULE_ID   0
-#define CORRELATE_TX_EV_MODULE_ID 1 /* HKV2 */
-#define CORRELATE_TXRX_EV_MODULE_ID 1 /* Cypress */
+/*
+ * HKV2 - Tx completion event for one-shot capture
+ * Cypress - Tx completion event for one-shot capture (or) RXTLV event for RCC
+ */
+#define CORRELATE_TX_EV_MODULE_ID 1
 
 
 /**
 /**
  * target_if_cfr_init_pdev() - Inits cfr pdev and registers necessary handlers.
  * target_if_cfr_init_pdev() - Inits cfr pdev and registers necessary handlers.

+ 11 - 45
target_if/cfr/src/target_if_cfr_6018.c

@@ -430,14 +430,12 @@ void extract_peer_mac_from_freeze_tlv(void *freeze_tlv, uint8_t *peermac)
 	struct macrx_freeze_capture_channel *freeze =
 	struct macrx_freeze_capture_channel *freeze =
 		(struct macrx_freeze_capture_channel *)freeze_tlv;
 		(struct macrx_freeze_capture_channel *)freeze_tlv;
 
 
-	if (freeze->sw_peer_id_valid) {
-		peermac[0] = freeze->packet_ta_lower_16 & 0x00FF;
-		peermac[1] = (freeze->packet_ta_lower_16 & 0xFF00) >> 8;
-		peermac[2] = freeze->packet_ta_mid_16 & 0x00FF;
-		peermac[3] = (freeze->packet_ta_mid_16 & 0xFF00) >> 8;
-		peermac[4] = freeze->packet_ta_upper_16 & 0x00FF;
-		peermac[5] = (freeze->packet_ta_upper_16 & 0xFF00) >> 8;
-	}
+	peermac[0] = freeze->packet_ta_lower_16 & 0x00FF;
+	peermac[1] = (freeze->packet_ta_lower_16 & 0xFF00) >> 8;
+	peermac[2] = freeze->packet_ta_mid_16 & 0x00FF;
+	peermac[3] = (freeze->packet_ta_mid_16 & 0xFF00) >> 8;
+	peermac[4] = freeze->packet_ta_upper_16 & 0x00FF;
+	peermac[5] = (freeze->packet_ta_upper_16 & 0xFF00) >> 8;
 }
 }
 
 
 /**
 /**
@@ -489,7 +487,7 @@ int correlate_and_relay_enh(struct wlan_objmgr_pdev *pdev, uint32_t cookie,
 	pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
 	pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
 						     WLAN_UMAC_COMP_CFR);
 						     WLAN_UMAC_COMP_CFR);
 
 
-	if (module_id == CORRELATE_TXRX_EV_MODULE_ID) {
+	if (module_id == CORRELATE_TX_EV_MODULE_ID) {
 		if (lut->tx_recv)
 		if (lut->tx_recv)
 			pcfr->cfr_dma_aborts++;
 			pcfr->cfr_dma_aborts++;
 		lut->tx_recv = true;
 		lut->tx_recv = true;
@@ -590,7 +588,6 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 	struct wlan_objmgr_psoc *psoc;
 	struct wlan_objmgr_psoc *psoc;
 	struct wlan_channel *bss_chan;
 	struct wlan_channel *bss_chan;
 	enum wlan_phymode ch_phymode;
 	enum wlan_phymode ch_phymode;
-	enum phy_ch_width ch_width;
 	uint16_t ch_freq;
 	uint16_t ch_freq;
 	uint32_t ch_cfreq1;
 	uint32_t ch_cfreq1;
 	uint32_t ch_cfreq2;
 	uint32_t ch_cfreq2;
@@ -623,32 +620,9 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 
 
 	cdp_rx_ppdu = (struct cdp_rx_indication_ppdu *)qdf_nbuf_data(nbuf);
 	cdp_rx_ppdu = (struct cdp_rx_indication_ppdu *)qdf_nbuf_data(nbuf);
 	cfr_info = &cdp_rx_ppdu->cfr_info;
 	cfr_info = &cdp_rx_ppdu->cfr_info;
-	if (cfr_info->bb_captured_timeout) {
-		pcfr->bb_captured_timeout_cnt++;
-		pcfr->bb_captured_reason_cnt[cfr_info->bb_captured_reason]++;
-		goto done;
-	}
-
-
-	if (cfr_info->bb_captured_channel) {
-		pcfr->bb_captured_channel_cnt++;
-		pcfr->bb_captured_reason_cnt[cfr_info->bb_captured_reason]++;
-	} else {
-		goto done; /* HW registers have not captured FFT bins */
-	}
 
 
-	pcfr->chan_capture_status[cfr_info->chan_capture_status]++;
-	if (cfr_info->rx_location_info_valid) {
-		pcfr->rx_loc_info_valid_cnt++;
-	} else {
+	if (!cfr_info->bb_captured_channel)
 		goto done;
 		goto done;
-	}
-
-	if (cfr_info->chan_capture_status != CAPTURE_ACTIVE) {
-		wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-		qdf_nbuf_free(nbuf);
-		return;
-	}
 
 
 	psoc = wlan_pdev_get_psoc(pdev);
 	psoc = wlan_pdev_get_psoc(pdev);
 	if (qdf_unlikely(!psoc)) {
 	if (qdf_unlikely(!psoc)) {
@@ -702,7 +676,6 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 	ch_cfreq1 = bss_chan->ch_cfreq1;
 	ch_cfreq1 = bss_chan->ch_cfreq1;
 	ch_cfreq2 = bss_chan->ch_cfreq2;
 	ch_cfreq2 = bss_chan->ch_cfreq2;
 	ch_phymode = bss_chan->ch_phymode;
 	ch_phymode = bss_chan->ch_phymode;
-	ch_width = bss_chan->ch_width;
 	rx_chainmask = wlan_vdev_mlme_get_rxchainmask(vdev);
 	rx_chainmask = wlan_vdev_mlme_get_rxchainmask(vdev);
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
 
 
@@ -723,7 +696,7 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 	header->Reserved               = 0;
 	header->Reserved               = 0;
 
 
 	meta->status       = 1;
 	meta->status       = 1;
-	meta->capture_bw   = ch_width;
+	meta->capture_bw   = cdp_rx_ppdu->u.bw;
 	meta->phy_mode = ch_phymode;
 	meta->phy_mode = ch_phymode;
 	meta->prim20_chan  = ch_freq;
 	meta->prim20_chan  = ch_freq;
 	meta->center_freq1 = ch_cfreq1;
 	meta->center_freq1 = ch_cfreq1;
@@ -754,7 +727,7 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 		}
 		}
 	}
 	}
 	status = correlate_and_relay_enh(pdev, cookie, lut,
 	status = correlate_and_relay_enh(pdev, cookie, lut,
-					 CORRELATE_TXRX_EV_MODULE_ID);
+					 CORRELATE_TX_EV_MODULE_ID);
 	if (status == STATUS_STREAM_AND_RELEASE) {
 	if (status == STATUS_STREAM_AND_RELEASE) {
 		if (cfr_rx_ops->cfr_info_send)
 		if (cfr_rx_ops->cfr_info_send)
 			status = cfr_rx_ops->cfr_info_send(pdev,
 			status = cfr_rx_ops->cfr_info_send(pdev,
@@ -1254,7 +1227,7 @@ target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
 		     HOST_MAX_CHAINS * sizeof(tx_evt_param.chain_phase[0]));
 		     HOST_MAX_CHAINS * sizeof(tx_evt_param.chain_phase[0]));
 
 
 	status = correlate_and_relay_enh(pdev, cookie, lut,
 	status = correlate_and_relay_enh(pdev, cookie, lut,
-					 CORRELATE_TXRX_EV_MODULE_ID);
+					 CORRELATE_TX_EV_MODULE_ID);
 	if (status == STATUS_STREAM_AND_RELEASE) {
 	if (status == STATUS_STREAM_AND_RELEASE) {
 		if (cfr_rx_ops->cfr_info_send)
 		if (cfr_rx_ops->cfr_info_send)
 			status = cfr_rx_ops->cfr_info_send(pdev,
 			status = cfr_rx_ops->cfr_info_send(pdev,
@@ -1626,14 +1599,7 @@ QDF_STATUS cfr_6018_deinit_pdev(struct wlan_objmgr_psoc *psoc,
 	pcfr->flush_timeout_dbr_cnt = 0;
 	pcfr->flush_timeout_dbr_cnt = 0;
 	pcfr->invalid_dma_length_cnt = 0;
 	pcfr->invalid_dma_length_cnt = 0;
 	pcfr->clear_txrx_event = 0;
 	pcfr->clear_txrx_event = 0;
-	pcfr->bb_captured_channel_cnt = 0;
-	pcfr->bb_captured_timeout_cnt = 0;
-	pcfr->rx_loc_info_valid_cnt = 0;
 	pcfr->cfr_dma_aborts = 0;
 	pcfr->cfr_dma_aborts = 0;
-	qdf_mem_zero(&pcfr->chan_capture_status,
-		     sizeof(uint64_t) * NUM_CHAN_CAPTURE_STATUS);
-	qdf_mem_zero(&pcfr->bb_captured_reason_cnt,
-		     sizeof(uint64_t) * NUM_CHAN_CAPTURE_REASON);
 	qdf_mem_zero(&pcfr->rcc_param, sizeof(struct cfr_rcc_param));
 	qdf_mem_zero(&pcfr->rcc_param, sizeof(struct cfr_rcc_param));
 	qdf_mem_zero(&pcfr->global, (sizeof(struct ta_ra_cfr_cfg) *
 	qdf_mem_zero(&pcfr->global, (sizeof(struct ta_ra_cfr_cfg) *
 				     MAX_TA_RA_ENTRIES));
 				     MAX_TA_RA_ENTRIES));

+ 8 - 0
umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h

@@ -248,6 +248,14 @@ QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev);
  */
  */
 QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev);
 QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev);
 
 
+/**
+ * ucfg_cfr_rcc_clr_dbg_counters() - function to clear CFR PPDU counters
+ * @vdev: pointer to vdev object
+ *
+ * Return: status
+ */
+QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev);
+
 /**
 /**
  * ucfg_cfr_rcc_dump_lut() - function to display lookup table
  * ucfg_cfr_rcc_dump_lut() - function to display lookup table
  * @vdev: pointer to vdev object
  * @vdev: pointer to vdev object

+ 0 - 41
umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h

@@ -116,24 +116,6 @@ enum cfr_capture_type {
 	CFR_TYPE_METHOD_MAX,
 	CFR_TYPE_METHOD_MAX,
 };
 };
 
 
-enum mac_freeze_capture_reason {
-	FREEZE_REASON_TM = 0,
-	FREEZE_REASON_FTM = 1,
-	FREEZE_REASON_ACK_RESP_TO_TM_FTM = 2,
-	FREEZE_REASON_TA_RA_TYPE_FILTER = 3,
-	FREEZE_REASON_NDPA_NDP = 4,
-	FREEZE_REASON_ALL_PACKET = 5,
-	FREEZE_REASON_MAX,
-};
-
-enum chan_capture_status {
-	CAPTURE_IDLE = 0,
-	CAPTURE_BUSY,
-	CAPTURE_ACTIVE,
-	CAPTURE_NO_BUFFER,
-	CAPTURE_MAX,
-};
-
 struct cfr_metadata_version_1 {
 struct cfr_metadata_version_1 {
 	u_int8_t    peer_addr[QDF_MAC_ADDR_SIZE];
 	u_int8_t    peer_addr[QDF_MAC_ADDR_SIZE];
 	u_int8_t    status;
 	u_int8_t    status;
@@ -464,24 +446,6 @@ struct cfr_rcc_param {
  * lut_age_timer: Timer to flush pending TXRX/DBR events in lookup table
  * lut_age_timer: Timer to flush pending TXRX/DBR events in lookup table
  * lut_timer_init: flag to determine if lut_age_timer is initialized or not
  * lut_timer_init: flag to determine if lut_age_timer is initialized or not
  * is_cfr_rcc_capable: Flag to determine if RCC is enabled or not.
  * is_cfr_rcc_capable: Flag to determine if RCC is enabled or not.
- * bb_captured_channel_cnt: No. of PPDUs for which MAC sent Freeze TLV to PHY
- * bb_captured_timeout_cnt: No. of PPDUs for which CFR filter criteria matched
- * but MAC did not send Freeze TLV to PHY as time exceeded freeze tlv delay
- * count threshold
- * rx_loc_info_valid_cnt: No. of PPDUs for which PHY could find a valid buffer
-   in ucode IPC ring
- * chan_capture_status[]: capture status counters
- *	[0] - No. of PPDUs with capture status CAPTURE_IDLE
- *	[1] - No. of PPDUs with capture status CAPTURE_BUSY
- *	[2] - No. of PPDUs with capture status CAPTURE_ACTIVE
- *	[3] - No. of PPDUs with capture status CAPTURE_NO_BUFFER
- * bb_captured_reason_cnt[]: capture reason counters
- *	[0] - No. PPDUs filtered due to freeze_reason_TM
- *	[1] - No. PPDUs filtered due to freeze_reason_FTM
- *	[2] - No. PPDUs filtered due to freeze_reason_ACK_resp_to_TM_FTM
- *	[3] - No. PPDUs filtered due to freeze_reason_TA_RA_TYPE_FILTER
- *	[4] - No. PPDUs filtered due to freeze_reason_NDPA_NDP
- *	[5] - No. PPDUs filtered due to freeze_reason_ALL_PACKET
  * flush_dbr_cnt: No. of un-correlated DBR completions flushed when a newer PPDU
  * flush_dbr_cnt: No. of un-correlated DBR completions flushed when a newer PPDU
  * is correlated successfully with newer DBR completion
  * is correlated successfully with newer DBR completion
  * invalid_dma_length_cnt: No. of buffers for which CFR DMA header length (or)
  * invalid_dma_length_cnt: No. of buffers for which CFR DMA header length (or)
@@ -523,11 +487,6 @@ struct pdev_cfr {
 	qdf_timer_t lut_age_timer;
 	qdf_timer_t lut_age_timer;
 	uint8_t lut_timer_init;
 	uint8_t lut_timer_init;
 	uint8_t is_cfr_rcc_capable;
 	uint8_t is_cfr_rcc_capable;
-	uint64_t bb_captured_channel_cnt;
-	uint64_t bb_captured_timeout_cnt;
-	uint64_t rx_loc_info_valid_cnt;
-	uint64_t chan_capture_status[CAPTURE_MAX];
-	uint64_t bb_captured_reason_cnt[FREEZE_REASON_MAX];
 	uint64_t flush_dbr_cnt;
 	uint64_t flush_dbr_cnt;
 	uint64_t invalid_dma_length_cnt;
 	uint64_t invalid_dma_length_cnt;
 	uint64_t flush_timeout_dbr_cnt;
 	uint64_t flush_timeout_dbr_cnt;

+ 70 - 15
umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c

@@ -726,7 +726,7 @@ static const char *chan_capture_status_to_str(enum chan_capture_status type)
 	case CAPTURE_NO_BUFFER:
 	case CAPTURE_NO_BUFFER:
 		return "CAPTURE_NO_BUFFER";
 		return "CAPTURE_NO_BUFFER";
 	default:
 	default:
-		return "NONE";
+		return "INVALID";
 	}
 	}
 }
 }
 
 
@@ -747,7 +747,7 @@ char *mac_freeze_reason_to_str(enum mac_freeze_capture_reason type)
 	case FREEZE_REASON_ALL_PACKET:
 	case FREEZE_REASON_ALL_PACKET:
 		return "FREEZE_REASON_ALL_PACKET";
 		return "FREEZE_REASON_ALL_PACKET";
 	default:
 	default:
-		return "NONE";
+		return "INVALID";
 	}
 	}
 }
 }
 
 
@@ -755,19 +755,22 @@ QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev)
 {
 {
 	struct pdev_cfr *pcfr = NULL;
 	struct pdev_cfr *pcfr = NULL;
 	struct wlan_objmgr_pdev *pdev = NULL;
 	struct wlan_objmgr_pdev *pdev = NULL;
-	int counter;
+	struct wlan_objmgr_psoc *psoc = NULL;
+	struct cdp_cfr_rcc_stats *cfr_rcc_stats = NULL;
+	uint8_t stats_cnt;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
 
 	status = dev_sanity_check(vdev, &pdev, &pcfr);
 	status = dev_sanity_check(vdev, &pdev, &pcfr);
 	if (status != QDF_STATUS_SUCCESS)
 	if (status != QDF_STATUS_SUCCESS)
 		return status;
 		return status;
 
 
-	cfr_err("bb_captured_channel_cnt = %llu\n",
-		pcfr->bb_captured_channel_cnt);
-	cfr_err("bb_captured_timeout_cnt = %llu\n",
-		pcfr->bb_captured_timeout_cnt);
-	cfr_err("rx_loc_info_valid_cnt = %llu\n",
-		pcfr->rx_loc_info_valid_cnt);
+	psoc = wlan_pdev_get_psoc(pdev);
+	if (!psoc) {
+		cfr_err("psoc is null!");
+		wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
 	cfr_err("total_tx_evt_cnt = %llu\n",
 	cfr_err("total_tx_evt_cnt = %llu\n",
 		pcfr->total_tx_evt_cnt);
 		pcfr->total_tx_evt_cnt);
 	cfr_err("dbr_evt_cnt = %llu\n",
 	cfr_err("dbr_evt_cnt = %llu\n",
@@ -789,20 +792,72 @@ QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev)
 	cfr_err("cfr_dma_aborts = %llu\n",
 	cfr_err("cfr_dma_aborts = %llu\n",
 		pcfr->cfr_dma_aborts);
 		pcfr->cfr_dma_aborts);
 
 
+	cfr_rcc_stats = qdf_mem_malloc(sizeof(struct cdp_cfr_rcc_stats));
+	if (!cfr_rcc_stats) {
+		wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
+		return QDF_STATUS_E_NOMEM;
+	}
+
+	cdp_get_cfr_dbg_stats(wlan_psoc_get_dp_handle(psoc),
+			      wlan_objmgr_pdev_get_pdev_id(pdev),
+			      cfr_rcc_stats);
+
+	cfr_err("bb_captured_channel_cnt: %llu\n",
+		cfr_rcc_stats->bb_captured_channel_cnt);
+	cfr_err("bb_captured_timeout_cnt: %llu\n",
+		cfr_rcc_stats->bb_captured_timeout_cnt);
+	cfr_err("rx_loc_info_valid_cnt: %llu\n",
+		cfr_rcc_stats->rx_loc_info_valid_cnt);
+
 	cfr_err("Channel capture status:\n");
 	cfr_err("Channel capture status:\n");
-	for (counter = 0; counter < CAPTURE_MAX; counter++) {
+	for (stats_cnt = 0; stats_cnt < CAPTURE_MAX; stats_cnt++) {
 		cfr_err("%s = %llu\n",
 		cfr_err("%s = %llu\n",
-			 chan_capture_status_to_str(counter),
-			 pcfr->chan_capture_status[counter]);
+			chan_capture_status_to_str(stats_cnt),
+			cfr_rcc_stats->chan_capture_status[stats_cnt]);
 	}
 	}
 
 
 	cfr_err("Freeze reason:\n");
 	cfr_err("Freeze reason:\n");
-	for (counter = 0; counter < FREEZE_REASON_MAX; counter++) {
+	for (stats_cnt = 0; stats_cnt < FREEZE_REASON_MAX; stats_cnt++) {
 		cfr_err("%s = %llu\n",
 		cfr_err("%s = %llu\n",
-			 mac_freeze_reason_to_str(counter),
-			 pcfr->bb_captured_reason_cnt[counter]);
+			mac_freeze_reason_to_str(stats_cnt),
+			cfr_rcc_stats->reason_cnt[stats_cnt]);
 	}
 	}
 
 
+	qdf_mem_free(cfr_rcc_stats);
+	wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
+
+	return status;
+}
+
+QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev)
+{
+	struct pdev_cfr *pcfr = NULL;
+	struct wlan_objmgr_pdev *pdev = NULL;
+	struct wlan_objmgr_psoc *psoc = NULL;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	status = dev_sanity_check(vdev, &pdev, &pcfr);
+	if (status != QDF_STATUS_SUCCESS)
+		return status;
+
+	psoc = wlan_pdev_get_psoc(pdev);
+	if (!psoc) {
+		cfr_err("psoc is null!");
+		wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+	cdp_cfr_clr_dbg_stats(wlan_psoc_get_dp_handle(psoc),
+			      wlan_objmgr_pdev_get_pdev_id(pdev));
+
+	pcfr->dbr_evt_cnt = 0;
+	pcfr->release_cnt = 0;
+	pcfr->total_tx_evt_cnt = 0;
+	pcfr->rx_tlv_evt_cnt = 0;
+	pcfr->flush_dbr_cnt = 0;
+	pcfr->flush_timeout_dbr_cnt = 0;
+	pcfr->invalid_dma_length_cnt = 0;
+	pcfr->clear_txrx_event = 0;
+	pcfr->cfr_dma_aborts = 0;
 	wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
 	wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
 
 
 	return status;
 	return status;