Merge "qcacmn: Free events logs list of wmi handle"
diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c
index 2eac27d..2d9efb7 100644
--- a/dp/wifi3.0/dp_tx.c
+++ b/dp/wifi3.0/dp_tx.c
@@ -1439,10 +1439,6 @@
 	if (qdf_unlikely(vdev->mesh_vdev))
 		dp_tx_extract_mesh_meta_data(vdev, nbuf, &msdu_info);
 
-	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
-			"%s , skb %0x:%0x:%0x:%0x:%0x:%0x\n",
-			__func__, nbuf->data[0], nbuf->data[1], nbuf->data[2],
-			nbuf->data[3], nbuf->data[4], nbuf->data[5]);
 	/*
 	 * Get HW Queue to use for this frame.
 	 * TCL supports upto 4 DMA rings, out of which 3 rings are
diff --git a/umac/dfs/core/src/dfs.h b/umac/dfs/core/src/dfs.h
index 3bf04ed..c656e4b 100644
--- a/umac/dfs/core/src/dfs.h
+++ b/umac/dfs/core/src/dfs.h
@@ -1406,12 +1406,18 @@
 void dfs_get_radars(struct wlan_dfs *dfs);
 
 /**
- * dfs_attach() - Allocates memory for wlan_dfs members.
+ * dfs_attach() - Wrapper function to allocate memory for wlan_dfs members.
  * @dfs: Pointer to wlan_dfs structure.
  */
 int dfs_attach(struct wlan_dfs *dfs);
 
 /**
+ * dfs_main_attach() - Allocates memory for wlan_dfs members.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+int dfs_main_attach(struct wlan_dfs *dfs);
+
+/**
  * dfs_create_object() - Creates DFS object.
  * @dfs: Pointer to wlan_dfs structure.
  */
@@ -1424,12 +1430,6 @@
 void dfs_destroy_object(struct wlan_dfs *dfs);
 
 /**
- * nif_dfs_reset() - DFS reset.
- * @dfs: Pointer to wlan_dfs structure.
- */
-void nif_dfs_reset(struct wlan_dfs *dfs);
-
-/**
  * dfs_random_channel() - Function to choose the random channel from the current
  *                        channel list.
  * @dfs: Pointer to wlan_dfs structure.
@@ -1442,22 +1442,16 @@
 		uint8_t skip_curchan);
 
 /**
- * sif_dfs_detach() - DFS detach.
+ * dfs_detach() - Wrapper function to free dfs variables.
  * @dfs: Pointer to wlan_dfs structure.
  */
-void sif_dfs_detach(struct wlan_dfs *dfs);
+void dfs_detach(struct wlan_dfs *dfs);
 
 /**
- * nif_dfs_detach() - DFS detach
+ * dfs_main_detach() - Free dfs variables.
  * @dfs: Pointer to wlan_dfs structure.
  */
-void nif_dfs_detach(struct wlan_dfs *dfs);
-
-/**
- * nif_dfs_attach() - DFS attach function.
- * @dfs: Pointer to wlan_dfs structure.
- **/
-void nif_dfs_attach(struct wlan_dfs *dfs);
+void dfs_main_detach(struct wlan_dfs *dfs);
 
 /**
  * dfs_cac_valid_reset() - Cancels the dfs_cac_valid_timer timer.
@@ -1647,6 +1641,36 @@
 		void *data);
 
 /**
+ * dfs_cac_timer_init() - Initialize cac timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_cac_timer_init(struct wlan_dfs *dfs);
+
+/**
+ * dfs_cac_attach() - Initialize dfs cac variables.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_cac_attach(struct wlan_dfs *dfs);
+
+/**
+ * dfs_cac_timer_reset() - Cancel dfs cac timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_cac_timer_reset(struct wlan_dfs *dfs);
+
+/**
+ * dfs_nol_timer_init() - Initialize NOL timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_nol_timer_init(struct wlan_dfs *dfs);
+
+/**
+ * dfs_nol_attach() - Initialize NOL variables.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_nol_attach(struct wlan_dfs *dfs);
+
+/**
  * dfs_print_nolhistory() - Print NOL history.
  * @dfs: Pointer to wlan_dfs structure.
  */
@@ -1881,4 +1905,21 @@
 		int fundamentalpri
 		);
 
+/**
+ * dfs_main_timer_init() - Initialize dfs timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_main_timer_init(struct wlan_dfs *dfs);
+
+/**
+ * dfs_main_timer_reset() - Stop dfs timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_main_timer_reset(struct wlan_dfs *dfs);
+
+/**
+ * dfs_stop() - Clear dfs timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+void dfs_stop(struct wlan_dfs *dfs);
 #endif  /* _DFS_H_ */
diff --git a/umac/dfs/core/src/dfs_zero_cac.h b/umac/dfs/core/src/dfs_zero_cac.h
index e729299..8c16a11 100644
--- a/umac/dfs/core/src/dfs_zero_cac.h
+++ b/umac/dfs/core/src/dfs_zero_cac.h
@@ -54,6 +54,12 @@
 };
 
 /**
+ * dfs_zero_cac_timer_init() - Initialize zero-cac timers
+ * @dfs: Pointer to DFS structure.
+ */
+void dfs_zero_cac_timer_init(struct wlan_dfs *dfs);
+
+/**
  * dfs_print_precaclists() - Print precac list.
  * @dfs: Pointer to wlan_dfs structure.
  */
@@ -80,6 +86,12 @@
 void dfs_deinit_precac_list(struct wlan_dfs *dfs);
 
 /**
+ * dfs_zero_cac_detach() - Free zero_cac memory.
+ * @dfs: Pointer to wlan_dfs dtructure.
+ */
+void dfs_zero_cac_detach(struct wlan_dfs *dfs);
+
+/**
  * dfs_init_precac_list() - Init precac list.
  * @dfs: Pointer to wlan_dfs dtructure.
  */
