Pārlūkot izejas kodu

qca-wifi: CFR: Fixes during initial WMI being sent to FW

1. Change the default values of TA\RA entries

Host sends out one default RCC setting to FW during
the initialization of target specific CFR component.

Change the default setting of TA, RA address from
00:00:00:00:00:00 to FF:FF:FF:FF:FF:FF and TA_MASK and RA_MASK
should be 00:00:00:00:00:00. This will avoid
the scenario where the system will allow all packets
irrespective of the filter settings provided by the user.

2. In case default configuration is being sent to the FW
successfully during CFR init, those configurations will
be updated as part of global config. So that it can be
reflected as part of rcc_config_details command.

3. Code clean up

Change-Id: I719ddeee48f14992b2210562596b1ea3d61fcc1c
Adwait Nayak 5 gadi atpakaļ
vecāks
revīzija
862792aa58

+ 13 - 4
target_if/cfr/inc/target_if_cfr_6018.h

@@ -254,18 +254,18 @@ QDF_STATUS cfr_6018_deinit_pdev(
  * entries
  * entries
  * @pdev: pointer to pdev object
  * @pdev: pointer to pdev object
  *
  *
- * Return: Success/Failure status
+ * Return: None
  */
  */
-QDF_STATUS target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
+void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
 
 
 /**
 /**
  * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT
  * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT
  * entries
  * entries
  * @pdev: pointer to pdev object
  * @pdev: pointer to pdev object
  *
  *
- * Return: Success/Failure status
+ * Return: None
  */
  */
-QDF_STATUS target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
+void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
 
 
 /**
 /**
  * target_if_cfr_dump_lut_enh() - Dump all valid LUT entries
  * target_if_cfr_dump_lut_enh() - Dump all valid LUT entries
@@ -308,6 +308,15 @@ void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_param,
  * Return: none
  * Return: none
  */
  */
 void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
 void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
+
+/**
+ * target_if_cfr_update_global_cfg() - Update global config after a successful
+ * commit
+ * @pdev: pointer to pdev object
+ *
+ * Return: None
+ */
+void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev);
 #else
 #else
 static QDF_STATUS cfr_6018_init_pdev(
 static QDF_STATUS cfr_6018_init_pdev(
 		struct wlan_objmgr_psoc *psoc,
 		struct wlan_objmgr_psoc *psoc,

+ 7 - 3
target_if/cfr/src/target_if_cfr.c

@@ -255,17 +255,19 @@ void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_info,
 	struct ta_ra_cfr_cfg *curr_cfg = NULL;
 	struct ta_ra_cfr_cfg *curr_cfg = NULL;
 	int grp_id;
 	int grp_id;
 
 
-	uint8_t null_mac[QDF_MAC_ADDR_SIZE] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+	uint8_t def_mac[QDF_MAC_ADDR_SIZE] = {0xFF, 0xFF, 0xFF,
+		0xFF, 0xFF, 0xFF};
+	uint8_t null_mac[QDF_MAC_ADDR_SIZE] = {0, 0, 0, 0, 0, 0};
 
 
 	for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
 	for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
 		if (qdf_test_bit(grp_id, (unsigned long *)&reset_cfg)) {
 		if (qdf_test_bit(grp_id, (unsigned long *)&reset_cfg)) {
 			curr_cfg = &rcc_info->curr[grp_id];
 			curr_cfg = &rcc_info->curr[grp_id];
 			qdf_mem_copy(curr_cfg->tx_addr,
 			qdf_mem_copy(curr_cfg->tx_addr,
-				     null_mac, QDF_MAC_ADDR_SIZE);
+				     def_mac, QDF_MAC_ADDR_SIZE);
 			qdf_mem_copy(curr_cfg->tx_addr_mask,
 			qdf_mem_copy(curr_cfg->tx_addr_mask,
 				     null_mac, QDF_MAC_ADDR_SIZE);
 				     null_mac, QDF_MAC_ADDR_SIZE);
 			qdf_mem_copy(curr_cfg->rx_addr,
 			qdf_mem_copy(curr_cfg->rx_addr,
-				     null_mac, QDF_MAC_ADDR_SIZE);
+				     def_mac, QDF_MAC_ADDR_SIZE);
 			qdf_mem_copy(curr_cfg->rx_addr_mask,
 			qdf_mem_copy(curr_cfg->rx_addr_mask,
 				     null_mac, QDF_MAC_ADDR_SIZE);
 				     null_mac, QDF_MAC_ADDR_SIZE);
 			curr_cfg->bw = 0xf;
 			curr_cfg->bw = 0xf;
@@ -314,6 +316,8 @@ void target_if_enh_cfr_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
 		target_if_cfr_dump_lut_enh;
 		target_if_cfr_dump_lut_enh;
 	tx_ops->cfr_tx_ops.cfr_rx_tlv_process =
 	tx_ops->cfr_tx_ops.cfr_rx_tlv_process =
 		target_if_cfr_rx_tlv_process;
 		target_if_cfr_rx_tlv_process;
+	tx_ops->cfr_tx_ops.cfr_update_global_cfg =
+		target_if_cfr_update_global_cfg;
 }
 }
 #else
 #else
 void target_if_enh_cfr_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
 void target_if_enh_cfr_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)

+ 81 - 16
target_if/cfr/src/target_if_cfr_6018.c

@@ -1389,20 +1389,20 @@ static os_timer_func(lut_ageout_timer_task)
 		return;
 		return;
 	}
 	}
 
 
