From c0084540142f7e9d15ac2da90a7907367c14835e Mon Sep 17 00:00:00 2001 From: Vignesh U Date: Mon, 15 Oct 2018 12:28:41 +0530 Subject: [PATCH] qcacmn: Add support to enable/disable NOL subchannel marking Add DFS function to enable or disable NOL subchannel marking. Change-Id: Ibb6dbdb373af5b328c813c3b80b0f2296f644406 CRs-Fixed: 2334258 --- .../core/src/dfs_process_radar_found_ind.h | 23 ++++++++++++++ umac/dfs/core/src/misc/dfs.c | 1 - .../src/misc/dfs_process_radar_found_ind.c | 24 ++++++++++++++ umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h | 27 ++++++++++++++++ umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c | 31 +++++++++++++++++++ .../lmac_if/inc/wlan_lmac_if_def.h | 6 ++++ .../lmac_if/src/wlan_lmac_if.c | 5 ++- 7 files changed, 115 insertions(+), 2 deletions(-) diff --git a/umac/dfs/core/src/dfs_process_radar_found_ind.h b/umac/dfs/core/src/dfs_process_radar_found_ind.h index 00716c168163..2017742340e2 100644 --- a/umac/dfs/core/src/dfs_process_radar_found_ind.h +++ b/umac/dfs/core/src/dfs_process_radar_found_ind.h @@ -159,4 +159,27 @@ uint8_t dfs_get_bonding_channels(struct wlan_dfs *dfs, */ uint8_t dfs_get_bonding_channels_without_seg_info(struct dfs_channel *chan, uint8_t *channels); + +/** + * dfs_set_nol_subchannel_marking() - Set or unset NOL subchannel marking. + * @dfs: Pointer to wlan_dfs structure. + * @nol_subchannel_marking - Configure NOL subchannel marking. + * + * Return: Status of the configuration. + */ +int +dfs_set_nol_subchannel_marking(struct wlan_dfs *dfs, + bool nol_subchannel_marking); + +/** + * dfs_get_nol_subchannel_marking() - Get the value of NOL subchannel marking. + * @dfs: Pointer to wlan_dfs structure. + * @nol_subchannel_marking - Read and store the value of NOL subchannel marking + * config. + * + * Return: Status of the read. + */ +int +dfs_get_nol_subchannel_marking(struct wlan_dfs *dfs, + bool *nol_subchannel_marking); #endif /*_DFS_PROCESS_RADAR_FOUND_IND_H_ */ diff --git a/umac/dfs/core/src/misc/dfs.c b/umac/dfs/core/src/misc/dfs.c index 261702a980d9..b362576f4416 100644 --- a/umac/dfs/core/src/misc/dfs.c +++ b/umac/dfs/core/src/misc/dfs.c @@ -193,7 +193,6 @@ int dfs_attach(struct wlan_dfs *dfs) dfs_zero_cac_attach(dfs); dfs_etsi_precac_attach(dfs); dfs_nol_attach(dfs); - dfs->dfs_use_nol_subchannel_marking = 1; /* * Init of timer ,dfs_testtimer_task is required by both partial diff --git a/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c b/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c index 3b1c4980cc8a..0a34f11b26aa 100644 --- a/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c +++ b/umac/dfs/core/src/misc/dfs_process_radar_found_ind.c @@ -119,6 +119,30 @@ * <-------- 20 Mhz ------> */ +int dfs_set_nol_subchannel_marking(struct wlan_dfs *dfs, + bool nol_subchannel_marking) +{ + if (!dfs) + return -EIO; + + dfs->dfs_use_nol_subchannel_marking = nol_subchannel_marking; + dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "NOL subchannel marking is %s ", + (nol_subchannel_marking) ? "set" : "disabled"); + + return 0; +} + +int dfs_get_nol_subchannel_marking(struct wlan_dfs *dfs, + bool *nol_subchannel_marking) +{ + if (!dfs) + return -EIO; + + (*nol_subchannel_marking) = dfs->dfs_use_nol_subchannel_marking; + + return 0; +} + /** * dfs_radar_add_channel_list_to_nol()- Add given channels to nol * @dfs: Pointer to wlan_dfs structure. diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h index 2314fcd2efaa..41264e21c6ec 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h +++ b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h @@ -362,4 +362,31 @@ QDF_STATUS ucfg_dfs_get_override_status_timeout(struct wlan_objmgr_pdev *pdev, return QDF_STATUS_SUCCESS; } #endif + +/** + * ucfg_dfs_set_nol_subchannel_marking() - Set or unset NOL subchannel marking. + * @pdev: Pointer to DFS pdev object. + * @nol_subchannel_marking: Set NOL subchannel marking based on this value. + * + * Wrapper function for dfs_set_nol_subchannel_marking(). + * This function is called from outside of dfs component. + * + * Return: QDF_STATUS + */ +QDF_STATUS ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev, + bool nol_subchannel_marking); + +/** + * ucfg_dfs_get_nol_subchannel_marking() - Get the value of NOL subchannel + * marking. + * @pdev: Pointer to DFS pdev object. + * @nol_subchannel_marking: Store the value of NOL subchannel marking. + * + * Wrapper function for dfs_get_nol_subchannel_marking(). + * This function is called from outside of dfs component. + * + * Return: QDF_STATUS + */ +QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev, + bool *nol_subchannel_marking); #endif /* _WLAN_DFS_UCFG_API_H_ */ diff --git a/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c b/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c index 8b46cb7ec0ac..1448bf83dca5 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c +++ b/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c @@ -26,6 +26,7 @@ #include "../../core/src/dfs.h" #include "../../core/src/dfs_zero_cac.h" #include "../../core/src/dfs_partial_offload_radar.h" +#include "../../core/src/dfs_process_radar_found_ind.h" #include QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev, @@ -157,6 +158,36 @@ QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev, } qdf_export_symbol(ucfg_dfs_get_precac_enable); +QDF_STATUS +ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev, + bool nol_subchannel_marking) +{ + struct wlan_dfs *dfs; + + dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev); + if (!dfs) + return QDF_STATUS_E_FAILURE; + + dfs_set_nol_subchannel_marking(dfs, nol_subchannel_marking); + + return QDF_STATUS_SUCCESS; +} +qdf_export_symbol(ucfg_dfs_set_nol_subchannel_marking); + +QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev, + bool *nol_subchannel_marking) +{ + struct wlan_dfs *dfs; + + dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev); + if (!dfs) + return QDF_STATUS_E_FAILURE; + + dfs_get_nol_subchannel_marking(dfs, nol_subchannel_marking); + + return QDF_STATUS_SUCCESS; +} +qdf_export_symbol(ucfg_dfs_get_nol_subchannel_marking); #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT QDF_STATUS ucfg_dfs_set_precac_intermediate_chan(struct wlan_objmgr_pdev *pdev, uint32_t value) diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h index a37240b93070..ee9945c6e311 100644 --- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h +++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h @@ -1197,6 +1197,12 @@ struct wlan_lmac_if_dfs_rx_ops { QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev *pdev, bool *disable_radar_marking); + QDF_STATUS (*dfs_set_nol_subchannel_marking)( + struct wlan_objmgr_pdev *pdev, + bool value); + QDF_STATUS (*dfs_get_nol_subchannel_marking)( + struct wlan_objmgr_pdev *pdev, + bool *value); }; struct wlan_lmac_if_mlme_rx_ops { diff --git a/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c b/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c index 616174fde603..1025677e4654 100644 --- a/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c +++ b/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c @@ -381,7 +381,10 @@ wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) tgt_dfs_reset_spoof_test; dfs_rx_ops->dfs_is_disable_radar_marking_set = utils_dfs_get_disable_radar_marking; - + dfs_rx_ops->dfs_set_nol_subchannel_marking = + ucfg_dfs_set_nol_subchannel_marking; + dfs_rx_ops->dfs_get_nol_subchannel_marking = + ucfg_dfs_get_nol_subchannel_marking; register_precac_auto_chan_rx_ops(dfs_rx_ops); return QDF_STATUS_SUCCESS;