mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
Merge "qcacmn: Free events logs list of wmi handle"
This commit is contained in:
commit
8bc1922f85
17 changed files with 342 additions and 359 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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_ */
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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_ */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue