diff --git a/components/nan/dispatcher/inc/nan_ucfg_api.h b/components/nan/dispatcher/inc/nan_ucfg_api.h index 93d039d2a4ff..dac07f92995b 100644 --- a/components/nan/dispatcher/inc/nan_ucfg_api.h +++ b/components/nan/dispatcher/inc/nan_ucfg_api.h @@ -361,11 +361,23 @@ bool ucfg_nan_is_enable_disable_in_progress(struct wlan_objmgr_psoc *psoc); bool ucfg_nan_is_sta_ndp_concurrency_allowed(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_vdev *vdev); +/** + * ucfg_nan_set_vdev_creation_supp_by_fw()- Set the NAN separate vdev psoc param + * @psoc: pointer to psoc object + * @set: True if firmware supports NAN separate vdev feature + * + * Cache the value of set in NAN psoc object param. + * + * Return: None + */ +void +ucfg_nan_set_vdev_creation_supp_by_fw(struct wlan_objmgr_psoc *psoc, bool set); + /** * ucfg_nan_is_vdev_creation_allowed()- Get support for NAN vdev creation * @psoc: pointer to psoc object * - * Return: True if NAN vdev creation is allowed else false + * Return: True if NAN vdev creation is allowed by host and firmware else false */ bool ucfg_nan_is_vdev_creation_allowed(struct wlan_objmgr_psoc *psoc); @@ -378,15 +390,6 @@ bool ucfg_nan_is_vdev_creation_allowed(struct wlan_objmgr_psoc *psoc); */ bool ucfg_nan_is_sta_nan_ndi_4_port_allowed(struct wlan_objmgr_psoc *psoc); -/** - * ucfg_nan_get_is_separate_nan_iface() - get is_separate_nan_iface value - * @psoc: pointer to psoc object - * - * Return: True if host supports separate vdev for NAN, false otherwise - */ -bool -ucfg_nan_get_is_separate_nan_iface(struct wlan_objmgr_psoc *psoc); - /** * ucfg_disable_nan_discovery() - Disable NAN discovery * @psoc: pointer to psoc object @@ -453,6 +456,11 @@ bool ucfg_nan_is_sta_ndp_concurrency_allowed(struct wlan_objmgr_psoc *psoc, return false; } +static inline void +ucfg_nan_set_vdev_creation_supp_by_fw(struct wlan_objmgr_psoc *psoc, bool set) +{ +} + static inline bool ucfg_nan_is_vdev_creation_allowed(struct wlan_objmgr_psoc *psoc) { @@ -465,12 +473,6 @@ bool ucfg_nan_is_sta_nan_ndi_4_port_allowed(struct wlan_objmgr_psoc *psoc) return false; } -static inline -bool ucfg_nan_get_is_separate_nan_iface(struct wlan_objmgr_psoc *psoc) -{ - return false; -} - static inline QDF_STATUS ucfg_disable_nan_discovery(struct wlan_objmgr_psoc *psoc, uint8_t *data, uint32_t data_len) diff --git a/components/nan/dispatcher/src/nan_ucfg_api.c b/components/nan/dispatcher/src/nan_ucfg_api.c index 2cbf1a135850..b95a8779b7de 100644 --- a/components/nan/dispatcher/src/nan_ucfg_api.c +++ b/components/nan/dispatcher/src/nan_ucfg_api.c @@ -1081,19 +1081,6 @@ bool ucfg_nan_is_sta_ndp_concurrency_allowed(struct wlan_objmgr_psoc *psoc, HW_MODE_20_MHZ); } -bool ucfg_nan_is_vdev_creation_allowed(struct wlan_objmgr_psoc *psoc) -{ - struct nan_psoc_priv_obj *psoc_nan_obj; - - psoc_nan_obj = nan_get_psoc_priv_obj(psoc); - if (!psoc_nan_obj) { - nan_err("psoc_nan_obj is null"); - return false; - } - - return psoc_nan_obj->nan_caps.nan_vdev_allowed; -} - bool ucfg_nan_is_sta_nan_ndi_4_port_allowed(struct wlan_objmgr_psoc *psoc) { @@ -1108,14 +1095,15 @@ ucfg_nan_is_sta_nan_ndi_4_port_allowed(struct wlan_objmgr_psoc *psoc) return psoc_nan_obj->nan_caps.sta_nan_ndi_ndi_allowed; } -bool ucfg_nan_get_is_separate_nan_iface(struct wlan_objmgr_psoc *psoc) +static inline bool +ucfg_nan_is_vdev_creation_supp_by_fw(struct nan_psoc_priv_obj *psoc_nan_obj) { - struct nan_psoc_priv_obj *nan_obj = nan_get_psoc_priv_obj(psoc); + return psoc_nan_obj->nan_caps.nan_vdev_allowed; +} - if (!nan_obj) { - nan_err("NAN obj null"); - return false; - } +static inline bool +ucfg_nan_is_vdev_creation_supp_by_host(struct nan_psoc_priv_obj *nan_obj) +{ return nan_obj->cfg_param.nan_separate_iface_support; } @@ -1147,3 +1135,35 @@ QDF_STATUS ucfg_disable_nan_discovery(struct wlan_objmgr_psoc *psoc, qdf_mem_free(nan_req); return status; } + +bool ucfg_nan_is_vdev_creation_allowed(struct wlan_objmgr_psoc *psoc) +{ + struct nan_psoc_priv_obj *psoc_nan_obj; + bool support = false; + + psoc_nan_obj = nan_get_psoc_priv_obj(psoc); + if (!psoc_nan_obj) { + nan_err("psoc_nan_obj is null"); + return false; + } + + if (ucfg_nan_is_vdev_creation_supp_by_fw(psoc_nan_obj) && + ucfg_nan_is_vdev_creation_supp_by_host(psoc_nan_obj)) + support = true; + + return support; +} + +void +ucfg_nan_set_vdev_creation_supp_by_fw(struct wlan_objmgr_psoc *psoc, bool set) +{ + struct nan_psoc_priv_obj *psoc_nan_obj; + + psoc_nan_obj = nan_get_psoc_priv_obj(psoc); + if (!psoc_nan_obj) { + nan_err("psoc_nan_obj is null"); + return; + } + + psoc_nan_obj->nan_caps.nan_vdev_allowed = set; +} diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 4c2b7ee90b04..95675fd8a81e 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -13239,8 +13239,7 @@ hdd_open_adapters_for_mission_mode(struct hdd_context *hdd_ctx) * Create separate interface (wifi-aware0) for NAN. All NAN commands * should go on this new interface. */ - if (ucfg_nan_is_vdev_creation_allowed(hdd_ctx->psoc) && - ucfg_nan_get_is_separate_nan_iface(hdd_ctx->psoc)) { + if (ucfg_nan_is_vdev_creation_allowed(hdd_ctx->psoc)) { mac_addr = wlan_hdd_get_intf_addr(hdd_ctx, QDF_NAN_DISC_MODE); status = hdd_open_adapter_no_trans(hdd_ctx, QDF_NAN_DISC_MODE, "wifi-aware%d", mac_addr); diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 656dfdc20388..c8e7baf30caf 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -6744,8 +6744,10 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, ucfg_ftm_time_sync_set_enable(wma_handle->psoc, false); } - if (wmi_service_enabled(wma_handle->wmi_handle, wmi_service_nan_vdev) && - ucfg_nan_get_is_separate_nan_iface(wma_handle->psoc)) + if (wmi_service_enabled(wma_handle->wmi_handle, wmi_service_nan_vdev)) + ucfg_nan_set_vdev_creation_supp_by_fw(wma_handle->psoc, true); + + if (ucfg_nan_is_vdev_creation_allowed(wma_handle->psoc)) wlan_res_cfg->nan_separate_iface_support = true; wma_init_dbr_params(wma_handle);