Merge "qcacmn: Free events logs list of wmi handle"

This commit is contained in:
Linux Build Service Account 2017-07-21 21:51:09 -07:00 • committed by Gerrit - the friendly Code Review server
commit 8bc1922f85
17 changed files with 342 additions and 359 deletions

View file

@ -1439,10 +1439,6 @@ out:
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

View file

@ -1406,11 +1406,17 @@ bool dfs_is_precac_timer_running(struct wlan_dfs *dfs);
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.
@ -1423,12 +1429,6 @@ int dfs_create_object(struct wlan_dfs **dfs);
*/
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.
@ -1442,22 +1442,16 @@ int dfs_random_channel(struct wlan_dfs *dfs,
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.
@ -1646,6 +1640,36 @@ void dfs_mark_precac_dfs(struct wlan_dfs *dfs,
int dfs_get_debug_info(struct wlan_dfs *dfs,
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 @@ void count_the_other_delay_elements(struct wlan_dfs *dfs,
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_ */

View file

@ -53,6 +53,12 @@ struct dfs_precac_entry {
struct wlan_dfs *dfs;
};
/**
* 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.
@ -79,6 +85,12 @@ void dfs_reset_precaclists(struct wlan_dfs *dfs);
*/
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_start_precac_timer(struct wlan_dfs *dfs,
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);
@ -207,12 +219,6 @@ uint32_t dfs_get_precac_enable(struct wlan_dfs *dfs);
*/
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.

View file

@ -810,7 +810,7 @@ void dfs_process_phyerr(struct wlan_dfs *dfs, void *buf, uint16_t datalen,
}
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

View file

@ -563,7 +563,7 @@ void dfs_radar_found_action(struct wlan_dfs *dfs)
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);
}

View file

@ -94,6 +94,21 @@ int dfs_get_debug_info(struct wlan_dfs *dfs, void *data)
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 @@ int dfs_create_object(struct wlan_dfs **dfs)
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 @@ int dfs_attach(struct wlan_dfs *dfs)
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 @@ bad1:
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 @@ void dfs_reset(struct wlan_dfs *dfs)
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 @@ void sif_dfs_detach(struct wlan_dfs *dfs)
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 @@ int dfs_control(struct wlan_dfs *dfs,
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 @@ int dfs_control(struct wlan_dfs *dfs,
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 @@ int dfs_get_thresholds(struct wlan_dfs *dfs,
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,

View file

@ -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 @@ int dfs_get_override_cac_timeout(struct wlan_dfs *dfs, int *cac_timeout)
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 @@ static os_timer_func(dfs_cac_timeout)
*/
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 @@ static os_timer_func(dfs_cac_timeout)
}
}
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 @@ int dfs_is_ap_cac_timer_running(struct wlan_dfs *dfs)
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 @@ void dfs_stacac_stop(struct wlan_dfs *dfs)
__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)

View file

@ -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 @@ void dfs_nol_addchan(struct wlan_dfs *dfs,
__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 @@ void dfs_nol_addchan(struct wlan_dfs *dfs,
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 @@ int dfs_get_nol_timeout(struct wlan_dfs *dfs)
{
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);
}
}

View file

@ -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 @@ void dfs_mark_precac_dfs(struct wlan_dfs *dfs,
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 @@ void dfs_mark_precac_dfs(struct wlan_dfs *dfs,
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 @@ static os_timer_func(dfs_precac_timeout)
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 @@ void dfs_init_precac_list(struct wlan_dfs *dfs)
* 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_deinit_precac_list(struct wlan_dfs *dfs)
}
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 @@ void dfs_start_precac_timer(struct wlan_dfs *dfs, uint8_t precac_chan)
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)

View file

@ -49,15 +49,6 @@ QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
uint8_t dfs_ch_vhtop_ch_freq_seg1,
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.
@ -108,24 +99,6 @@ QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev);
QDF_STATUS tgt_dfs_radar_enable(struct wlan_objmgr_pdev *pdev,
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.
@ -143,15 +116,6 @@ QDF_STATUS tgt_dfs_control(struct wlan_objmgr_pdev *pdev,
uint32_t *outsize,
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.
@ -221,4 +185,10 @@ QDF_STATUS tgt_dfs_cac_complete(struct wlan_objmgr_pdev *pdev,
*/
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_ */

View file

@ -83,24 +83,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.
@ -115,6 +97,12 @@ QDF_STATUS utils_dfs_cac_valid_reset(struct wlan_objmgr_pdev *pdev,
uint8_t prevchan_ieee,
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.
@ -432,7 +420,7 @@ void utils_dfs_reg_update_nol_ch(struct wlan_objmgr_pdev *pdev,
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

View file

@ -197,8 +197,8 @@ QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev,
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);
}

View file

@ -61,20 +61,6 @@ QDF_STATUS tgt_dfs_set_current_channel(struct wlan_objmgr_pdev *pdev,
}
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 @@ QDF_STATUS tgt_dfs_get_radars(struct wlan_objmgr_pdev *pdev)
}
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 @@ QDF_STATUS tgt_dfs_destroy_object(struct wlan_objmgr_pdev *pdev)
}
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 @@ QDF_STATUS tgt_dfs_reg_ev_handler(struct wlan_objmgr_psoc *psoc,
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);

View file

@ -37,7 +37,7 @@ struct dfs_nol_info {
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 @@ QDF_STATUS utils_nif_dfs_attach(struct wlan_objmgr_pdev *pdev)
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,

View file

@ -786,15 +786,11 @@ struct wlan_lmac_if_nan_rx_ops {
/**
* 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 @@ struct wlan_lmac_if_nan_rx_ops {
* @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 @@ struct wlan_lmac_if_dfs_rx_ops {
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 @@ struct wlan_lmac_if_dfs_rx_ops {
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 @@ struct wlan_lmac_if_dfs_rx_ops {
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 {

View file

@ -229,15 +229,11 @@ wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
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 @@ wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
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;
}

View file

@ -2777,6 +2777,12 @@ void wmi_unified_detach(struct wmi_unified *wmi_handle)
}
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]);
}