@@ -100,8 +112,8 @@
 void dfs_cancel_precac_timer(struct wlan_dfs *dfs);
 
 /**
- * dfs_zero_cac_attach() - Initializes Zero cac DFS variables.
- * @dfs: Pointer to wlan_dfs structure.
+ * dfs_zero_cac_attach() - Initialize dfs zerocac variables.
+ * @dfs: Pointer to DFS structure.
  */
 void dfs_zero_cac_attach(struct wlan_dfs *dfs);
 
@@ -208,12 +220,6 @@
 void dfs_zero_cac_reset(struct wlan_dfs *dfs);
 
 /**
- * dfs_zero_cac_attach() - Initializes Zero cac DFS variables.
- * @dfs: Pointer to wlan_dfs structure.
- */
-void dfs_zero_cac_attach(struct wlan_dfs *dfs);
-
-/**
  * dfs_is_ht20_40_80_chan_in_precac_done_list() - Is precac done on a
  *                                                VHT20/40/80 channel.
  *@dfs: Pointer to wlan_dfs structure.
diff --git a/umac/dfs/core/src/filtering/dfs_process_phyerr.c b/umac/dfs/core/src/filtering/dfs_process_phyerr.c
index f47101e..feb2d28 100644
--- a/umac/dfs/core/src/filtering/dfs_process_phyerr.c
+++ b/umac/dfs/core/src/filtering/dfs_process_phyerr.c
@@ -810,7 +810,7 @@
 	}
 	if (!STAILQ_EMPTY(&dfs->dfs_radarq) && !dfs->wlan_radar_tasksched) {
 		dfs->wlan_radar_tasksched = 1;
-		OS_SET_TIMER(&dfs->wlan_dfs_task_timer, 0);
+		qdf_timer_mod(&dfs->wlan_dfs_task_timer, 0);
 	}
 #undef EXT_CH_RADAR_FOUND
 #undef PRI_CH_RADAR_FOUND
diff --git a/umac/dfs/core/src/filtering/dfs_radar.c b/umac/dfs/core/src/filtering/dfs_radar.c
index 50a12da..0813285 100644
--- a/umac/dfs/core/src/filtering/dfs_radar.c
+++ b/umac/dfs/core/src/filtering/dfs_radar.c
@@ -563,7 +563,7 @@
 		dfs->wlan_dfstest = 1;
 		dfs->wlan_dfstest_ieeechan = dfs->dfs_curchan->dfs_ch_ieee;
 		dfs->wlan_dfstesttime = 1;   /* 1ms */
-		OS_SET_TIMER(&dfs->wlan_dfstesttimer,
+		qdf_timer_mod(&dfs->wlan_dfstesttimer,
 				dfs->wlan_dfstesttime);
 	}
 
diff --git a/umac/dfs/core/src/misc/dfs.c b/umac/dfs/core/src/misc/dfs.c
index e3cfbf6..f44ab44 100644
--- a/umac/dfs/core/src/misc/dfs.c
+++ b/umac/dfs/core/src/misc/dfs.c
@@ -94,6 +94,21 @@
 	return (int)dfs->dfs_proc_phyerr;
 }
 
+void dfs_main_timer_init(struct wlan_dfs *dfs)
+{
+	qdf_timer_init(NULL,
+			&(dfs->wlan_dfs_task_timer),
+			dfs_task,
+			(void *)(dfs),
+			QDF_TIMER_TYPE_WAKE_APPS);
+
+	qdf_timer_init(NULL,
+			&(dfs->wlan_dfstesttimer),
+			dfs_testtimer_task,
+			(void *)dfs,
+			QDF_TIMER_TYPE_WAKE_APPS);
+}
+
 int dfs_create_object(struct wlan_dfs **dfs)
 {
 	*dfs = (struct wlan_dfs *)qdf_mem_malloc(sizeof(**dfs));
@@ -115,7 +130,7 @@
 	return 0;
 }
 
-int dfs_attach(struct wlan_dfs *dfs)
+int dfs_main_attach(struct wlan_dfs *dfs)
 {
 	int i, n;
 	struct wlan_dfs_radar_tab_info radar_info;
@@ -170,18 +185,11 @@
 	dfs->dfs_event_log_on = 1;
 	DFS_PRINTK("%s: event log enabled by default\n", __func__);
 
+	dfs->dfs_enable = 1;
+
 	/*Verify : Passing NULL to qdf_timer_init().*/
-	qdf_timer_init(NULL,
-			&(dfs->wlan_dfs_task_timer),
-			dfs_task,
-			(void *)(dfs),
-			QDF_TIMER_TYPE_WAKE_APPS);
-	qdf_timer_init(NULL,
-			&(dfs->wlan_dfstesttimer),
-			dfs_testtimer_task,
-			(void *)dfs,
-			QDF_TIMER_TYPE_WAKE_APPS);
-	dfs->wlan_dfs_cac_time = WLAN_DFS_WAIT_MS;
+	dfs_main_timer_init(dfs);
+
 	WLAN_DFSQ_LOCK_INIT(dfs);
 	STAILQ_INIT(&dfs->dfs_radarq);
 	WLAN_ARQ_LOCK_INIT(dfs);
@@ -303,6 +311,41 @@
 	return 1;
 }
 
+int dfs_attach(struct wlan_dfs *dfs)
+{
+	int ret;
+
+	ret = dfs_main_attach(dfs);
+	if (ret)
+		return ret;
+
+	dfs_cac_attach(dfs);
+	dfs_zero_cac_attach(dfs);
+	dfs_nol_attach(dfs);
+
+	return 0;
+}
+
+void dfs_stop(struct wlan_dfs *dfs)
+{
+	dfs_init_precac_list(dfs);
+	dfs_nol_timer_cleanup(dfs);
+	dfs_clear_nolhistory(dfs);
+}
+
+void dfs_main_timer_reset(struct wlan_dfs *dfs)
+{
+	if (dfs->wlan_radar_tasksched) {
+		qdf_timer_stop(&dfs->wlan_dfs_task_timer);
+		dfs->wlan_radar_tasksched = 0;
+	}
+
+	if (dfs->wlan_dfstest) {
+		qdf_timer_stop(&dfs->wlan_dfstesttimer);
+		dfs->wlan_dfstest = 0;
+	}
+}
+
 void dfs_reset(struct wlan_dfs *dfs)
 {
 	if (dfs == NULL) {
@@ -311,45 +354,25 @@
 		return;
 	}
 
-	if (dfs->wlan_radar_tasksched) {
-		qdf_timer_stop(&dfs->wlan_dfs_task_timer);
-		dfs->wlan_radar_tasksched = 0;
-	}
-
-	if (dfs->wlan_dfstest) {
-		qdf_timer_stop(&dfs->wlan_dfstesttimer);
-		dfs->wlan_dfstest = 0;
-	}
-
-	dfs_nol_timer_cleanup(dfs);
-	dfs_clear_nolhistory(dfs);
+	dfs_cac_timer_reset(dfs);
+	dfs_zero_cac_reset(dfs);
+	dfs_main_timer_reset(dfs);
 }
 
