|
@@ -72,9 +72,6 @@ static void dfs_nol_elem_free_work_cb(void *context)
|
|
nolelem_list);
|
|
nolelem_list);
|
|
WLAN_DFSNOL_UNLOCK(dfs);
|
|
WLAN_DFSNOL_UNLOCK(dfs);
|
|
qdf_hrtimer_kill(&nol_head->nol_timer);
|
|
qdf_hrtimer_kill(&nol_head->nol_timer);
|
|
- qdf_flush_work(&nol_head->nol_timer_completion_work);
|
|
|
|
- qdf_destroy_work(NULL,
|
|
|
|
- &nol_head->nol_timer_completion_work);
|
|
|
|
qdf_mem_free(nol_head);
|
|
qdf_mem_free(nol_head);
|
|
} else {
|
|
} else {
|
|
WLAN_DFSNOL_UNLOCK(dfs);
|
|
WLAN_DFSNOL_UNLOCK(dfs);
|
|
@@ -153,18 +150,28 @@ static void dfs_nol_delete(struct wlan_dfs *dfs,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void dfs_process_noltimeout_completion(void *context)
|
|
|
|
|
|
+/**
|
|
|
|
+ * dfs_remove_from_nol() - Remove the freq from NOL list.
|
|
|
|
+ * @arg: argument of the timer
|
|
|
|
+ *
|
|
|
|
+ * When NOL times out, this function removes the channel from NOL list.
|
|
|
|
+ */
|
|
|
|
+#ifdef CONFIG_CHAN_FREQ_API
|
|
|
|
+
|
|
|
|
+static enum qdf_hrtimer_restart_status
|
|
|
|
+dfs_remove_from_nol(qdf_hrtimer_data_t *arg)
|
|
{
|
|
{
|
|
- struct dfs_nolelem *nol_arg;
|
|
|
|
struct wlan_dfs *dfs;
|
|
struct wlan_dfs *dfs;
|
|
uint16_t delfreq;
|
|
uint16_t delfreq;
|
|
uint16_t delchwidth;
|
|
uint16_t delchwidth;
|
|
uint8_t chan;
|
|
uint8_t chan;
|
|
|
|
+ struct dfs_nolelem *nol_arg;
|
|
|
|
|
|
- nol_arg = (struct dfs_nolelem *)context;
|
|
|
|
|
|
+ nol_arg = container_of(arg, struct dfs_nolelem, nol_timer);
|
|
dfs = nol_arg->nol_dfs;
|
|
dfs = nol_arg->nol_dfs;
|
|
delfreq = nol_arg->nol_freq;
|
|
delfreq = nol_arg->nol_freq;
|
|
delchwidth = nol_arg->nol_chwidth;
|
|
delchwidth = nol_arg->nol_chwidth;
|
|
|
|
+
|
|
/* Delete the given NOL entry. */
|
|
/* Delete the given NOL entry. */
|
|
DFS_NOL_DELETE_CHAN_LOCKED(dfs, delfreq, delchwidth);
|
|
DFS_NOL_DELETE_CHAN_LOCKED(dfs, delfreq, delchwidth);
|
|
|
|
|
|
@@ -194,7 +201,7 @@ void dfs_process_noltimeout_completion(void *context)
|
|
* of, after VAP start.
|
|
* of, after VAP start.
|
|
*/
|
|
*/
|
|
if (dfs_switch_to_postnol_chan_if_nol_expired(dfs))
|
|
if (dfs_switch_to_postnol_chan_if_nol_expired(dfs))
|
|
- return;
|
|
|
|
|
|
+ return QDF_HRTIMER_NORESTART;
|
|
/*
|
|
/*
|
|
* If BW Expand is enabled, check if the user configured channel is
|
|
* If BW Expand is enabled, check if the user configured channel is
|
|
* available. If it is available, STOP the AGILE SM and Restart the
|
|
* available. If it is available, STOP the AGILE SM and Restart the
|
|
@@ -221,25 +228,6 @@ void dfs_process_noltimeout_completion(void *context)
|
|
utils_dfs_agile_sm_deliver_evt(dfs->dfs_pdev_obj,
|
|
utils_dfs_agile_sm_deliver_evt(dfs->dfs_pdev_obj,
|
|
DFS_AGILE_SM_EV_AGILE_START);
|
|
DFS_AGILE_SM_EV_AGILE_START);
|
|
}
|
|
}
|
|
-}
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * dfs_remove_from_nol() - Remove the freq from NOL list.
|
|
|
|
- * @arg: argument of the timer
|
|
|
|
- *
|
|
|
|
- * When NOL times out, this function removes the channel from NOL list.
|
|
|
|
- */
|
|
|
|
-#ifdef CONFIG_CHAN_FREQ_API
|
|
|
|
-
|
|
|
|
-static enum qdf_hrtimer_restart_status
|
|
|
|
-dfs_remove_from_nol(qdf_hrtimer_data_t *arg)
|
|
|
|
-{
|
|
|
|
- struct dfs_nolelem *nol_arg;
|
|
|
|
-
|
|
|
|
- nol_arg = container_of(arg, struct dfs_nolelem, nol_timer);
|
|
|
|
-
|
|
|
|
- qdf_sched_work(NULL, &nol_arg->nol_timer_completion_work);
|
|
|
|
-
|
|
|
|
return QDF_HRTIMER_NORESTART;
|
|
return QDF_HRTIMER_NORESTART;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
@@ -430,11 +418,7 @@ void dfs_nol_addchan(struct wlan_dfs *dfs,
|
|
|
|
|
|
qdf_hrtimer_init(&elem->nol_timer, dfs_remove_from_nol,
|
|
qdf_hrtimer_init(&elem->nol_timer, dfs_remove_from_nol,
|
|
QDF_CLOCK_MONOTONIC, QDF_HRTIMER_MODE_REL,
|
|
QDF_CLOCK_MONOTONIC, QDF_HRTIMER_MODE_REL,
|
|
- QDF_CONTEXT_HARDWARE);
|
|
|
|
- qdf_create_work(NULL,
|
|
|
|
- &elem->nol_timer_completion_work,
|
|
|
|
- dfs_process_noltimeout_completion,
|
|
|
|
- elem);
|
|
|
|
|
|
+ QDF_CONTEXT_TASKLET);
|
|
qdf_hrtimer_start(&elem->nol_timer,
|
|
qdf_hrtimer_start(&elem->nol_timer,
|
|
qdf_time_ms_to_ktime(dfs_nol_timeout * TIME_IN_MS),
|
|
qdf_time_ms_to_ktime(dfs_nol_timeout * TIME_IN_MS),
|
|
QDF_HRTIMER_MODE_REL);
|
|
QDF_HRTIMER_MODE_REL);
|
|
@@ -560,9 +544,6 @@ void dfs_nol_timer_cleanup(struct wlan_dfs *dfs)
|
|
1,
|
|
1,
|
|
DFS_NOL_RESET);
|
|
DFS_NOL_RESET);
|
|
qdf_hrtimer_kill(&nol->nol_timer);
|
|
qdf_hrtimer_kill(&nol->nol_timer);
|
|
- qdf_flush_work(&nol->nol_timer_completion_work);
|
|
|
|
- qdf_destroy_work(NULL,
|
|
|
|
- &nol->nol_timer_completion_work);
|
|
|
|
qdf_mem_free(nol);
|
|
qdf_mem_free(nol);
|
|
} else {
|
|
} else {
|
|
WLAN_DFSNOL_UNLOCK(dfs);
|
|
WLAN_DFSNOL_UNLOCK(dfs);
|