+	cur_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
+
 	for (i = 0; i < NUM_LUT_ENTRIES; i++) {
 	for (i = 0; i < NUM_LUT_ENTRIES; i++) {
 		lut = get_lut_entry(pcfr, i);
 		lut = get_lut_entry(pcfr, i);
 		if (!lut)
 		if (!lut)
 			continue;
 			continue;
 
 
-		cur_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
-
 		if (lut->dbr_recv && !lut->tx_recv) {
 		if (lut->dbr_recv && !lut->tx_recv) {
 			diff = cur_tstamp - lut->dbr_tstamp;
 			diff = cur_tstamp - lut->dbr_tstamp;
 			if (diff > LUT_AGE_THRESHOLD) {
 			if (diff > LUT_AGE_THRESHOLD) {
 				cfr_debug("<%d>TXRX event not received for "
 				cfr_debug("<%d>TXRX event not received for "
-					"%llu ms, release lut entry : "
-					"dma_addr = 0x%pK\n", i, diff,
-					(void *)((uintptr_t)lut->dbr_address));
+					  "%llu ms, release lut entry : "
+					  "dma_addr = 0x%pK\n", i, diff,
+					  (void *)((uintptr_t)lut->dbr_address));
 				target_if_dbr_buf_release(pdev, DBR_MODULE_CFR,
 				target_if_dbr_buf_release(pdev, DBR_MODULE_CFR,
 							  lut->dbr_address,
 							  lut->dbr_address,
 							  i, 0);
 							  i, 0);
@@ -1422,19 +1422,16 @@ static os_timer_func(lut_ageout_timer_task)
  * entries
  * entries
  * @pdev: pointer to pdev object
  * @pdev: pointer to pdev object
  *
  *
- * Return: Success/Failure status
+ * Return: None
  */
  */
-QDF_STATUS target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
+void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
 {
 {
 	struct pdev_cfr *pcfr;
 	struct pdev_cfr *pcfr;
 
 
 	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 (pcfr->lut_timer_init)
 	if (pcfr->lut_timer_init)
 		qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
 		qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
-
-	return QDF_STATUS_SUCCESS;
 }
 }
 
 
 /**
 /**
@@ -1442,19 +1439,83 @@ QDF_STATUS target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
  * entries
  * entries
  * @pdev: pointer to pdev object
  * @pdev: pointer to pdev object
  *
  *
- * Return: Success/Failure status
+ * Return: None
  */
  */
-QDF_STATUS target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
+void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
 {
 {
 	struct pdev_cfr *pcfr;
 	struct pdev_cfr *pcfr;
 
 
 	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 (pcfr->lut_timer_init)
 	if (pcfr->lut_timer_init)
 		qdf_timer_stop(&pcfr->lut_age_timer);
 		qdf_timer_stop(&pcfr->lut_age_timer);
+}
 
 
-	return QDF_STATUS_SUCCESS;
+/**
+ * target_if_cfr_update_global_cfg() - Update global config after a successful
+ * commit
+ * @pdev: pointer to pdev object
+ *
+ * Return: None
+ */
+void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev)
+{
+	int grp_id;
+	struct pdev_cfr *pcfr;
+	struct ta_ra_cfr_cfg *curr_cfg = NULL;
+	struct ta_ra_cfr_cfg *glbl_cfg = NULL;
+	unsigned long *modified_in_this_session;
+
+	pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
+						     WLAN_UMAC_COMP_CFR);
+	modified_in_this_session =
+		(unsigned long *)&pcfr->rcc_param.modified_in_curr_session;
+
+	for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
+		if (qdf_test_bit(grp_id, modified_in_this_session)) {
+			/* Populating global config based on user's input */
+			glbl_cfg = &pcfr->global[grp_id];
+			curr_cfg = &pcfr->rcc_param.curr[grp_id];
+
+			if (curr_cfg->valid_ta)
+				qdf_mem_copy(glbl_cfg->tx_addr,
+					     curr_cfg->tx_addr,
+					     QDF_MAC_ADDR_SIZE);
+
+			if (curr_cfg->valid_ra)
+				qdf_mem_copy(glbl_cfg->rx_addr,
+					     curr_cfg->rx_addr,
+					     QDF_MAC_ADDR_SIZE);
+
+			if (curr_cfg->valid_ta_mask)
+				qdf_mem_copy(glbl_cfg->tx_addr_mask,
+					     curr_cfg->tx_addr_mask,
+					     QDF_MAC_ADDR_SIZE);
+
+			if (curr_cfg->valid_ra_mask)
+				qdf_mem_copy(glbl_cfg->rx_addr_mask,
+					     curr_cfg->rx_addr_mask,
+					     QDF_MAC_ADDR_SIZE);
+
+			if (curr_cfg->valid_bw_mask)
+				glbl_cfg->bw = curr_cfg->bw;
+
+			if (curr_cfg->valid_nss_mask)
+				glbl_cfg->nss = curr_cfg->nss;
+
+			if (curr_cfg->valid_mgmt_subtype)
+				glbl_cfg->mgmt_subtype_filter =
+					curr_cfg->mgmt_subtype_filter;
+
+			if (curr_cfg->valid_ctrl_subtype)
+				glbl_cfg->ctrl_subtype_filter =
+					curr_cfg->ctrl_subtype_filter;
+
+			if (curr_cfg->valid_data_subtype)
+				glbl_cfg->data_subtype_filter =
+					curr_cfg->data_subtype_filter;
+		}
+	}
 }
 }
 
 
 /**
 /**
@@ -1505,10 +1566,14 @@ QDF_STATUS cfr_6018_init_pdev(struct wlan_objmgr_psoc *psoc,
 					   true, MAX_RESET_CFG_ENTRY);
 					   true, MAX_RESET_CFG_ENTRY);
 
 
 	status = target_if_cfr_config_rcc(pdev, &pcfr->rcc_param);
 	status = target_if_cfr_config_rcc(pdev, &pcfr->rcc_param);
-	if (status != QDF_STATUS_SUCCESS) {
-		cfr_err("Failed sending WMI to configure default values\n");
+	if (status == QDF_STATUS_SUCCESS) {
+		/* Update global configuration */
+		target_if_cfr_update_global_cfg(pdev);
+	} else {
+		cfr_err("Sending WMI to configure default has failed\n");
 		return status;
 		return status;
 	}
 	}
+
 	pcfr->rcc_param.modified_in_curr_session = 0;
 	pcfr->rcc_param.modified_in_curr_session = 0;
 
 
 	pcfr->cfr_max_sta_count = MAX_CFR_ENABLED_CLIENTS;
 	pcfr->cfr_max_sta_count = MAX_CFR_ENABLED_CLIENTS;

+ 10 - 4
umac/cfr/dispatcher/inc/wlan_cfr_tgt_api.h

@@ -123,18 +123,18 @@ QDF_STATUS tgt_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
  * entries
  * entries
  * @pdev: pointer to pdev_object
  * @pdev: pointer to pdev_object
  *
  *
- * Return: succcess / failure
+ * Return: None
  */
  */
-QDF_STATUS tgt_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
+void tgt_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
 
 
 /**
 /**
  * tgt_cfr_stop_lut_age_timer() - API to stop timer to flush aged out LUT
  * tgt_cfr_stop_lut_age_timer() - API to stop timer to flush aged out LUT
  * entries
  * entries
  * @pdev: pointer to pdev_object
  * @pdev: pointer to pdev_object
  *
  *
- * Return: succcess / failure
+ * Return: None
  */
  */
-QDF_STATUS tgt_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
+void tgt_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
 
 
 /**
 /**
  * tgt_cfr_default_ta_ra_cfg() - API to configure default values in TA_RA mode
  * tgt_cfr_default_ta_ra_cfg() - API to configure default values in TA_RA mode
@@ -159,5 +159,11 @@ void tgt_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev);
  * @nbuf: pointer to cdp_rx_indication_ppdu
  * @nbuf: pointer to cdp_rx_indication_ppdu
  */
  */
 void tgt_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
 void tgt_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
+
+/**
+ * tgt_cfr_update_global_cfg() - Update global config after successful commit
+ * @pdev: pointer to pdev_object
+ */
+void tgt_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev);
 #endif
 #endif
 #endif
 #endif