-void sif_dfs_detach(struct wlan_dfs *dfs)
+void dfs_main_detach(struct wlan_dfs *dfs)
 {
 	int n, empty;
 
-	if (dfs == NULL) {
-		DFS_DPRINTK(dfs, WLAN_DEBUG_DFS1,
-				"%s: dfs is NULL\n", __func__);
+	if (!dfs->dfs_enable)
 		return;
-	}
+
+	dfs->dfs_enable = 0;
 
 	if (dfs->dfs_curchan != NULL) {
-		OS_FREE(dfs->dfs_curchan);
+		qdf_mem_free(dfs->dfs_curchan);
 		dfs->dfs_curchan = NULL;
 	}
 
-	if (dfs->wlan_radar_tasksched) {
-		qdf_timer_stop(&dfs->wlan_dfs_task_timer);
-		dfs->wlan_radar_tasksched = 0;
-	}
-
-	if (dfs->wlan_dfstest) {
-		qdf_timer_stop(&dfs->wlan_dfstesttimer);
-		dfs->wlan_dfstest = 0;
-	}
-
 	dfs_reset_radarq(dfs);
 	dfs_reset_alldelaylines(dfs);
 
@@ -394,7 +417,12 @@
 		qdf_mem_free(dfs->events);
 		dfs->events = NULL;
 	}
-	dfs_nol_timer_cleanup(dfs);
+}
+
+void dfs_detach(struct wlan_dfs *dfs)
+{
+	dfs_main_detach(dfs);
+	dfs_zero_cac_detach(dfs);
 }
 
 void dfs_destroy_object(struct wlan_dfs *dfs)
@@ -894,7 +922,7 @@
 	case DFS_BANGRADAR:
 		dfs->dfs_bangradar = 1;
 		dfs->wlan_radar_tasksched = 1;
-		OS_SET_TIMER(&dfs->wlan_dfs_task_timer, 0);
+		qdf_timer_mod(&dfs->wlan_dfs_task_timer, 0);
 		error = 0;
 		break;
 	case DFS_SHOW_PRECAC_LISTS:
@@ -906,7 +934,7 @@
 	case DFS_SECOND_SEGMENT_BANGRADAR:
 		dfs->dfs_second_segment_bangradar = 1;
 		dfs->wlan_radar_tasksched = 1;
-		OS_SET_TIMER(&dfs->wlan_dfs_task_timer, 0);
+		qdf_timer_mod(&dfs->wlan_dfs_task_timer, 0);
 		error = 0;
 		break;
 	default:
@@ -1024,35 +1052,6 @@
 	return 1;
 }
 
-void dfs_getnol(struct wlan_dfs *dfs, void *dfs_nolinfo)
-{
-	struct dfsreq_nolinfo *nolinfo = (struct dfsreq_nolinfo *)dfs_nolinfo;
-
-	dfs_get_nol(dfs, nolinfo->dfs_nol, &(nolinfo->dfs_ch_nchans));
-}
-
-void dfs_clear_nolhistory(struct wlan_dfs *dfs)
-{
-	/* We should have a dfs_clear_nolhistory API from Regdomain. */
-	struct dfs_ieee80211_channel *c, lc;
-	int i;
-	int nchans = 0;
-
-	c = &lc;
-	dfs_mlme_get_dfs_ch_nchans(dfs->dfs_pdev_obj, &nchans);
-	for (i = 0; i < nchans; i++) {
-		dfs_mlme_get_dfs_ch_channels(dfs->dfs_pdev_obj,
-				&(c->dfs_ch_freq),
-				&(c->dfs_ch_flags),
-				&(c->dfs_ch_flagext),
-				&(c->dfs_ch_ieee),
-				&(c->dfs_ch_vhtop_ch_freq_seg1),
-				&(c->dfs_ch_vhtop_ch_freq_seg2),
-				i);
-		IEEE80211_CHAN_CLR_HISTORY_RADAR(c);
-	}
-}
-
 void dfs_set_current_channel(struct wlan_dfs *dfs,
 		uint16_t dfs_ch_freq,
 		uint32_t dfs_ch_flags,
diff --git a/umac/dfs/core/src/misc/dfs_cac.c b/umac/dfs/core/src/misc/dfs_cac.c
index ca71e9b..14dba0d 100644
--- a/umac/dfs/core/src/misc/dfs_cac.c
+++ b/umac/dfs/core/src/misc/dfs_cac.c
@@ -34,8 +34,6 @@
 #include "wlan_dfs_mlme_api.h"
 #include "../dfs_internal.h"
 
-static int ieee80211_nol_timeout = 30*60; /* 30 minutes */
-#define NOL_TIMEOUT (ieee80211_nol_timeout*1000)
 #define IS_CHANNEL_WEATHER_RADAR(freq) ((freq >= 5600) && (freq <= 5650))
 #define ADJACENT_WEATHER_RADAR_CHANNEL   5580
 #define CH100_START_FREQ                 5490
@@ -64,23 +62,6 @@
 	return 0;
 }
 
