qcacmn: Handle scan failure and vdev start caused by NOL violation
This commit includes the following changes: Send usenol pdev param to FW. Set and get dfs_disable_radar_marking flag. Handle scan failure due to NOL violation. Change-Id: I814f6381145f98eccf465af730734238c60d8896 CRs-Fixed: 2328894
This commit is contained in:

committed by
nshrivas

parent
26ebbe4492
commit
d3173ca81c
@@ -364,6 +364,28 @@
|
|||||||
#define HOST_DFS_STATUS_WAIT_TIMER_MS 200
|
#define HOST_DFS_STATUS_WAIT_TIMER_MS 200
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* USENOL_DISABLE_NOL_HOST_AND_FW : Do not add radar hit channel to NOL
|
||||||
|
* in host and FW. Enable CSA on the same channel.
|
||||||
|
*/
|
||||||
|
#define USENOL_DISABLE_NOL_HOST_AND_FW 0
|
||||||
|
/*
|
||||||
|
* USENOL_ENABLE_NOL_HOST_AND_FW : Add the radar hit channel to NOL in
|
||||||
|
* host and FW (in case of FO). NOL timer cannot be configured by the user
|
||||||
|
* as FW does not allow manipulating NOL timeout. If noltimeout is configured,
|
||||||
|
* (say 1 min) FW will not be intimated about the configuration and hence NOL
|
||||||
|
* timer may elapse at different instances in host (after 1 min) and FW (after
|
||||||
|
* default 30 min) which could lead to DFS Violation if host tries to come up
|
||||||
|
* on the channel after host NOL timeout (of 1 min) as the FW would still
|
||||||
|
* have the channel in NOL list.
|
||||||
|
*/
|
||||||
|
#define USENOL_ENABLE_NOL_HOST_AND_FW 1
|
||||||
|
/*
|
||||||
|
* USENOL_ENABLE_NOL_HOST_DISABLE_NOL_FW : Add the radar hit channel to NOL
|
||||||
|
* in host. NOL timer can be configured by user. NOL in FW (for FO) is disabled.
|
||||||
|
*/
|
||||||
|
#define USENOL_ENABLE_NOL_HOST_DISABLE_NOL_FW 2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct dfs_pulseparams - DFS pulse param structure.
|
* struct dfs_pulseparams - DFS pulse param structure.
|
||||||
* @p_time: Time for start of pulse in usecs.
|
* @p_time: Time for start of pulse in usecs.
|
||||||
@@ -979,6 +1001,7 @@ struct dfs_event_log {
|
|||||||
* @dfs_bw_reduced: DFS bandwidth reduced channel bit.
|
* @dfs_bw_reduced: DFS bandwidth reduced channel bit.
|
||||||
* @dfs_freq_offset: Frequency offset where radar was found.
|
* @dfs_freq_offset: Frequency offset where radar was found.
|
||||||
* @dfs_cac_aborted: DFS cac is aborted.
|
* @dfs_cac_aborted: DFS cac is aborted.
|
||||||
|
* @dfs_disable_radar_marking: To mark or unmark NOL chan as radar hit.
|
||||||
*/
|
*/
|
||||||
struct wlan_dfs {
|
struct wlan_dfs {
|
||||||
uint32_t dfs_debug_mask;
|
uint32_t dfs_debug_mask;
|
||||||
@@ -1071,7 +1094,9 @@ struct wlan_dfs {
|
|||||||
os_timer_t dfs_precac_timer;
|
os_timer_t dfs_precac_timer;
|
||||||
int dfs_precac_timeout_override;
|
int dfs_precac_timeout_override;
|
||||||
uint8_t dfs_num_precac_freqs;
|
uint8_t dfs_num_precac_freqs;
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
uint8_t dfs_disable_radar_marking;
|
||||||
|
#endif
|
||||||
TAILQ_HEAD(, dfs_precac_entry) dfs_precac_required_list;
|
TAILQ_HEAD(, dfs_precac_entry) dfs_precac_required_list;
|
||||||
TAILQ_HEAD(, dfs_precac_entry) dfs_precac_done_list;
|
TAILQ_HEAD(, dfs_precac_entry) dfs_precac_done_list;
|
||||||
TAILQ_HEAD(, dfs_precac_entry) dfs_precac_nol_list;
|
TAILQ_HEAD(, dfs_precac_entry) dfs_precac_nol_list;
|
||||||
@@ -2472,4 +2497,27 @@ void dfs_task_testtimer_detach(struct wlan_dfs *dfs);
|
|||||||
* @dfs: Pointer to wlan_dfs structure.
|
* @dfs: Pointer to wlan_dfs structure.
|
||||||
*/
|
*/
|
||||||
void dfs_timer_detach(struct wlan_dfs *dfs);
|
void dfs_timer_detach(struct wlan_dfs *dfs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dfs_is_disable_radar_marking_set() - Check if radar marking is set on
|
||||||
|
* NOL chan.
|
||||||
|
* @dfs: Pointer to wlan_dfs structure.
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
int dfs_is_disable_radar_marking_set(struct wlan_dfs *dfs,
|
||||||
|
bool *disable_radar_marking);
|
||||||
|
#else
|
||||||
|
static inline int dfs_is_disable_radar_marking_set(struct wlan_dfs *dfs,
|
||||||
|
bool *disable_radar_marking)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* dfs_get_disable_radar_marking() - Get the value of disable radar marking.
|
||||||
|
* @dfs: Pointer to wlan_dfs structure.
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
bool dfs_get_disable_radar_marking(struct wlan_dfs *dfs);
|
||||||
|
#endif
|
||||||
#endif /* _DFS_H_ */
|
#endif /* _DFS_H_ */
|
||||||
|
@@ -33,6 +33,9 @@
|
|||||||
#include "../dfs_etsi_precac.h"
|
#include "../dfs_etsi_precac.h"
|
||||||
#include "../dfs_partial_offload_radar.h"
|
#include "../dfs_partial_offload_radar.h"
|
||||||
|
|
||||||
|
/* Disable NOL in FW. */
|
||||||
|
#define DISABLE_NOL_FW 0
|
||||||
|
|
||||||
#ifndef WLAN_DFS_STATIC_MEM_ALLOC
|
#ifndef WLAN_DFS_STATIC_MEM_ALLOC
|
||||||
/*
|
/*
|
||||||
* dfs_alloc_wlan_dfs() - allocate wlan_dfs buffer
|
* dfs_alloc_wlan_dfs() - allocate wlan_dfs buffer
|
||||||
@@ -274,6 +277,35 @@ void dfs_destroy_object(struct wlan_dfs *dfs)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* dfs_set_disable_radar_marking()- Set the flag to mark/unmark a radar flag
|
||||||
|
* on NOL channel.
|
||||||
|
* @dfs: Pointer to wlan_dfs structure.
|
||||||
|
* @disable_radar_marking: Flag to enable/disable marking channel as radar.
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
static void dfs_set_disable_radar_marking(struct wlan_dfs *dfs,
|
||||||
|
bool disable_radar_marking)
|
||||||
|
{
|
||||||
|
dfs->dfs_disable_radar_marking = disable_radar_marking;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void dfs_set_disable_radar_marking(struct wlan_dfs *dfs,
|
||||||
|
bool disable_radar_marking)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
bool dfs_get_disable_radar_marking(struct wlan_dfs *dfs)
|
||||||
|
{
|
||||||
|
return dfs->dfs_disable_radar_marking;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool dfs_get_disable_radar_marking(struct wlan_dfs *dfs)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
int dfs_control(struct wlan_dfs *dfs,
|
int dfs_control(struct wlan_dfs *dfs,
|
||||||
u_int id,
|
u_int id,
|
||||||
void *indata,
|
void *indata,
|
||||||
@@ -290,6 +322,7 @@ int dfs_control(struct wlan_dfs *dfs,
|
|||||||
uint32_t *data = NULL;
|
uint32_t *data = NULL;
|
||||||
int i;
|
int i;
|
||||||
struct dfs_emulate_bang_radar_test_cmd dfs_unit_test;
|
struct dfs_emulate_bang_radar_test_cmd dfs_unit_test;
|
||||||
|
int usenol_pdev_param;
|
||||||
|
|
||||||
qdf_mem_zero(&dfs_unit_test, sizeof(dfs_unit_test));
|
qdf_mem_zero(&dfs_unit_test, sizeof(dfs_unit_test));
|
||||||
|
|
||||||
@@ -574,6 +607,36 @@ int dfs_control(struct wlan_dfs *dfs,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dfs->dfs_use_nol = *(uint32_t *)indata;
|
dfs->dfs_use_nol = *(uint32_t *)indata;
|
||||||
|
usenol_pdev_param = dfs->dfs_use_nol;
|
||||||
|
if (dfs->dfs_is_offload_enabled) {
|
||||||
|
if (dfs->dfs_use_nol ==
|
||||||
|
USENOL_ENABLE_NOL_HOST_DISABLE_NOL_FW)
|
||||||
|
usenol_pdev_param = DISABLE_NOL_FW;
|
||||||
|
tgt_dfs_send_usenol_pdev_param(dfs->dfs_pdev_obj,
|
||||||
|
usenol_pdev_param);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DFS_SET_DISABLE_RADAR_MARKING:
|
||||||
|
if (dfs->dfs_is_offload_enabled &&
|
||||||
|
(utils_get_dfsdomain(dfs->dfs_pdev_obj) ==
|
||||||
|
DFS_FCC_DOMAIN)) {
|
||||||
|
if (insize < sizeof(uint32_t) || !indata) {
|
||||||
|
error = -EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dfs_set_disable_radar_marking(dfs, *(uint8_t *)indata);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DFS_GET_DISABLE_RADAR_MARKING:
|
||||||
|
if (!outdata || !outsize || *outsize < sizeof(uint8_t)) {
|
||||||
|
error = -EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (dfs->dfs_is_offload_enabled) {
|
||||||
|
*outsize = sizeof(uint8_t);
|
||||||
|
*((uint8_t *)outdata) =
|
||||||
|
dfs_get_disable_radar_marking(dfs);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case DFS_GET_NOL:
|
case DFS_GET_NOL:
|
||||||
if (!outdata || !outsize ||
|
if (!outdata || !outsize ||
|
||||||
@@ -605,12 +668,12 @@ int dfs_control(struct wlan_dfs *dfs,
|
|||||||
dfs_print_nolhistory(dfs);
|
dfs_print_nolhistory(dfs);
|
||||||
break;
|
break;
|
||||||
case DFS_BANGRADAR:
|
case DFS_BANGRADAR:
|
||||||
|
dfs->dfs_bangradar = 1;
|
||||||
if (dfs->dfs_is_offload_enabled) {
|
if (dfs->dfs_is_offload_enabled) {
|
||||||
error = dfs_fill_emulate_bang_radar_test(dfs,
|
error = dfs_fill_emulate_bang_radar_test(dfs,
|
||||||
SEG_ID_PRIMARY,
|
SEG_ID_PRIMARY,
|
||||||
&dfs_unit_test);
|
&dfs_unit_test);
|
||||||
} else {
|
} else {
|
||||||
dfs->dfs_bangradar = 1;
|
|
||||||
error = dfs_start_host_based_bangradar(dfs);
|
error = dfs_start_host_based_bangradar(dfs);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@@ -52,13 +52,15 @@
|
|||||||
#define DFS_SHOW_PRECAC_LISTS 24
|
#define DFS_SHOW_PRECAC_LISTS 24
|
||||||
#define DFS_RESET_PRECAC_LISTS 25
|
#define DFS_RESET_PRECAC_LISTS 25
|
||||||
#define DFS_BANGRADAR_ENH 26
|
#define DFS_BANGRADAR_ENH 26
|
||||||
|
#define DFS_SET_DISABLE_RADAR_MARKING 27
|
||||||
|
#define DFS_GET_DISABLE_RADAR_MARKING 28
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Spectral IOCTLs use DFS_LAST_IOCTL as the base.
|
* Spectral IOCTLs use DFS_LAST_IOCTL as the base.
|
||||||
* This must always be the last IOCTL in DFS and have
|
* This must always be the last IOCTL in DFS and have
|
||||||
* the highest value.
|
* the highest value.
|
||||||
*/
|
*/
|
||||||
#define DFS_LAST_IOCTL 27
|
#define DFS_LAST_IOCTL 29
|
||||||
|
|
||||||
#ifndef DFS_CHAN_MAX
|
#ifndef DFS_CHAN_MAX
|
||||||
#define DFS_CHAN_MAX 1023
|
#define DFS_CHAN_MAX 1023
|
||||||
|
@@ -267,4 +267,18 @@ bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dfs_mlme_handle_dfs_scan_violation() - Handle scan start failure
|
||||||
|
* due to DFS violation (presence of NOL channel in scan channel list).
|
||||||
|
* @pdev: Pointer to pdev object.
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
void dfs_mlme_handle_dfs_scan_violation(struct wlan_objmgr_pdev *pdev);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
void dfs_mlme_handle_dfs_scan_violation(struct wlan_objmgr_pdev *pdev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif /* _WLAN_DFS_MLME_API_H_ */
|
#endif /* _WLAN_DFS_MLME_API_H_ */
|
||||||
|
@@ -402,4 +402,22 @@ QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev)
|
|||||||
* Return: true if the pdev supports 5GHz, else false.
|
* Return: true if the pdev supports 5GHz, else false.
|
||||||
*/
|
*/
|
||||||
bool tgt_dfs_is_pdev_5ghz(struct wlan_objmgr_pdev *pdev);
|
bool tgt_dfs_is_pdev_5ghz(struct wlan_objmgr_pdev *pdev);
|
||||||
|
/**
|
||||||
|
* tgt_dfs_send_usenol_pdev_param() - Send usenol pdev param to FW.
|
||||||
|
* @pdev: Pointer to pdev object.
|
||||||
|
* @usenol: Value of usenol
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev,
|
||||||
|
bool usenol);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev,
|
||||||
|
bool usenol)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif /* _WLAN_DFS_TGT_API_H_ */
|
#endif /* _WLAN_DFS_TGT_API_H_ */
|
||||||
|
@@ -59,6 +59,8 @@
|
|||||||
* @mlme_check_allowed_prim_chanlist: Check whether the given channel is
|
* @mlme_check_allowed_prim_chanlist: Check whether the given channel is
|
||||||
* present in the primary allowed channel
|
* present in the primary allowed channel
|
||||||
* list or not.
|
* list or not.
|
||||||
|
* @mlme_update_scan_channel_list: Update the scan channel list sent to FW.
|
||||||
|
* @mlme_bringdown_vaps: Bringdown vaps if no chans is present.
|
||||||
*/
|
*/
|
||||||
struct dfs_to_mlme {
|
struct dfs_to_mlme {
|
||||||
QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
|
QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev,
|
||||||
@@ -141,6 +143,10 @@ struct dfs_to_mlme {
|
|||||||
(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
|
(struct wlan_objmgr_pdev *pdev, int no_chans_avail);
|
||||||
bool (*mlme_check_allowed_prim_chanlist)
|
bool (*mlme_check_allowed_prim_chanlist)
|
||||||
(struct wlan_objmgr_pdev *pdev, uint32_t chan_num);
|
(struct wlan_objmgr_pdev *pdev, uint32_t chan_num);
|
||||||
|
QDF_STATUS (*mlme_update_scan_channel_list)
|
||||||
|
(struct wlan_objmgr_pdev *pdev);
|
||||||
|
QDF_STATUS (*mlme_bringdown_vaps)
|
||||||
|
(struct wlan_objmgr_pdev *pdev);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct dfs_to_mlme global_dfs_to_mlme;
|
extern struct dfs_to_mlme global_dfs_to_mlme;
|
||||||
|
@@ -571,4 +571,22 @@ void utils_dfs_get_chan_list(struct wlan_objmgr_pdev *pdev,
|
|||||||
*/
|
*/
|
||||||
bool utils_dfs_check_for_cac_start(struct wlan_objmgr_pdev *pdev,
|
bool utils_dfs_check_for_cac_start(struct wlan_objmgr_pdev *pdev,
|
||||||
bool *continue_current_cac);
|
bool *continue_current_cac);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* utils_dfs_get_disable_radar_marking - Retrieve the value of disable radar
|
||||||
|
* marking.
|
||||||
|
* @pdev: Pointer to DFS pdev object.
|
||||||
|
* @dis_radar_marking: pointer to retrieve the value of disable_radar_marking.
|
||||||
|
*/
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
QDF_STATUS utils_dfs_get_disable_radar_marking(struct wlan_objmgr_pdev *pdev,
|
||||||
|
bool *disable_radar_marking);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
QDF_STATUS utils_dfs_get_disable_radar_marking(struct wlan_objmgr_pdev *pdev,
|
||||||
|
bool *disable_radar_marking)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif /* _WLAN_DFS_UTILS_API_H_ */
|
#endif /* _WLAN_DFS_UTILS_API_H_ */
|
||||||
|
@@ -34,6 +34,8 @@
|
|||||||
#include "a_types.h"
|
#include "a_types.h"
|
||||||
#include "wlan_serialization_api.h"
|
#include "wlan_serialization_api.h"
|
||||||
#include <qdf_trace.h>
|
#include <qdf_trace.h>
|
||||||
|
#include "wlan_scan_ucfg_api.h"
|
||||||
|
#include "wlan_dfs_mlme_api.h"
|
||||||
|
|
||||||
struct dfs_to_mlme global_dfs_to_mlme;
|
struct dfs_to_mlme global_dfs_to_mlme;
|
||||||
|
|
||||||
@@ -102,6 +104,10 @@ void register_dfs_callbacks(void)
|
|||||||
mlme_dfs_restart_vaps_with_non_dfs_chan;
|
mlme_dfs_restart_vaps_with_non_dfs_chan;
|
||||||
tmp_dfs_to_mlme->mlme_check_allowed_prim_chanlist =
|
tmp_dfs_to_mlme->mlme_check_allowed_prim_chanlist =
|
||||||
mlme_dfs_check_allowed_prim_chanlist;
|
mlme_dfs_check_allowed_prim_chanlist;
|
||||||
|
tmp_dfs_to_mlme->mlme_update_scan_channel_list =
|
||||||
|
mlme_dfs_update_scan_channel_list;
|
||||||
|
tmp_dfs_to_mlme->mlme_bringdown_vaps =
|
||||||
|
mlme_dfs_bringdown_vaps;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register precac auto channel switch feature related callbacks
|
* Register precac auto channel switch feature related callbacks
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#include "wlan_objmgr_pdev_obj.h"
|
#include "wlan_objmgr_pdev_obj.h"
|
||||||
#include "../../core/src/dfs.h"
|
#include "../../core/src/dfs.h"
|
||||||
#include "scheduler_api.h"
|
#include "scheduler_api.h"
|
||||||
|
#include <wlan_reg_ucfg_api.h>
|
||||||
#ifdef QCA_MCL_DFS_SUPPORT
|
#ifdef QCA_MCL_DFS_SUPPORT
|
||||||
#include "wni_api.h"
|
#include "wni_api.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -322,4 +323,18 @@ bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev,
|
|||||||
return global_dfs_to_mlme.mlme_check_allowed_prim_chanlist(pdev,
|
return global_dfs_to_mlme.mlme_check_allowed_prim_chanlist(pdev,
|
||||||
chan_num);
|
chan_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
void dfs_mlme_handle_dfs_scan_violation(struct wlan_objmgr_pdev *pdev)
|
||||||
|
{
|
||||||
|
bool dfs_enable = 0;
|
||||||
|
|
||||||
|
/*Disable all DFS channels in master channel list and ic channel list */
|
||||||
|
ucfg_reg_enable_dfs_channels(pdev, dfs_enable);
|
||||||
|
|
||||||
|
/* send the updated channel list to FW */
|
||||||
|
global_dfs_to_mlme.mlme_update_scan_channel_list(pdev);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -584,3 +584,29 @@ QDF_STATUS tgt_dfs_reset_spoof_test(struct wlan_objmgr_pdev *pdev)
|
|||||||
|
|
||||||
qdf_export_symbol(tgt_dfs_reset_spoof_test);
|
qdf_export_symbol(tgt_dfs_reset_spoof_test);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
QDF_STATUS tgt_dfs_send_usenol_pdev_param(struct wlan_objmgr_pdev *pdev,
|
||||||
|
bool usenol)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
struct wlan_lmac_if_dfs_tx_ops *dfs_tx_ops;
|
||||||
|
|
||||||
|
psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
if (!psoc) {
|
||||||
|
dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS, "psoc is null");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
dfs_tx_ops = wlan_psoc_get_dfs_txops(psoc);
|
||||||
|
if (dfs_tx_ops && dfs_tx_ops->dfs_send_usenol_pdev_param)
|
||||||
|
return dfs_tx_ops->dfs_send_usenol_pdev_param(pdev, usenol);
|
||||||
|
|
||||||
|
dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,
|
||||||
|
"dfs_tx_ops=%pK", dfs_tx_ops);
|
||||||
|
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(tgt_dfs_send_usenol_pdev_param);
|
||||||
|
#endif
|
||||||
|
@@ -979,3 +979,26 @@ int dfs_get_num_chans(void)
|
|||||||
{
|
{
|
||||||
return NUM_CHANNELS;
|
return NUM_CHANNELS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
|
||||||
|
QDF_STATUS utils_dfs_get_disable_radar_marking(struct wlan_objmgr_pdev *pdev,
|
||||||
|
bool *disable_radar_marking)
|
||||||
|
{
|
||||||
|
struct wlan_dfs *dfs;
|
||||||
|
|
||||||
|
if (!tgt_dfs_is_pdev_5ghz(pdev))
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
|
||||||
|
if (!dfs) {
|
||||||
|
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "dfs is null");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*disable_radar_marking = dfs_get_disable_radar_marking(dfs);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
qdf_export_symbol(utils_dfs_get_disable_radar_marking);
|
||||||
|
#endif
|
||||||
|
Reference in New Issue
Block a user