ソースを参照

qcacmn: Update cfr metadata len calculation logic

Separate the common fields of csi_cfr_header and update
the logic of calculating the cfr_metadata_len.
Move cmn header update code to single place.

CRs-Fixed: 2916901
Change-Id: I97d99df45f667f4ed3b80264b12d3d09a3bcae95
Shwetha G K 4 年 前
コミット
8159fecc91

+ 22 - 31
cfr/src/target_if_cfr_8074v2.c

@@ -329,16 +329,9 @@ void dump_cfr_peer_tx_event(wmi_cfr_peer_tx_event_param *event)
 void prepare_cfr_header_txstatus(wmi_cfr_peer_tx_event_param *tx_evt_param,
 		struct csi_cfr_header *header)
 {
-	header->start_magic_num        = 0xDEADBEAF;
-	header->vendorid               = 0x8cfdf0;
-	header->cfr_metadata_version   = CFR_META_VERSION_4;
-	header->cfr_data_version       = CFR_DATA_VERSION_1;
-	header->chip_type              = CFR_CAPTURE_RADIO_HKV2;
-	header->pltform_type           = CFR_PLATFORM_TYPE_ARM;
-	header->cfr_metadata_len       = sizeof(struct cfr_metadata_version_4);
-	header->u.meta_v4.status       = 0; /* failure */
-	header->u.meta_v4.length       = 0;
-
+	target_if_cfr_fill_header(header, false, target_type, false);
+	header->u.meta_v4.status = 0; /* failure */
+	header->u.meta_v4.length = 0;
 	qdf_mem_copy(&header->u.meta_v4.peer_addr[0],
 		     &tx_evt_param->peer_mac_addr.bytes[0], QDF_MAC_ADDR_SIZE);
 
@@ -362,6 +355,7 @@ target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
 	qdf_dma_addr_t buf_addr = 0, buf_addr_temp = 0;
 	int status;
 	struct wlan_lmac_if_rx_ops *rx_ops;
+	uint32_t target_type;
 
 	psoc = scn->psoc_obj;
 	if (!psoc) {
@@ -477,30 +471,27 @@ target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
 	lut->tx_address2 = tx_evt_param.correlation_info_2;
 	header = &lut->header;
 
-	header->start_magic_num        = 0xDEADBEAF;
-	header->vendorid               = 0x8cfdf0;
-	header->cfr_metadata_version   = CFR_META_VERSION_4;
-	header->cfr_data_version       = CFR_DATA_VERSION_1;
-	header->chip_type              = CFR_CAPTURE_RADIO_HKV2;
-	header->pltform_type           = CFR_PLATFORM_TYPE_ARM;
-	header->cfr_metadata_len       = sizeof(struct cfr_metadata_version_4);
-	header->u.meta_v4.status       = (tx_evt_param.status &
-					  PEER_CFR_CAPTURE_EVT_STATUS_MASK)?1:0;
-	header->u.meta_v4.capture_bw   = tx_evt_param.bandwidth;
-	header->u.meta_v4.phy_mode     = tx_evt_param.phy_mode;
-	header->u.meta_v4.prim20_chan  = tx_evt_param.primary_20mhz_chan;
-	header->u.meta_v4.center_freq1 = tx_evt_param.band_center_freq1;
-	header->u.meta_v4.center_freq2 = tx_evt_param.band_center_freq2;
+	target_type = target_if_cfr_get_target_type(psoc);
+	target_if_cfr_fill_header(header, false, target_type, false);
+
+	header->u.meta_v4.status         = (tx_evt_param.status &
+					    PEER_CFR_CAPTURE_EVT_STATUS_MASK) ?
+					    1 : 0;
+	header->u.meta_v4.capture_bw     = tx_evt_param.bandwidth;
+	header->u.meta_v4.phy_mode       = tx_evt_param.phy_mode;
+	header->u.meta_v4.prim20_chan    = tx_evt_param.primary_20mhz_chan;
+	header->u.meta_v4.center_freq1   = tx_evt_param.band_center_freq1;
+	header->u.meta_v4.center_freq2   = tx_evt_param.band_center_freq2;
 	/* Currently CFR data is captured on ACK of a Qos NULL frame.
 	 * For 20 MHz, ACK is Legacy and for 40/80/160, ACK is DUP Legacy.
 	 */
-	header->u.meta_v4.capture_mode = tx_evt_param.bandwidth ?
-					 CFR_DUP_LEGACY_ACK : CFR_LEGACY_ACK;
-	header->u.meta_v4.capture_type = tx_evt_param.capture_method;
-	header->u.meta_v4.num_rx_chain = wlan_vdev_mlme_get_rxchainmask(vdev);
-	header->u.meta_v4.sts_count    = tx_evt_param.spatial_streams;
-	header->u.meta_v4.timestamp    = tx_evt_param.timestamp_us;
-	header->u.meta_v4.rx_start_ts  = tx_evt_param.rx_start_ts;
+	header->u.meta_v4.capture_mode   = tx_evt_param.bandwidth ?
+					   CFR_DUP_LEGACY_ACK : CFR_LEGACY_ACK;
+	header->u.meta_v4.capture_type   = tx_evt_param.capture_method;
+	header->u.meta_v4.num_rx_chain   = wlan_vdev_mlme_get_rxchainmask(vdev);
+	header->u.meta_v4.sts_count      = tx_evt_param.spatial_streams;
+	header->u.meta_v4.timestamp      = tx_evt_param.timestamp_us;
+	header->u.meta_v4.rx_start_ts    = tx_evt_param.rx_start_ts;
 	header->u.meta_v4.rtt_cfo_measurement = tx_evt_param.cfo_measurement;
 
 	qdf_mem_copy(&header->u.meta_v4.agc_gain[0],

+ 1 - 18
cfr/src/target_if_cfr_wifi2_0.c

@@ -130,24 +130,7 @@ QDF_STATUS ol_txrx_htt_cfr_rx_ind_handler(void *pdev_ptr,
 	msg_info        = *msg_word;
 	cfr_msg_type    = *(msg_word + 1);
 
-    /* TODO: Need predefined values for Radio and platform, versions */
-
-	cfr_header.start_magic_num       = 0xDEADBEAF;
-	cfr_header.vendorid              = 0x8cfdf0;
-	cfr_header.cfr_metadata_version  = CFR_META_VERSION_1;
-	cfr_header.cfr_data_version      = CFR_DATA_VERSION_1;
-
-	if (target_type == TARGET_TYPE_IPQ4019)
-		cfr_header.chip_type = CFR_CAPTURE_RADIO_DAKOTA;
-	else if (target_type == TARGET_TYPE_QCA9888)
-		cfr_header.chip_type = CFR_CAPTURE_RADIO_BESRA;
-	else if (target_type == TARGET_TYPE_QCA9984)
-		cfr_header.chip_type = CFR_CAPTURE_RADIO_CASCADE;
-	else
-		cfr_header.chip_type = CFR_CAPTURE_RADIO_NONE;
-
-	cfr_header.pltform_type        = CFR_PLATFORM_TYPE_ARM;
-	cfr_header.cfr_metadata_len    = sizeof(struct cfr_metadata_version_1);
+	target_if_cfr_fill_header(&cfr_header, true, target_type, false);
 
 	switch (cfr_msg_type) {
 

+ 11 - 0
target_if/cfr/inc/target_if_cfr.h

@@ -173,6 +173,17 @@ void target_if_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head,
 			     size_t hlen, void *data, size_t dlen, void *tail,
 			     size_t tlen);
 
+/**
+ * target_if_cfr_fill_header() - Function to fill cfr header cmn section
+ * @hdr: pointer to the csi_cfr_header
+ * @is_wifi_2_0: flag to indicate legacy and non legacy radio
+ * @target_type: target type of the radio
+ * @is_rcc: flag to denote fill header request from periodic cfr/rcc
+ */
+void target_if_cfr_fill_header(struct csi_cfr_header *hdr,
+			       bool is_wifi_2_0,
+			       uint32_t target_type,
+			       bool is_rcc);
 #ifdef WIFI_TARGET_TYPE_2_0
 /**
  * cfr_wifi2_0_init_pdev() - Function to init legacy pdev

+ 43 - 0
target_if/cfr/src/target_if_cfr.c

@@ -225,6 +225,49 @@ int target_if_cfr_get_target_type(struct wlan_objmgr_psoc *psoc)
 	return target_type;
 }
 
+void target_if_cfr_fill_header(struct csi_cfr_header *hdr,
+			       bool is_wifi_2_0,
+			       uint32_t target_type,
+			       bool is_rcc)
+{
+	hdr->cmn.start_magic_num = 0xDEADBEAF;
+	hdr->cmn.vendorid = 0x8cfdf0;
+	hdr->cmn.pltform_type = CFR_PLATFORM_TYPE_ARM;
+	hdr->cmn.cfr_metadata_len = CFR_META_DATA_LEN;
+	hdr->cmn.cfr_data_version = CFR_DATA_VERSION_1;
+
+	if (is_wifi_2_0) {
+		hdr->cmn.cfr_metadata_version  = CFR_META_VERSION_1;
+		if (target_type == TARGET_TYPE_IPQ4019)
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_DAKOTA;
+		else if (target_type == TARGET_TYPE_QCA9888)
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_BESRA;
+		else if (target_type == TARGET_TYPE_QCA9984)
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_CASCADE;
+		else
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_NONE;
+	} else if (target_type == TARGET_TYPE_QCA8074V2) {
+		hdr->cmn.cfr_metadata_version = CFR_META_VERSION_4;
+		hdr->cmn.chip_type = CFR_CAPTURE_RADIO_HKV2;
+	} else {
+		if ((target_type == TARGET_TYPE_QCN9000) ||
+		    (target_type == TARGET_TYPE_QCA6018) ||
+		    ((target_type == TARGET_TYPE_QCA5018) && (!is_rcc)))
+			hdr->cmn.cfr_metadata_version = CFR_META_VERSION_5;
+		else
+			hdr->cmn.cfr_metadata_version = CFR_META_VERSION_3;
+
+		if (target_type == TARGET_TYPE_QCN9000)
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_PINE;
+		else if (target_type == TARGET_TYPE_QCA5018)
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_MAPLE;
+		else if (target_type == TARGET_TYPE_QCN6122)
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_SPRUCE;
+		else
+			hdr->cmn.chip_type = CFR_CAPTURE_RADIO_CYP;
+	}
+}
+
 #ifdef CFR_USE_FIXED_FOLDER
 static QDF_STATUS target_if_cfr_init_target(struct wlan_objmgr_psoc *psoc,
 					    struct wlan_objmgr_pdev *pdev,

+ 13 - 64
target_if/cfr/src/target_if_cfr_enh.c

@@ -353,13 +353,13 @@ static void dump_metadata(struct csi_cfr_header *header, uint32_t cookie)
 		  "is_mu_ppdu = %d\n"
 		  "num_users = %d\n",
 		cookie,
-		header->start_magic_num,
-		header->vendorid,
-		header->cfr_metadata_version,
-		header->cfr_data_version,
-		header->cfr_metadata_len,
-		header->chip_type,
-		header->pltform_type,
+		header->cmn.start_magic_num,
+		header->cmn.vendorid,
+		header->cmn.cfr_metadata_version,
+		header->cmn.cfr_data_version,
+		header->cmn.cfr_metadata_len,
+		header->cmn.chip_type,
+		header->cmn.pltform_type,
 		meta->status,
 		meta->capture_bw,
 		meta->channel_bw,
@@ -399,7 +399,7 @@ static void dump_metadata(struct csi_cfr_header *header, uint32_t cookie)
 			  meta->chain_phase[chain_id]);
 	}
 
-	if (header->cfr_metadata_version == CFR_META_VERSION_5) {
+	if (header->cmn.cfr_metadata_version == CFR_META_VERSION_5) {
 		cfr_debug("rtt_cfo_measurement = %d\n",
 			  meta->rtt_cfo_measurement);
 		cfr_debug("rx_start_ts = %u\n", meta->rx_start_ts);
@@ -818,18 +818,7 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 	header = &lut->header;
 	meta = &header->u.meta_v5;
 
-	header->start_magic_num        = 0xDEADBEAF;
-	header->vendorid               = 0x8cfdf0;
-	if (target_type == TARGET_TYPE_QCN9000 ||
-	    target_type == TARGET_TYPE_QCA6018)
-		header->cfr_metadata_version   = CFR_META_VERSION_5;
-	else
-		header->cfr_metadata_version   = CFR_META_VERSION_3;
-
-	header->cfr_data_version       = CFR_DATA_VERSION_1;
-	header->chip_type              = pcfr->chip_type;
-	header->pltform_type           = CFR_PLATFORM_TYPE_ARM;
-	header->cfr_metadata_len       = sizeof(struct cfr_metadata_version_5);
+	target_if_cfr_fill_header(header, false, target_type, true);
 
 	meta->status       = 1;
 	meta->phy_mode = ch_phymode;
@@ -1031,7 +1020,7 @@ static bool enh_cfr_dbr_event_handler(struct wlan_objmgr_pdev *pdev,
 		     sizeof(struct whal_cfir_dma_hdr));
 
 	header = &lut->header;
-	header->chip_type = pcfr->chip_type;
+	header->cmn.chip_type = pcfr->chip_type;
 	meta = &header->u.meta_v5;
 	meta->channel_bw = dma_hdr.upload_pkt_bw;
 	meta->num_rx_chain = NUM_CHAINS_FW_TO_HOST(dma_hdr.num_chains);
@@ -1192,27 +1181,7 @@ static void enh_prepare_cfr_header_txstatus(wmi_cfr_peer_tx_event_param
 					    struct csi_cfr_header *header,
 					    uint32_t target_type)
 {
-	header->start_magic_num        = 0xDEADBEAF;
-	header->vendorid               = 0x8cfdf0;
-	header->cfr_data_version       = CFR_DATA_VERSION_1;
-	if (target_type == TARGET_TYPE_QCN9000 ||
-	    target_type == TARGET_TYPE_QCA6018 ||
-	    target_type == TARGET_TYPE_QCA5018)
-		header->cfr_metadata_version   = CFR_META_VERSION_5;
-	else
-		header->cfr_metadata_version   = CFR_META_VERSION_3;
-
-	if (target_type == TARGET_TYPE_QCN9000)
-		header->chip_type      = CFR_CAPTURE_RADIO_PINE;
-	else if (target_type == TARGET_TYPE_QCA5018)
-		header->chip_type      = CFR_CAPTURE_RADIO_MAPLE;
-	else if (target_type == TARGET_TYPE_QCN6122)
-		header->chip_type      = CFR_CAPTURE_RADIO_SPRUCE;
-	else
-		header->chip_type      = CFR_CAPTURE_RADIO_CYP;
-
-	header->pltform_type           = CFR_PLATFORM_TYPE_ARM;
-	header->cfr_metadata_len       = sizeof(struct cfr_metadata_version_5);
+	target_if_cfr_fill_header(header, false, target_type, false);
 	header->u.meta_v5.status       = 0; /* failure */
 	header->u.meta_v5.length       = 0;
 	header->u.meta_v5.rtt_cfo_measurement = tx_evt_param->cfo_measurement;
@@ -1243,7 +1212,7 @@ target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
 	struct pdev_cfr *pcfr;
 	struct look_up_table *lut = NULL;
 	struct csi_cfr_header *header = NULL;
-	struct csi_cfr_header header_error = {0};
+	struct csi_cfr_header header_error = {{0} };
 	wmi_cfr_peer_tx_event_param tx_evt_param = {0};
 	qdf_dma_addr_t buf_addr = 0, buf_addr_temp = 0;
 	int status;
@@ -1399,27 +1368,7 @@ target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
 	lut->txrx_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
 
 	header = &lut->header;
-	header->start_magic_num        = 0xDEADBEAF;
-	header->vendorid               = 0x8cfdf0;
-	header->cfr_data_version       = CFR_DATA_VERSION_1;
-	header->cfr_metadata_len       = sizeof(struct cfr_metadata_version_5);
-	if (target_type == TARGET_TYPE_QCN9000 ||
-	    target_type == TARGET_TYPE_QCA6018 ||
-	    target_type == TARGET_TYPE_QCA5018)
-		header->cfr_metadata_version   = CFR_META_VERSION_5;
-	else
-		header->cfr_metadata_version   = CFR_META_VERSION_3;
-
-	if (target_type == TARGET_TYPE_QCN9000)
-		header->chip_type      = CFR_CAPTURE_RADIO_PINE;
-	else if (target_type == TARGET_TYPE_QCA5018)
-		header->chip_type      = CFR_CAPTURE_RADIO_MAPLE;
-	else if (target_type == TARGET_TYPE_QCN6122)
-		header->chip_type      = CFR_CAPTURE_RADIO_SPRUCE;
-	else
-		header->chip_type      = CFR_CAPTURE_RADIO_CYP;
-
-	header->pltform_type           = CFR_PLATFORM_TYPE_ARM;
+	target_if_cfr_fill_header(header, false, target_type, false);
 	header->u.meta_v5.status       = (tx_evt_param.status &
 					  PEER_CFR_CAPTURE_EVT_STATUS_MASK) ?
 					  1 : 0;

+ 7 - 1
umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h

@@ -247,7 +247,10 @@ struct cfr_metadata_version_5 {
 
 #endif
 
-struct csi_cfr_header {
+#define  CFR_META_DATA_LEN \
+	(sizeof(struct csi_cfr_header) - sizeof(struct cfr_header_cmn))
+
+struct cfr_header_cmn {
 	u_int32_t   start_magic_num;
 	u_int32_t   vendorid;
 	u_int8_t    cfr_metadata_version;
@@ -255,7 +258,10 @@ struct csi_cfr_header {
 	u_int8_t    chip_type;
 	u_int8_t    pltform_type;
 	u_int32_t   cfr_metadata_len;
+} __attribute__ ((__packed__));
 
+struct csi_cfr_header {
+	struct cfr_header_cmn cmn;
 	union {
 		struct cfr_metadata_version_1 meta_v1;
 		struct cfr_metadata_version_2 meta_v2;

+ 6 - 6
umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c

@@ -423,12 +423,12 @@ void ucfg_cfr_capture_data(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id,
 		goto exit;
 	}
 
-	hdr->vendorid               = CFR_VENDOR_ID;
-	hdr->cfr_metadata_version   = CFR_META_VERSION_1;
-	hdr->cfr_data_version       = CFR_DATA_VERSION_1;
-	hdr->chip_type              = CFR_CAPTURE_RADIO_ADRASTEA;
-	hdr->pltform_type           = CFR_PLATFORM_TYPE_ARM;
-	hdr->cfr_metadata_len       = sizeof(struct cfr_metadata_version_1);
+	hdr->cmn.vendorid               = CFR_VENDOR_ID;
+	hdr->cmn.cfr_metadata_version   = CFR_META_VERSION_1;
+	hdr->cmn.cfr_data_version       = CFR_DATA_VERSION_1;
+	hdr->cmn.chip_type              = CFR_CAPTURE_RADIO_ADRASTEA;
+	hdr->cmn.pltform_type           = CFR_PLATFORM_TYPE_ARM;
+	hdr->cmn.cfr_metadata_len       = CFR_META_DATA_LEN;
 
 	vaddr = pcfr->cfr_mem_chunk.vaddr;
 	rindex = (u32 *)vaddr;