-void nif_dfs_detach(struct wlan_dfs *dfs)
-{
-	if (!dfs->dfs_enable)
-		return;
-
-	dfs->dfs_enable = 0;
-	nif_dfs_reset(dfs);
-	dfs_deinit_precac_list(dfs);
-}
-
-void nif_dfs_reset(struct wlan_dfs *dfs)
-{
-	qdf_timer_stop(&dfs->dfs_cac_timer);
-	dfs->dfs_cac_timeout_override = -1;
-	dfs_zero_cac_reset(dfs);
-}
-
 void dfs_cac_valid_reset(struct wlan_dfs *dfs,
 		uint8_t prevchan_ieee,
 		uint32_t prevchan_flags)
@@ -167,7 +148,7 @@
 		 */
 		if (dfs->dfs_cac_valid_time) {
 			dfs->dfs_cac_valid = 1;
-			OS_SET_TIMER(&dfs->dfs_cac_valid_timer,
+			qdf_timer_mod(&dfs->dfs_cac_valid_timer,
 					dfs->dfs_cac_valid_time * 1000);
 		}
 	}
@@ -184,6 +165,36 @@
 	}
 }
 
+void dfs_cac_timer_init(struct wlan_dfs *dfs)
+{
+	qdf_timer_init(NULL,
+			&(dfs->dfs_cac_timer),
+			dfs_cac_timeout,
+			(void *)(dfs),
+			QDF_TIMER_TYPE_WAKE_APPS);
+
+	qdf_timer_init(NULL,
+			&(dfs->dfs_cac_valid_timer),
+			dfs_cac_valid_timeout,
+			(void *)(dfs),
+			QDF_TIMER_TYPE_WAKE_APPS);
+}
+
+void dfs_cac_attach(struct wlan_dfs *dfs)
+{
+	dfs->dfs_cac_timeout_override = -1;
+	dfs->wlan_dfs_cac_time = WLAN_DFS_WAIT_MS;
+	dfs_cac_timer_init(dfs);
+}
+
+void dfs_cac_timer_reset(struct wlan_dfs *dfs)
+{
+	qdf_timer_stop(&dfs->dfs_cac_timer);
+	dfs_get_override_cac_timeout(dfs,
+			&(dfs->dfs_cac_timeout_override));
+
+}
+
 int dfs_is_ap_cac_timer_running(struct wlan_dfs *dfs)
 {
 	return dfs->dfs_cac_timer_running;
@@ -191,7 +202,7 @@
 
 void dfs_start_cac_timer(struct wlan_dfs *dfs)
 {
-	OS_SET_TIMER(&dfs->dfs_cac_timer,
+	qdf_timer_mod(&dfs->dfs_cac_timer,
 			dfs_mlme_get_cac_timeout(dfs->dfs_pdev_obj,
 				dfs->dfs_curchan->dfs_ch_freq,
 				dfs->dfs_curchan->dfs_ch_vhtop_ch_freq_seg2,
@@ -225,87 +236,6 @@
 		__func__, dfs->dfs_curchan->dfs_ch_freq, phyerr);
 }
 
-/**
- * dfs_nol_timeout() - NOL timeout function.
- *
- * Clears the IEEE80211_CHAN_DFS_RADAR_FOUND flag for the NOL timeout channel.
- */
-static os_timer_func(dfs_nol_timeout)
-{
-	struct dfs_ieee80211_channel *c = NULL, lc;
-	unsigned long oldest, now;
-	struct wlan_dfs *dfs = NULL;
-	int i;
-	int nchans = 0;
-
-	c = &lc;
-
-	OS_GET_TIMER_ARG(dfs, struct wlan_dfs *);
-	dfs_mlme_get_dfs_ch_nchans(dfs->dfs_pdev_obj, &nchans);
-
-	now = oldest = qdf_system_ticks();
-	for (i = 0; i < nchans; i++) {
-		dfs_mlme_get_dfs_ch_channels(dfs->dfs_pdev_obj,
-				&(c->dfs_ch_freq),
-				&(c->dfs_ch_flags),
-				&(c->dfs_ch_flagext),
-				&(c->dfs_ch_ieee),
-				&(c->dfs_ch_vhtop_ch_freq_seg1),
-				&(c->dfs_ch_vhtop_ch_freq_seg2),
-				i);
-		if (IEEE80211_IS_CHAN_RADAR(c)) {
-			if (qdf_system_time_after_eq(now,
-				dfs->dfs_nol_event[i] + NOL_TIMEOUT)) {
-				c->dfs_ch_flagext &=
-					~IEEE80211_CHAN_DFS_RADAR_FOUND;
-				if (c->dfs_ch_flags &
-						IEEE80211_CHAN_DFS_RADAR) {
-					/*
-					 * NB: do this here so we get only one
-					 * msg instead of one for every channel
-					 * table entry.
-					 */
-					DFS_DPRINTK(dfs, WLAN_DEBUG_DFS,
-						"%s : radar on channel %u (%u MHz) cleared after timeout\n",
-						__func__,
-						c->dfs_ch_ieee,
-						c->dfs_ch_freq);
-				}
-			} else if (dfs->dfs_nol_event[i] < oldest)
-				oldest = dfs->dfs_nol_event[i];
-		}
-	}
-	if (oldest != now) {
-		/* Arrange to process next channel up for a status change. */
-		OS_SET_TIMER(&dfs->dfs_nol_timer, NOL_TIMEOUT -
-				qdf_system_ticks_to_msecs(qdf_system_ticks()));
-	}
-}
-
-void nif_dfs_attach(struct wlan_dfs *dfs)
-{
-	dfs->dfs_enable = 1;
-	dfs->dfs_cac_timeout_override = -1;
-	dfs_zero_cac_attach(dfs);
-	qdf_timer_init(NULL,
-			&(dfs->dfs_cac_timer),
-			dfs_cac_timeout,
-			(void *)(dfs),
-			QDF_TIMER_TYPE_WAKE_APPS);
-
-	qdf_timer_init(NULL,
-			&(dfs->dfs_nol_timer),
-			dfs_nol_timeout,
-			(void *)(dfs),
-			QDF_TIMER_TYPE_WAKE_APPS);
-
-	qdf_timer_init(NULL,
-			&(dfs->dfs_cac_valid_timer),
-			dfs_cac_valid_timeout,
-			(void *)(dfs),
-			QDF_TIMER_TYPE_WAKE_APPS);
-}
-
 int dfs_random_channel(struct wlan_dfs *dfs,
 		uint8_t is_select_nondfs,
 		uint8_t skip_curchan)
diff --git a/umac/dfs/core/src/misc/dfs_nol.c b/umac/dfs/core/src/misc/dfs_nol.c
index dab7e7f..388babd 100644
--- a/umac/dfs/core/src/misc/dfs_nol.c
+++ b/umac/dfs/core/src/misc/dfs_nol.c
@@ -36,7 +36,78 @@
 #include <wlan_reg_services_api.h>
 #include <dfs_ioctl.h>
 
-/* for loop to traverse the channel list. */
+/**
+ * dfs_nol_timeout() - NOL timeout function.
+ *
+ * Clears the IEEE80211_CHAN_DFS_RADAR_FOUND flag for the NOL timeout channel.
+ */
+static os_timer_func(dfs_nol_timeout)
+{
+	struct dfs_ieee80211_channel *c = NULL, lc;
+	unsigned long oldest, now;
+	struct wlan_dfs *dfs = NULL;
+	int i;
+	int nchans = 0;
+
+	c = &lc;
+
+	OS_GET_TIMER_ARG(dfs, struct wlan_dfs *);
+	dfs_mlme_get_dfs_ch_nchans(dfs->dfs_pdev_obj, &nchans);
+
+	now = oldest = qdf_system_ticks();
+	for (i = 0; i < nchans; i++) {
+		dfs_mlme_get_dfs_ch_channels(dfs->dfs_pdev_obj,
+				&(c->dfs_ch_freq),
+				&(c->dfs_ch_flags),
+				&(c->dfs_ch_flagext),
+				&(c->dfs_ch_ieee),
+				&(c->dfs_ch_vhtop_ch_freq_seg1),
+				&(c->dfs_ch_vhtop_ch_freq_seg2),
+				i);
+		if (IEEE80211_IS_CHAN_RADAR(c)) {
+			if (qdf_system_time_after_eq(now,
+						dfs->dfs_nol_event[i] +
+						dfs_get_nol_timeout(dfs))) {
+				c->dfs_ch_flagext &=
+					~IEEE80211_CHAN_DFS_RADAR_FOUND;
+				if (c->dfs_ch_flags &
+						IEEE80211_CHAN_DFS_RADAR) {
+					/*
+					 * NB: do this here so we get only one
+					 * msg instead of one for every channel
+					 * table entry.
+					 */
+					DFS_DPRINTK(dfs, WLAN_DEBUG_DFS,
+						"%s : radar on channel %u (%u MHz) cleared after timeout\n",
+						__func__,
+						c->dfs_ch_ieee,
+						c->dfs_ch_freq);
+				}
+			} else if (dfs->dfs_nol_event[i] < oldest)
+				oldest = dfs->dfs_nol_event[i];
+		}
+	}
+	if (oldest != now) {
+		/* Arrange to process next channel up for a status change. */
+		qdf_timer_mod(&dfs->dfs_nol_timer,
+				dfs_get_nol_timeout(dfs) -
+				qdf_system_ticks_to_msecs(qdf_system_ticks()));
+	}
+}
+
+void dfs_nol_timer_init(struct wlan_dfs *dfs)
+{
+	qdf_timer_init(NULL,
+			&(dfs->dfs_nol_timer),
+			dfs_nol_timeout,
+			(void *)(dfs),
+			QDF_TIMER_TYPE_WAKE_APPS);
+}
+
+void dfs_nol_attach(struct wlan_dfs *dfs)
+{
+	dfs_nol_timer_init(dfs);
+}
 
 /**
  * dfs_nol_delete() - Delete the given frequency/chwidth from the NOL.
@@ -277,7 +348,7 @@
 				__func__, nol->nol_freq, nol->nol_chwidth);
 
 			qdf_timer_stop(&nol->nol_timer);
-			OS_SET_TIMER(&nol->nol_timer,
+			qdf_timer_mod(&nol->nol_timer,
 					dfs_nol_timeout * TIME_IN_MS);
 			return;
 		}
@@ -306,7 +377,7 @@
 	qdf_timer_init(NULL,
 			&elem->nol_timer, dfs_remove_from_nol,
 			elem, QDF_TIMER_TYPE_WAKE_APPS);
-	OS_SET_TIMER(&elem->nol_timer, dfs_nol_timeout * TIME_IN_MS);
+	qdf_timer_mod(&elem->nol_timer, dfs_nol_timeout * TIME_IN_MS);
 
 	/* Update the NOL counter. */
 	dfs->dfs_nol_count++;
@@ -435,3 +506,32 @@
 {
 	return dfs->wlan_dfs_nol_timeout;
 }
+
+void dfs_getnol(struct wlan_dfs *dfs, void *dfs_nolinfo)
+{
+	struct dfsreq_nolinfo *nolinfo = (struct dfsreq_nolinfo *)dfs_nolinfo;
+
+	dfs_get_nol(dfs, nolinfo->dfs_nol, &(nolinfo->dfs_ch_nchans));
+}
+
+void dfs_clear_nolhistory(struct wlan_dfs *dfs)
+{
+	/* We should have a dfs_clear_nolhistory API from Regdomain. */
+	struct dfs_ieee80211_channel *c, lc;
+	int i;
+	int nchans = 0;
+
+	c = &lc;
+	dfs_mlme_get_dfs_ch_nchans(dfs->dfs_pdev_obj, &nchans);
+	for (i = 0; i < nchans; i++) {
+		dfs_mlme_get_dfs_ch_channels(dfs->dfs_pdev_obj,
+				&(c->dfs_ch_freq),
+				&(c->dfs_ch_flags),
+				&(c->dfs_ch_flagext),
+				&(c->dfs_ch_ieee),
+				&(c->dfs_ch_vhtop_ch_freq_seg1),
+				&(c->dfs_ch_vhtop_ch_freq_seg2),
+				i);
+		IEEE80211_CHAN_CLR_HISTORY_RADAR(c);
+	}
+}
diff --git a/umac/dfs/core/src/misc/dfs_zero_cac.c b/umac/dfs/core/src/misc/dfs_zero_cac.c
index cd7903a..4e405a2 100644
--- a/umac/dfs/core/src/misc/dfs_zero_cac.c
+++ b/umac/dfs/core/src/misc/dfs_zero_cac.c
@@ -94,22 +94,10 @@
 #include "wlan_dfs_mlme_api.h"
 #include "../dfs_internal.h"
 
-static os_timer_func(dfs_precac_timeout);
-
-void dfs_zero_cac_attach(struct wlan_dfs *dfs)
-{
-	dfs->dfs_precac_timeout_override = -1;
-	dfs_init_precac_list(dfs);
-	qdf_timer_init(NULL,
-			&(dfs->dfs_precac_timer),
-			dfs_precac_timeout,
-			(void *) dfs,
-			QDF_TIMER_TYPE_WAKE_APPS);
-}
-
 void dfs_zero_cac_reset(struct wlan_dfs *dfs)
 {
-	dfs->dfs_precac_timeout_override = -1;
+	dfs_get_override_precac_timeout(dfs,
+			&(dfs->dfs_precac_timeout_override));
 	qdf_timer_stop(&dfs->dfs_precac_timer);
 	dfs->dfs_precac_primary_freq = 0;
 	dfs->dfs_precac_secondary_freq = 0;
@@ -289,7 +277,7 @@
 					precac_entry->vht80_freq);
 				TAILQ_INSERT_TAIL(&dfs->dfs_precac_nol_list,
 						precac_entry, pe_list);
-				OS_SET_TIMER(&precac_entry->precac_nol_timer,
+				qdf_timer_mod(&precac_entry->precac_nol_timer,
 						dfs_get_nol_timeout(dfs)*1000);
 				found = 1;
 				break;
@@ -322,7 +310,7 @@
 					precac_entry->vht80_freq);
 				TAILQ_INSERT_TAIL(&dfs->dfs_precac_nol_list,
 						precac_entry, pe_list);
-				OS_SET_TIMER(&precac_entry->precac_nol_timer,
+				qdf_timer_mod(&precac_entry->precac_nol_timer,
 						dfs_get_nol_timeout(dfs)*1000);
 				break;
 			}
@@ -438,6 +426,21 @@
 	dfs_mlme_channel_change_by_precac(dfs->dfs_pdev_obj);
 }
 
+void dfs_zero_cac_timer_init(struct wlan_dfs *dfs)
+{
+	qdf_timer_init(NULL,
+			&(dfs->dfs_precac_timer),
+			dfs_precac_timeout,
+			(void *) dfs,
+			QDF_TIMER_TYPE_WAKE_APPS);
+}
+
+void dfs_zero_cac_attach(struct wlan_dfs *dfs)
+{
+	dfs->dfs_precac_timeout_override = -1;
+	dfs_zero_cac_timer_init(dfs);
+}
+
 /**
  * dfs_precac_nol_timeout() - NOL timeout for precac channel.
  *
@@ -481,7 +484,7 @@
 	 * beginning we do not know how many uniq frequencies are present.
 	 * Therefore, we calculate the MAX size and allocate a temporary
 	 * list/array. However we fill the temporary array with uniq frequencies
-	 * and copy the uniq list of frequencies to* the final list with exact
+	 * and copy the uniq list of frequencies to the final list with exact
 	 * size.
 	 */
 	TAILQ_INIT(&dfs->dfs_precac_required_list);
@@ -598,6 +601,11 @@
 
 }
 
+void dfs_zero_cac_detach(struct wlan_dfs *dfs)
+{
+	dfs_deinit_precac_list(dfs);
+}
+
 uint8_t dfs_get_freq_from_precac_required_list(struct wlan_dfs *dfs,
 		uint8_t exclude_ieee_freq)
 {
@@ -684,7 +692,7 @@
 	DFS_DPRINTK(dfs, WLAN_DEBUG_DFS,
 		"%s : precactimeout = %d\n",
 		__func__, (precac_timeout)*1000);
-	OS_SET_TIMER(&dfs->dfs_precac_timer, (precac_timeout) * 1000);
+	qdf_timer_mod(&dfs->dfs_precac_timer, (precac_timeout) * 1000);
 }
 
 void dfs_print_precaclists(struct wlan_dfs *dfs)
diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
index 21f2a12..f2fddc4 100644
--- a/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
+++ b/umac/dfs/dispatcher/inc/wlan_dfs_tgt_api.h
@@ -50,15 +50,6 @@
 		uint8_t dfs_ch_vhtop_ch_freq_seg2);
 
 /**
- * tgt_dfs_reset() - DFS reset
- * @pdev: Pointer to DFS pdev object.
- *
- * Wrapper function for dfs_reset(). This function called from outside of DFS
- * component.
- */
-QDF_STATUS tgt_dfs_reset(struct wlan_objmgr_pdev *pdev);
-
-/**
  * tgt_dfs_get_radars() - Based on the chipset, calls init radar table functions
  * @pdev: Pointer to DFS pdev object.
  *
@@ -109,24 +100,6 @@
 	int no_cac, uint32_t opmode);
 
 /**
- * tgt_dfs_attach() - Allocates memory for wlan_dfs members.
- * @pdev: Pointer to DFS pdev object.
- *
- * Wrapper function for dfs_attach(). This function called from
- * outside of DFS component.
- */
-QDF_STATUS tgt_dfs_attach(struct wlan_objmgr_pdev *pdev);
-
-/**
- * tgt_sif_dfs_detach() - DFS detach.
- * @pdev: Pointer to DFS pdev object.
- *
- * Wrapper function for sif_dfs_attach(). This function called from
- * outside of DFS component.
- */
-QDF_STATUS tgt_sif_dfs_detach(struct wlan_objmgr_pdev *pdev);
-
-/**
  * tgt_dfs_control()- Used to process ioctls related to DFS.
  * @pdev: Pointer to DFS pdev object.
  * @id: Command type.
@@ -144,15 +117,6 @@
 	int *error);
 
 /**
- * tgt_nif_dfs_reset() - DFS reset.
- * @pdev: Pointer to DFS pdev object.
- *
- * Wrapper function for nif_dfs_reset(). This function called from
- * outside of DFS component.
- */
-QDF_STATUS tgt_nif_dfs_reset(struct wlan_objmgr_pdev *pdev);
-
-/**
  * tgt_dfs_is_precac_timer_running() - Check whether precac timer is running.
  * @pdev: Pointer to DFS pdev object.
  * @is_precac_timer_running: Pointer to save precac timer value.
@@ -221,4 +185,10 @@
  */
 QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc,
 		bool dfs_offload);
