Преглед на файлове

qcacmn: Send TDLS set state disable command in concurrency

TDLS is not supported in concurrency and FW expects set state disable
command in concurrency. Currently, disable command is sent only if the
active connection is present when second interface comes up.

Send disable command to FW irrespecive of active TDLS connections.

Change-Id: I0716a6caf76a8a69da2225f22e385ce259c231b6
CRs-Fixed: 2305714
Bala Venkatesh преди 6 години
родител
ревизия
10a46e915b
променени са 3 файла, в които са добавени 39 реда и са изтрити 25 реда
  1. 7 0
      core/src/wlan_tdls_ct.c
  2. 6 25
      core/src/wlan_tdls_main.c
  3. 26 0
      core/src/wlan_tdls_main.h

+ 7 - 0
core/src/wlan_tdls_ct.c

@@ -1180,6 +1180,7 @@ void tdls_disable_offchan_and_teardown_links(
 	struct tdls_vdev_priv_obj *tdls_vdev;
 	struct tdls_soc_priv_obj *tdls_soc;
 	QDF_STATUS status;
+	uint8_t vdev_id;
 
 	status = tdls_get_vdev_objects(vdev, &tdls_vdev, &tdls_soc);
 	if (QDF_STATUS_SUCCESS != status) {
@@ -1197,6 +1198,12 @@ void tdls_disable_offchan_and_teardown_links(
 
 	if (!connected_tdls_peers) {
 		tdls_notice("No TDLS connected peers to delete");
+		vdev_id = vdev->vdev_objmgr.vdev_id;
+		if (tdls_soc->set_state_info.set_state_cnt > 0) {
+			tdls_debug("Disable the tdls in FW as second interface is coming up");
+			tdls_send_update_to_fw(tdls_vdev, tdls_soc, true,
+					       true, false, vdev_id);
+		}
 		return;
 	}
 

+ 6 - 25
core/src/wlan_tdls_main.c

@@ -717,31 +717,12 @@ void tdls_notify_decrement_session(struct wlan_objmgr_psoc *psoc)
 	tdls_process_session_update(psoc, TDLS_CMD_SESSION_DECREMENT);
 }
 
-/**
- * tdls_send_update_to_fw - update tdls status info
- * @tdls_vdev_obj: tdls vdev private object.
- * @tdls_prohibited: indicates whether tdls is prohibited.
- * @tdls_chan_swit_prohibited: indicates whether tdls channel switch
- *                             is prohibited.
- * @sta_connect_event: indicate sta connect or disconnect event
- * @session_id: session id
- *
- * Normally an AP does not influence TDLS connection between STAs
- * associated to it. But AP may set bits for TDLS Prohibited or
- * TDLS Channel Switch Prohibited in Extended Capability IE in
- * Assoc/Re-assoc response to STA. So after STA is connected to
- * an AP, call this function to update TDLS status as per those
- * bits set in Ext Cap IE in received Assoc/Re-assoc response
- * from AP.
- *
- * Return: None.
- */
-static void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
-				   struct tdls_soc_priv_obj *tdls_soc_obj,
-				   bool tdls_prohibited,
-				   bool tdls_chan_swit_prohibited,
-				   bool sta_connect_event,
-				   uint8_t session_id)
+void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
+			    struct tdls_soc_priv_obj *tdls_soc_obj,
+			    bool tdls_prohibited,
+			    bool tdls_chan_swit_prohibited,
+			    bool sta_connect_event,
+			    uint8_t session_id)
 {
 	struct tdls_info *tdls_info_to_fw;
 	struct tdls_config_params *threshold_params;

+ 26 - 0
core/src/wlan_tdls_main.h

@@ -616,6 +616,32 @@ QDF_STATUS tdls_peers_deleted_notification(
  */
 void tdls_notify_decrement_session(struct wlan_objmgr_psoc *psoc);
 
+/**
+ * tdls_send_update_to_fw - update tdls status info
+ * @tdls_vdev_obj: tdls vdev private object.
+ * @tdls_prohibited: indicates whether tdls is prohibited.
+ * @tdls_chan_swit_prohibited: indicates whether tdls channel switch
+ *                             is prohibited.
+ * @sta_connect_event: indicate sta connect or disconnect event
+ * @session_id: session id
+ *
+ * Normally an AP does not influence TDLS connection between STAs
+ * associated to it. But AP may set bits for TDLS Prohibited or
+ * TDLS Channel Switch Prohibited in Extended Capability IE in
+ * Assoc/Re-assoc response to STA. So after STA is connected to
+ * an AP, call this function to update TDLS status as per those
+ * bits set in Ext Cap IE in received Assoc/Re-assoc response
+ * from AP.
+ *
+ * Return: None.
+ */
+void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
+			    struct tdls_soc_priv_obj *tdls_soc_obj,
+			    bool tdls_prohibited,
+			    bool tdls_chan_swit_prohibited,
+			    bool sta_connect_event,
+			    uint8_t session_id);
+
 /**
  * tdls_notify_increment_session() - Notify the session increment
  * @psoc: psoc  object manager