From 298329e6929bfdb992a51883ae977ffe4f8ce4fe Mon Sep 17 00:00:00 2001 From: Kabilan Kannan Date: Tue, 6 Jun 2017 19:40:03 -0700 Subject: [PATCH] qcacmn: Restructure TDLS function to fix the compilation issue When TDLS disabled at the build level, it triggers build failures in some of the projects, which does not support TDLS feature. Restructure the TDLS function to avoid build failures, when TDLS is not enabled. Change-Id: I3b63546f22d0187fb42d400fd7e15ff7a3d64653 CRs-Fixed: 2056022 --- os_if/linux/tdls/inc/wlan_cfg80211_tdls.h | 15 ++++++++++ os_if/linux/tdls/src/wlan_cfg80211_tdls.c | 5 ++++ umac/tdls/core/src/wlan_tdls_main.c | 28 +++++++++++++++++++ umac/tdls/core/src/wlan_tdls_main.h | 10 +++++++ .../dispatcher/inc/wlan_tdls_public_structs.h | 10 +++++++ umac/tdls/dispatcher/inc/wlan_tdls_ucfg_api.h | 8 ++++++ umac/tdls/dispatcher/src/wlan_tdls_ucfg_api.c | 17 +++++++++++ 7 files changed, 93 insertions(+) diff --git a/os_if/linux/tdls/inc/wlan_cfg80211_tdls.h b/os_if/linux/tdls/inc/wlan_cfg80211_tdls.h index 812c8bccfc9c..9dc2da3bfc02 100644 --- a/os_if/linux/tdls/inc/wlan_cfg80211_tdls.h +++ b/os_if/linux/tdls/inc/wlan_cfg80211_tdls.h @@ -193,6 +193,16 @@ void wlan_cfg80211_tdls_event_callback(void *userdata, void wlan_cfg80211_tdls_rx_callback(void *user_data, struct tdls_rx_mgmt_frame *rx_frame); +/** + * hdd_notify_tdls_reset_adapter() - notify reset adapter to TDLS + * @vdev: vdev object manager + * + * Notify hdd reset adapter to TDLS component + * + * Return: None + */ +void hdd_notify_tdls_reset_adapter(struct wlan_objmgr_vdev *vdev); + /** * hdd_notify_sta_connect() - notify sta connect to TDLS * @session_id: pointer to soc object @@ -236,6 +246,11 @@ void hdd_notify_sta_disconnect(uint8_t session_id, void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev); #else +static inline void +hdd_notify_tdls_reset_adapter(struct wlan_objmgr_vdev *vdev) +{ +} + static inline void hdd_notify_sta_connect(uint8_t session_id, bool tdls_chan_swit_prohibited, diff --git a/os_if/linux/tdls/src/wlan_cfg80211_tdls.c b/os_if/linux/tdls/src/wlan_cfg80211_tdls.c index 7aa155afcbc6..27803c75ea6e 100644 --- a/os_if/linux/tdls/src/wlan_cfg80211_tdls.c +++ b/os_if/linux/tdls/src/wlan_cfg80211_tdls.c @@ -104,6 +104,11 @@ void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev) cfg80211_info("TDLS teardown completion status %ld ", rc); } +void hdd_notify_tdls_reset_adapter(struct wlan_objmgr_vdev *vdev) +{ + ucfg_tdls_notify_reset_adapter(vdev); +} + void hdd_notify_sta_connect(uint8_t session_id, bool tdls_chan_swit_prohibited, diff --git a/umac/tdls/core/src/wlan_tdls_main.c b/umac/tdls/core/src/wlan_tdls_main.c index 5ce0596f0e3c..b894ba7d0d97 100644 --- a/umac/tdls/core/src/wlan_tdls_main.c +++ b/umac/tdls/core/src/wlan_tdls_main.c @@ -290,6 +290,9 @@ QDF_STATUS tdls_process_cmd(struct scheduler_msg *msg) case TDLS_CMD_TEARDOWN_LINKS: tdls_teardown_connections(msg->bodyptr); break; + case TDLS_NOTIFY_RESET_ADAPTERS: + tdls_notify_reset_adapter(msg->bodyptr); + break; default: break; } @@ -982,6 +985,31 @@ QDF_STATUS tdls_notify_sta_disconnect(struct tdls_sta_notify_params *notify) return status; } +static void tdls_process_reset_adapter(struct wlan_objmgr_vdev *vdev) +{ + struct tdls_vdev_priv_obj *tdls_vdev; + + tdls_vdev = wlan_vdev_get_tdls_vdev_obj(vdev); + if (!tdls_vdev) + return; + tdls_timers_stop(tdls_vdev); +} + +void tdls_notify_reset_adapter(struct wlan_objmgr_vdev *vdev) +{ + if (!vdev) { + QDF_ASSERT(0); + return; + } + + if (QDF_STATUS_SUCCESS != wlan_objmgr_vdev_try_get_ref(vdev, + WLAN_TDLS_NB_ID)) + return; + + tdls_process_reset_adapter(vdev); + wlan_objmgr_vdev_release_ref(vdev, WLAN_TDLS_NB_ID); +} + void tdls_peers_deleted_notification(struct wlan_objmgr_vdev *vdev, uint32_t session_id) { diff --git a/umac/tdls/core/src/wlan_tdls_main.h b/umac/tdls/core/src/wlan_tdls_main.h index f9f657a6055d..58aa9cd2eb1c 100644 --- a/umac/tdls/core/src/wlan_tdls_main.h +++ b/umac/tdls/core/src/wlan_tdls_main.h @@ -575,6 +575,16 @@ QDF_STATUS tdls_notify_sta_connect(struct tdls_sta_notify_params *notify); */ QDF_STATUS tdls_notify_sta_disconnect(struct tdls_sta_notify_params *notify); +/** + * tdls_notify_reset_adapter() - notify reset adapter + * @vdev: vdev object manager + * + * Notify TDLS about the adapter reset + * + * Return: None + */ +void tdls_notify_reset_adapter(struct wlan_objmgr_vdev *vdev); + /** * tdls_peers_deleted_notification() - peer delete notification * @vdev: vdev object diff --git a/umac/tdls/dispatcher/inc/wlan_tdls_public_structs.h b/umac/tdls/dispatcher/inc/wlan_tdls_public_structs.h index 974fca313b81..4691869ffacd 100644 --- a/umac/tdls/dispatcher/inc/wlan_tdls_public_structs.h +++ b/umac/tdls/dispatcher/inc/wlan_tdls_public_structs.h @@ -172,6 +172,15 @@ enum tdls_feature_mode { * @TDLS_CMD_REMOVE_FORCE_PEER: remove external peer * @TDLS_CMD_STATS_UPDATE: update tdls stats * @TDLS_CMD_CONFIG_UPDATE: config tdls + * @TDLS_CMD_SCAN_DONE: scon done event + * @TDLS_CMD_SET_RESPONDER: responder event + * @TDLS_NOTIFY_STA_CONNECTION: notify sta connection + * @TDLS_NOTIFY_STA_DISCONNECTION: notify sta disconnection + * @TDLS_CMD_SET_TDLS_MODE: set the tdls mode + * @TDLS_CMD_SESSION_INCREMENT: notify session increment + * @TDLS_CMD_SESSION_DECREMENT: notify session decrement + * @TDLS_CMD_TEARDOWN_LINKS: notify teardown + * @TDLS_NOTIFY_RESET_ADAPTERS: notify adapater reset */ enum tdls_command_type { TDLS_CMD_TX_ACTION = 1, @@ -191,6 +200,7 @@ enum tdls_command_type { TDLS_CMD_SESSION_INCREMENT, TDLS_CMD_SESSION_DECREMENT, TDLS_CMD_TEARDOWN_LINKS, + TDLS_NOTIFY_RESET_ADAPTERS, }; /** diff --git a/umac/tdls/dispatcher/inc/wlan_tdls_ucfg_api.h b/umac/tdls/dispatcher/inc/wlan_tdls_ucfg_api.h index 5d99669740ab..0a06658fe8b7 100644 --- a/umac/tdls/dispatcher/inc/wlan_tdls_ucfg_api.h +++ b/umac/tdls/dispatcher/inc/wlan_tdls_ucfg_api.h @@ -146,6 +146,14 @@ QDF_STATUS ucfg_tdls_responder(struct tdls_set_responder_req *msg_req); */ QDF_STATUS ucfg_tdls_teardown_links(struct wlan_objmgr_vdev *vdev); +/** + * ucfg_tdls_notify_reset_adapter() - notify reset adapter + * @vdev: vdev object manager + * + * Return: QDF_STATUS + */ +QDF_STATUS ucfg_tdls_notify_reset_adapter(struct wlan_objmgr_vdev *vdev); + /** * ucfg_tdls_notify_sta_connect() - notify sta connect * @notify_info: sta notification info diff --git a/umac/tdls/dispatcher/src/wlan_tdls_ucfg_api.c b/umac/tdls/dispatcher/src/wlan_tdls_ucfg_api.c index 9bb85352bcea..67517aabc3aa 100644 --- a/umac/tdls/dispatcher/src/wlan_tdls_ucfg_api.c +++ b/umac/tdls/dispatcher/src/wlan_tdls_ucfg_api.c @@ -569,6 +569,23 @@ QDF_STATUS ucfg_tdls_teardown_links(struct wlan_objmgr_vdev *vdev) return status; } +QDF_STATUS ucfg_tdls_notify_reset_adapter(struct wlan_objmgr_vdev *vdev) +{ + QDF_STATUS status; + struct scheduler_msg msg = {0, }; + + if (!vdev) { + tdls_err("vdev is NULL "); + return QDF_STATUS_E_NULL_VALUE; + } + tdls_debug("Enter "); + msg.bodyptr = vdev; + msg.callback = tdls_process_cmd; + msg.type = TDLS_NOTIFY_RESET_ADAPTERS; + status = scheduler_post_msg(QDF_MODULE_ID_OS_IF, &msg); + return status; +} + QDF_STATUS ucfg_tdls_notify_sta_connect( struct tdls_sta_notify_params *notify_info) {