+ 29 - 18
umac/cfr/dispatcher/src/wlan_cfr_tgt_api.c

@@ -201,40 +201,36 @@ tgt_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
 	return status;
 	return status;
 }
 }
 
 
-QDF_STATUS
-tgt_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
+void tgt_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
 {
 {
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
 	struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
 	struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
 	struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
 
 
+	if (!psoc) {
+		cfr_err("Invalid PSOC: Flush LUT Timer cannot be started\n");
+		return;
+	}
+
 	cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
 	cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
 
 
 	if (cfr_tx_ops->cfr_start_lut_timer)
 	if (cfr_tx_ops->cfr_start_lut_timer)
-		status = cfr_tx_ops->cfr_start_lut_timer(pdev);
-
-	if (status != QDF_STATUS_SUCCESS)
-		cfr_err("Error occurred with exit code %d\n", status);
-
-	return status;
+		cfr_tx_ops->cfr_start_lut_timer(pdev);
 }
 }
 
 
-QDF_STATUS
-tgt_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
+void tgt_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
 {
 {
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
 	struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
 	struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
 	struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
 
 
+	if (!psoc) {
+		cfr_err("Invalid PSOC: Flush LUT Timer cannot be stopped\n");
+		return;
+	}
+
 	cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
 	cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
 
 
 	if (cfr_tx_ops->cfr_stop_lut_timer)
 	if (cfr_tx_ops->cfr_stop_lut_timer)
-		status = cfr_tx_ops->cfr_stop_lut_timer(pdev);
-
-	if (status != QDF_STATUS_SUCCESS)
-		cfr_err("Error occurred with exit code %d\n", status);
-
-	return status;
+		cfr_tx_ops->cfr_stop_lut_timer(pdev);
 }
 }
 
 
 void tgt_cfr_default_ta_ra_cfg(struct wlan_objmgr_pdev *pdev,
 void tgt_cfr_default_ta_ra_cfg(struct wlan_objmgr_pdev *pdev,
@@ -273,4 +269,19 @@ void tgt_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
 		cfr_tx_ops->cfr_rx_tlv_process(pdev, nbuf);
 		cfr_tx_ops->cfr_rx_tlv_process(pdev, nbuf);
 }
 }
 
 