+
+/**
+ * tgt_dfs_stop() - Clear dfs timers.
+ * @dfs: Pointer to wlan_dfs structure.
+ */
+QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev);
 #endif /* _WLAN_DFS_TGT_API_H_ */
diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
index 9e89652..4ee88c0 100644
--- a/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
+++ b/umac/dfs/dispatcher/inc/wlan_dfs_utils_api.h
@@ -84,24 +84,6 @@
 extern struct dfs_to_mlme global_dfs_to_mlme;
 
 /**
- * utils_nif_dfs_attach() - DFS attach function.
- * @pdev: Pointer to DFS pdev object.
- *
- * Wrapper function for nif_dfs_attach(). This function called from outside of
- * DFS component.
- */
-QDF_STATUS utils_nif_dfs_attach(struct wlan_objmgr_pdev *pdev);
-
-/**
- * utils_nif_dfs_detach() - DFS detach
- * @pdev: Pointer to DFS pdev object.
- *
- * Wrapper function for nif_dfs_detach(). This function called from outside of
- * DFS component.
- */
-QDF_STATUS utils_nif_dfs_detach(struct wlan_objmgr_pdev *pdev);
-
-/**
  * utils_dfs_cac_valid_reset() - Cancels the dfs_cac_valid_timer timer.
  * @pdev: Pointer to DFS pdev object.
  * @prevchan_ieee: Prevchan number.
@@ -116,6 +98,12 @@
 		uint32_t prevchan_flags);
 
 /**
+ * utils_dfs_reset() - Reset DFS members.
+ * @pdev: Pointer to DFS pdev object.
+ */
+QDF_STATUS utils_dfs_reset(struct wlan_objmgr_pdev *pdev);
+
+/**
  * utils_dfs_reset_precaclists() - Clears and initiakizes precac_required_list,
  *                                 precac_done_list and precac_nol_list.
  * @pdev: Pointer to DFS pdev object.
@@ -432,7 +420,7 @@
 uint8_t utils_dfs_freq_to_chan(uint32_t freq);
 
 /**
- * utils_dfs__chan_to_freq () - convert channel number to frequency
+ * utils_dfs_chan_to_freq () - convert channel number to frequency
  * @chan: channel number
  *
  * Return: frequency
diff --git a/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c b/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c
index 710e9e3..1f0a69b 100644
--- a/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c
+++ b/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c
@@ -197,8 +197,8 @@
 				WLAN_UMAC_COMP_DFS,
 				(void *)dfs);
 
-		nif_dfs_detach(dfs);
-		sif_dfs_detach(dfs);
+		dfs_reset(dfs);
+		dfs_detach(dfs);
 		dfs->dfs_pdev_obj = NULL;
 		dfs_destroy_object(dfs);
 	}
diff --git a/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c b/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
index d98bcd9..8bd5367 100644
--- a/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
+++ b/umac/dfs/dispatcher/src/wlan_dfs_tgt_api.c
@@ -61,20 +61,6 @@
 }
 EXPORT_SYMBOL(tgt_dfs_set_current_channel);
 
-QDF_STATUS tgt_dfs_reset(struct wlan_objmgr_pdev *pdev)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
-	if (dfs == NULL)
-		return  QDF_STATUS_E_FAILURE;
-
-	dfs_reset(dfs);
-
-	return QDF_STATUS_SUCCESS;
-}
-EXPORT_SYMBOL(tgt_dfs_reset);
-
 QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
 		int no_cac, uint32_t opmode)
 {
@@ -140,18 +126,6 @@
 }
 EXPORT_SYMBOL(tgt_dfs_get_radars);
 
-QDF_STATUS tgt_dfs_attach(struct wlan_objmgr_pdev *pdev)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
-	if (dfs == NULL)
-		return  QDF_STATUS_E_FAILURE;
-
-	return dfs_attach(dfs);
-}
-EXPORT_SYMBOL(tgt_dfs_attach);
-
 QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev)
 {
 	struct wlan_dfs *dfs;
@@ -167,31 +141,6 @@
 }
 EXPORT_SYMBOL(tgt_dfs_destroy_object);
 
-QDF_STATUS tgt_nif_dfs_reset(struct wlan_objmgr_pdev *pdev)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
-	if (dfs == NULL)
-		return  QDF_STATUS_E_FAILURE;
-
-	nif_dfs_reset(dfs);
-	return  QDF_STATUS_SUCCESS;
-}
-EXPORT_SYMBOL(tgt_nif_dfs_reset);
-
-QDF_STATUS tgt_sif_dfs_detach(struct wlan_objmgr_pdev *pdev)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
-	if (dfs == NULL)
-		return  QDF_STATUS_E_FAILURE;
-
-	sif_dfs_detach(dfs);
-	return  QDF_STATUS_SUCCESS;
-}
-
 QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
 		u_int id,
 		void *indata,
@@ -299,3 +248,17 @@
 	return status;
 }
 EXPORT_SYMBOL(tgt_dfs_reg_ev_handler);
+
+QDF_STATUS tgt_dfs_stop(struct wlan_objmgr_pdev *pdev)
+{
+	struct wlan_dfs *dfs;
+
+	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
+	if (dfs == NULL)
+		return  QDF_STATUS_E_FAILURE;
+
+	dfs_stop(dfs);
+
+	return QDF_STATUS_SUCCESS;
+}
+EXPORT_SYMBOL(tgt_dfs_stop);
diff --git a/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c b/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
index b11758d..fe24244 100644
--- a/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
+++ b/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c
@@ -37,7 +37,7 @@
 	struct dfsreq_nolelem dfs_nol[DFS_MAX_NOL_CHANNEL];
 };
 
-QDF_STATUS utils_nif_dfs_attach(struct wlan_objmgr_pdev *pdev)
+QDF_STATUS utils_dfs_reset(struct wlan_objmgr_pdev *pdev)
 {
 	struct wlan_dfs *dfs;
 
@@ -45,25 +45,10 @@
 	if (dfs == NULL)
 		return  QDF_STATUS_E_FAILURE;
 
-	nif_dfs_attach(dfs);
+	dfs_reset(dfs);
 
 	return QDF_STATUS_SUCCESS;
 }
-EXPORT_SYMBOL(utils_nif_dfs_attach);
-
-QDF_STATUS utils_nif_dfs_detach(struct wlan_objmgr_pdev *pdev)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
-	if (dfs == NULL)
-		return  QDF_STATUS_E_FAILURE;
-
-	nif_dfs_detach(dfs);
-
-	return QDF_STATUS_SUCCESS;
-}
-EXPORT_SYMBOL(utils_nif_dfs_detach);
 
 QDF_STATUS utils_dfs_cac_valid_reset(struct wlan_objmgr_pdev *pdev,
 		uint8_t prevchan_ieee,
diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
index e6b713d..cd5b3e2 100644
--- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
+++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h
@@ -786,15 +786,11 @@
 /**
  * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions
  *                                  from lmac/offload.
- * @dfs_reset:                        Reset dfs.
  * @dfs_get_radars:                   Calls init radar table functions.
  * @dfs_process_phyerr:               Process phyerr.
  * @dfs_destroy_object:               Destroys the DFS object.
  * @dfs_radar_enable:                 Enables the radar.
- * @dfs_attach:                       Allocates memory for wlan_dfs members.
- * @dfs_sif_dfs_detach:               DFS detach.
  * @dfs_control:                      Used to process ioctls related to DFS.
- * @dfs_nif_dfs_reset:                DFS reset.
  * @dfs_is_precac_timer_running:      Check whether precac timer is running.
  * @dfs_find_vht80_chan_for_precac:   Find VHT80 channel for precac.
  * @dfs_cancel_precac_timer:          Cancel the precac timer.
@@ -805,9 +801,9 @@
  * @dfs_set_current_channel:          Set DFS current channel.
  * @dfs_process_radar_ind:            Process radar found indication.
  * @dfs_dfs_cac_complete_ind:         Process cac complete indication.
+ * @dfs_stop:                         Clear dfs timers.
  */
 struct wlan_lmac_if_dfs_rx_ops {
-	QDF_STATUS (*dfs_reset)(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev,
 			void *buf,
@@ -820,8 +816,6 @@
 	QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev,
 			int no_cac,
 			uint32_t opmode);
-	QDF_STATUS (*dfs_attach)(struct wlan_objmgr_pdev *pdev);
-	QDF_STATUS (*dfs_sif_dfs_detach)(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev,
 			u_int id,
 			void *indata,
@@ -829,7 +823,6 @@
 			void *outdata,
 			uint32_t *outsize,
 			int *error);
-	QDF_STATUS (*dfs_nif_dfs_reset)(struct wlan_objmgr_pdev *pdev);
 	QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev,
 			bool *is_precac_timer_running);
 	QDF_STATUS (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev,
@@ -864,6 +857,7 @@
 	QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev,
 			uint32_t vdev_id);
 #endif
