From 7defbc9a078c41ffa266fe99eb50e29e5e261776 Mon Sep 17 00:00:00 2001 From: Amar Singhal Date: Fri, 22 Nov 2019 10:25:48 -0800 Subject: [PATCH] qcacmn: Call channel change callback in regulatory_pdev_open During pdev create callback, pdev reference cannot be taken. Hence, channel change callbacks cannot be called during pdev create. So call the callbacks during regulatory_pdev_open. Also dont check if regulatory_pdev_open fails. Change-Id: I9d444f952418be983e4ac2182581d03bba02b198 CRs-Fixed: 2572487 --- init_deinit/dispatcher/src/dispatcher_init_deinit.c | 12 ++++++++++++ umac/regulatory/core/src/reg_priv_objs.c | 1 - .../dispatcher/inc/wlan_reg_services_api.h | 8 ++++++++ .../dispatcher/src/wlan_reg_services_api.c | 11 +++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/init_deinit/dispatcher/src/dispatcher_init_deinit.c b/init_deinit/dispatcher/src/dispatcher_init_deinit.c index 2dab50623966..cb81c4d4d6d1 100644 --- a/init_deinit/dispatcher/src/dispatcher_init_deinit.c +++ b/init_deinit/dispatcher/src/dispatcher_init_deinit.c @@ -298,6 +298,12 @@ static QDF_STATUS dispatcher_spectral_pdev_close(struct wlan_objmgr_pdev *pdev) } #endif +static QDF_STATUS dispatcher_regulatory_pdev_open(struct wlan_objmgr_pdev + *pdev) +{ + return regulatory_pdev_open(pdev); +} + static QDF_STATUS dispatcher_regulatory_pdev_close(struct wlan_objmgr_pdev *pdev) { @@ -1058,6 +1064,9 @@ QDF_STATUS dispatcher_pdev_open(struct wlan_objmgr_pdev *pdev) { QDF_STATUS status; + if (QDF_STATUS_SUCCESS != dispatcher_regulatory_pdev_open(pdev)) + goto regulatory_pdev_open_fail; + status = dispatcher_spectral_pdev_open(pdev); if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) goto spectral_pdev_open_fail; @@ -1080,6 +1089,9 @@ mgmt_txrx_pdev_open_fail: cfr_pdev_open_fail: dispatcher_spectral_pdev_close(pdev); spectral_pdev_open_fail: + dispatcher_regulatory_pdev_close(pdev); +regulatory_pdev_open_fail: + return QDF_STATUS_E_FAILURE; } qdf_export_symbol(dispatcher_pdev_open); diff --git a/umac/regulatory/core/src/reg_priv_objs.c b/umac/regulatory/core/src/reg_priv_objs.c index 614033e6fcf0..81e23c36ce5e 100644 --- a/umac/regulatory/core/src/reg_priv_objs.c +++ b/umac/regulatory/core/src/reg_priv_objs.c @@ -247,7 +247,6 @@ QDF_STATUS wlan_regulatory_pdev_obj_created_notification( } reg_compute_pdev_current_chan_list(pdev_priv_obj); - reg_send_scheduler_msg_nb(parent_psoc, pdev); if (!psoc_priv_obj->is_11d_offloaded) reg_11d_host_scan_init(parent_psoc); diff --git a/umac/regulatory/dispatcher/inc/wlan_reg_services_api.h b/umac/regulatory/dispatcher/inc/wlan_reg_services_api.h index 8122a847fe08..7f393e91a9a8 100644 --- a/umac/regulatory/dispatcher/inc/wlan_reg_services_api.h +++ b/umac/regulatory/dispatcher/inc/wlan_reg_services_api.h @@ -632,6 +632,14 @@ QDF_STATUS regulatory_psoc_open(struct wlan_objmgr_psoc *psoc); */ QDF_STATUS regulatory_psoc_close(struct wlan_objmgr_psoc *psoc); +/** + * regulatory_pdev_open() - Open regulatory component + * @pdev: Pointer to pdev structure + * + * Return: Success or Failure + */ +QDF_STATUS regulatory_pdev_open(struct wlan_objmgr_pdev *pdev); + /** * regulatory_pdev_close() - Close regulatory component * @pdev: Pointer to pdev structure. diff --git a/umac/regulatory/dispatcher/src/wlan_reg_services_api.c b/umac/regulatory/dispatcher/src/wlan_reg_services_api.c index 4550a73e55f7..0406a1a98be0 100644 --- a/umac/regulatory/dispatcher/src/wlan_reg_services_api.c +++ b/umac/regulatory/dispatcher/src/wlan_reg_services_api.c @@ -438,6 +438,17 @@ QDF_STATUS regulatory_psoc_close(struct wlan_objmgr_psoc *psoc) return QDF_STATUS_SUCCESS; } +QDF_STATUS regulatory_pdev_open(struct wlan_objmgr_pdev *pdev) +{ + struct wlan_objmgr_psoc *parent_psoc; + + parent_psoc = wlan_pdev_get_psoc(pdev); + + reg_send_scheduler_msg_nb(parent_psoc, pdev); + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS regulatory_pdev_close(struct wlan_objmgr_pdev *pdev) { struct wlan_objmgr_psoc *psoc;