+void tgt_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev)
+{
+	struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
+	struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
+
+	if (!psoc) {
+		cfr_err("Invalid PSOC:Cannot update global config.\n");
+		return;
+	}
+
+	cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
+
+	if (cfr_tx_ops->cfr_update_global_cfg)
+		cfr_tx_ops->cfr_update_global_cfg(pdev);
+}
 #endif
 #endif

+ 17 - 67
umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c

@@ -604,59 +604,17 @@ QDF_STATUS ucfg_cfr_set_tara_config(struct wlan_objmgr_vdev *vdev,
 	return status;
 	return status;
 }
 }
 
 
-void cfr_update_global_cfg(struct pdev_cfr *pdev_cfrobj)
+static bool cfr_is_filter_enabled(struct cfr_rcc_param *rcc_param)
 {
 {
-	int grp_id;
-	struct ta_ra_cfr_cfg *curr_cfg = NULL;
-	struct ta_ra_cfr_cfg *glbl_cfg = NULL;
-	unsigned long *modified_in_this_session =
-	 (unsigned long *)&pdev_cfrobj->rcc_param.modified_in_curr_session;
-
-	for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
-		if (qdf_test_bit(grp_id, modified_in_this_session)) {
-			/* Populating global config based on user's input */
-			glbl_cfg = &pdev_cfrobj->global[grp_id];
-			curr_cfg = &pdev_cfrobj->rcc_param.curr[grp_id];
-
-			if (curr_cfg->valid_ta)
-				qdf_mem_copy(glbl_cfg->tx_addr,
-					     curr_cfg->tx_addr,
-					     QDF_MAC_ADDR_SIZE);
-
-			if (curr_cfg->valid_ra)
-				qdf_mem_copy(glbl_cfg->rx_addr,
-					     curr_cfg->rx_addr,
-					     QDF_MAC_ADDR_SIZE);
-
-			if (curr_cfg->valid_ta_mask)
-				qdf_mem_copy(glbl_cfg->tx_addr_mask,
-					     curr_cfg->tx_addr_mask,
-					     QDF_MAC_ADDR_SIZE);
-
-			if (curr_cfg->valid_ra_mask)
-				qdf_mem_copy(glbl_cfg->rx_addr_mask,
-					     curr_cfg->rx_addr_mask,
-					     QDF_MAC_ADDR_SIZE);
-
-			if (curr_cfg->valid_bw_mask)
-				glbl_cfg->bw = curr_cfg->bw;
-
-			if (curr_cfg->valid_nss_mask)
-				glbl_cfg->nss = curr_cfg->nss;
-
-			if (curr_cfg->valid_mgmt_subtype)
-				glbl_cfg->mgmt_subtype_filter =
-					curr_cfg->mgmt_subtype_filter;
-
-			if (curr_cfg->valid_ctrl_subtype)
-				glbl_cfg->ctrl_subtype_filter =
-					curr_cfg->ctrl_subtype_filter;
-
-			if (curr_cfg->valid_data_subtype)
-				glbl_cfg->data_subtype_filter =
-					curr_cfg->data_subtype_filter;
-		}
-	}
+	if (rcc_param->m_directed_ftm ||
+	    rcc_param->m_all_ftm_ack ||
+	    rcc_param->m_ndpa_ndp_directed ||
+	    rcc_param->m_ndpa_ndp_all ||
+	    rcc_param->m_ta_ra_filter ||
+	    rcc_param->m_all_packet)
+		return true;
+	else
+		return false;
 }
 }
 
 
 QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev)
 QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev)