+	QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev);
 };
 
 struct wlan_lmac_if_mlme_rx_ops {
diff --git a/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c b/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c
index 2e07c96..554743b 100644
--- a/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c
+++ b/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c
@@ -229,15 +229,11 @@
 
 	dfs_rx_ops = &rx_ops->dfs_rx_ops;
 
-	dfs_rx_ops->dfs_reset = tgt_dfs_reset;
 	dfs_rx_ops->dfs_get_radars = tgt_dfs_get_radars;
 	dfs_rx_ops->dfs_process_phyerr = tgt_dfs_process_phyerr;
 	dfs_rx_ops->dfs_destroy_object = tgt_dfs_destroy_object;
 	dfs_rx_ops->dfs_radar_enable = tgt_dfs_radar_enable;
-	dfs_rx_ops->dfs_attach = tgt_dfs_attach;
-	dfs_rx_ops->dfs_sif_dfs_detach = tgt_sif_dfs_detach;
 	dfs_rx_ops->dfs_control = tgt_dfs_control;
-	dfs_rx_ops->dfs_nif_dfs_reset = tgt_nif_dfs_reset;
 	dfs_rx_ops->dfs_is_precac_timer_running =
 		tgt_dfs_is_precac_timer_running;
 	dfs_rx_ops->dfs_find_vht80_chan_for_precac =
@@ -252,6 +248,7 @@
 	dfs_rx_ops->dfs_set_current_channel = tgt_dfs_set_current_channel;
 	dfs_rx_ops->dfs_process_radar_ind = tgt_dfs_process_radar_ind;
 	dfs_rx_ops->dfs_dfs_cac_complete_ind = tgt_dfs_cac_complete;
+	dfs_rx_ops->dfs_stop = tgt_dfs_stop;
 
 	return QDF_STATUS_SUCCESS;
 }
diff --git a/wmi/src/wmi_unified.c b/wmi/src/wmi_unified.c
index b3069b1..910a3aa 100644
--- a/wmi/src/wmi_unified.c
+++ b/wmi/src/wmi_unified.c
@@ -2777,6 +2777,12 @@
 			}
 
 			wmi_log_buffer_free(soc->wmi_pdev[i]);
+
+			/* Free events logs list */
+			if (soc->wmi_pdev[i]->events_logs_list)
+				qdf_mem_free(
+					soc->wmi_pdev[i]->events_logs_list);
+
 			qdf_spinlock_destroy(&soc->wmi_pdev[i]->eventq_lock);
 			qdf_mem_free(soc->wmi_pdev[i]);
 		}