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]);
}