@@ -670,6 +628,11 @@ QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev)
 	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;
+	if (!cfr_is_filter_enabled(&pcfr->rcc_param)) {
+		cfr_err(" All RCC modes are disabled.\n");
+		wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
+		return status;
+	}
 
 
 	cfr_err("CAPTURE MODE:\n");
 	cfr_err("CAPTURE MODE:\n");
 
 
@@ -886,19 +849,6 @@ void cfr_set_filter(struct wlan_objmgr_pdev *pdev,
 		       filter_val);
 		       filter_val);
 }
 }
 
 
-static bool cfr_is_filter_enabled(struct cfr_rcc_param *rcc_param)
-{
-	if (rcc_param->m_directed_ftm ||
-	    rcc_param->m_all_ftm_ack ||
-	    rcc_param->m_ndpa_ndp_directed ||
-	    rcc_param->m_ndpa_ndp_all ||
-	    rcc_param->m_ta_ra_filter ||
-	    rcc_param->m_all_packet)
-		return true;
-	else
-		return false;
-}
-
 /*
 /*
  * With the initiation of commit command, this handler will be triggered.
  * With the initiation of commit command, this handler will be triggered.
  *
  *
@@ -1010,8 +960,8 @@ QDF_STATUS ucfg_cfr_committed_rcc_config(struct wlan_objmgr_vdev *vdev)
 	status = tgt_cfr_config_rcc(pdev, &pcfr->rcc_param);
 	status = tgt_cfr_config_rcc(pdev, &pcfr->rcc_param);
 	if (status == QDF_STATUS_SUCCESS) {
 	if (status == QDF_STATUS_SUCCESS) {
 		cfr_info("CFR commit done\n");
 		cfr_info("CFR commit done\n");
-		/* Update glbl cfg */
-		cfr_update_global_cfg(pcfr);
+		/* Update global config */
+		tgt_cfr_update_global_cfg(pdev);
 
 
 		/* Bring curr_cfg to default state for next commit session */
 		/* Bring curr_cfg to default state for next commit session */
 		tgt_cfr_default_ta_ra_cfg(pdev, &pcfr->rcc_param,
 		tgt_cfr_default_ta_ra_cfg(pdev, &pcfr->rcc_param,