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

Commit 668ec8ba authored by Shwetha G K's avatar Shwetha G K Committed by Madan Koyyalamudi
Browse files

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
parent 05554076
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -172,6 +172,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
+41 −0
Original line number Diff line number Diff line
@@ -201,6 +201,47 @@ 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
			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 −60
Original line number Diff line number Diff line
@@ -364,13 +364,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,
@@ -410,7 +410,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);
@@ -823,18 +823,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;
@@ -1036,7 +1025,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);
@@ -1197,25 +1186,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
		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;
@@ -1246,7 +1217,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;
@@ -1402,25 +1373,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
		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
Original line number Diff line number Diff line
@@ -248,7 +248,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;
@@ -256,7 +259,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
Original line number Diff line number Diff line
@@ -419,12 +419,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;