Browse Source

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
Kabilan Kannan 7 years ago
parent
commit
298329e692

+ 15 - 0
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,

+ 5 - 0
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,

+ 28 - 0
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)
 {

+ 10 - 0
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

+ 10 - 0
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,
 };
 
 /**

+ 8 - 0
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

+ 17 - 0
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)
 {