Эх сурвалжийг харах

qcacmn: Add changes to support link_id param in cfg80211_disconnected

As part of MLO dynamic link deletion handling, cfg80211_disconnected is
taking link_id as an argument.
Add changes to support link_id param in cfg80211_disconnected.

Change-Id: Ia312b5e5768ba9abb11675839e912d4819a2fa86
CRs-Fixed: 3315102
Himanshu Batra 2 жил өмнө
parent
commit
80db72a890

+ 1 - 1
os_if/linux/mlme/src/osif_cm_connect_rsp.c

@@ -1121,7 +1121,7 @@ QDF_STATUS osif_connect_handler(struct wlan_objmgr_vdev *vdev,
 		 QDF_IS_STATUS_ERROR(rsp->connect_status))
 		osif_cm_indicate_disconnect(vdev, osif_priv->wdev->netdev,
 					    WLAN_REASON_UNSPECIFIED,
-					    false, NULL, 0,
+					    false, NULL, 0, -1,
 					    qdf_mem_malloc_flags());
 	else
 		osif_indcate_connect_results(vdev, osif_priv, rsp);

+ 61 - 14
os_if/linux/mlme/src/osif_cm_disconnect_rsp.c

@@ -80,6 +80,43 @@ rel_lock:
 
 #if defined(CFG80211_DISCONNECTED_V2) || \
 (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
+#ifdef CONN_MGR_ADV_FEATURE
+static void
+osif_cm_indicate_disconnect_result(struct net_device *dev,
+				   enum ieee80211_reasoncode reason,
+				   const u8 *ie, size_t ie_len,
+				   bool locally_generated, int link_id,
+				   gfp_t gfp)
+{
+	cfg80211_disconnected(dev, reason, ie,
+			      ie_len, locally_generated, gfp);
+}
+#else
+#ifdef WLAN_SUPPORT_CFG80211_DISCONNECT_LINK_PARAM
+static void
+osif_cm_indicate_disconnect_result(struct net_device *dev,
+				   enum ieee80211_reasoncode reason,
+				   const u8 *ie, size_t ie_len,
+				   bool locally_generated, int link_id,
+				   gfp_t gfp)
+{
+	cfg80211_disconnected(dev, reason, ie,
+			      ie_len, locally_generated, link_id, gfp);
+}
+#else
+static void
+osif_cm_indicate_disconnect_result(struct net_device *dev,
+				   enum ieee80211_reasoncode reason,
+				   const u8 *ie, size_t ie_len,
+				   bool locally_generated, int link_id,
+				   gfp_t gfp)
+{
+	cfg80211_disconnected(dev, reason, ie,
+			      ie_len, locally_generated, gfp);
+}
+#endif /* WLAN_SUPPORT_CFG80211_DISCONNECT_LINK_PARAM */
+#endif
+
 #ifdef WLAN_FEATURE_11BE_MLO
 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
 void
@@ -87,15 +124,19 @@ osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
 			    struct net_device *dev,
 			    enum ieee80211_reasoncode reason,
 			    bool locally_generated, const u8 *ie,
-			    size_t ie_len, gfp_t gfp)
+			    size_t ie_len, int link_id, gfp_t gfp)
 {
 	if (wlan_vdev_mlme_is_mlo_vdev(vdev)) {
 		if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev))
-			cfg80211_disconnected(dev, reason, ie,
-					      ie_len, locally_generated, gfp);
+			osif_cm_indicate_disconnect_result(
+					dev, reason, ie,
+					ie_len, locally_generated,
+					link_id, gfp);
 	} else {
-		cfg80211_disconnected(dev, reason, ie,
-				      ie_len, locally_generated, gfp);
+		osif_cm_indicate_disconnect_result(
+				dev, reason, ie,
+				ie_len, locally_generated,
+				link_id, gfp);
 	}
 }
 #else /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
@@ -104,15 +145,16 @@ osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
 			    struct net_device *dev,
 			    enum ieee80211_reasoncode reason,
 			    bool locally_generated, const u8 *ie,
-			    size_t ie_len, gfp_t gfp)
+			    size_t ie_len, int link_id, gfp_t gfp)
 {
 	struct net_device *netdev = dev;
 	struct vdev_osif_priv *osif_priv = NULL;
 	struct wlan_objmgr_vdev *assoc_vdev = NULL;
 
 	if (!wlan_vdev_mlme_is_mlo_vdev(vdev)) {
-		cfg80211_disconnected(netdev, reason, ie, ie_len,
-				      locally_generated, gfp);
+		osif_cm_indicate_disconnect_result(
+				netdev, reason, ie, ie_len,
+				locally_generated, link_id, gfp);
 		return;
 	}
 
@@ -122,9 +164,10 @@ osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
 			return;
 		osif_priv  = wlan_vdev_get_ospriv(assoc_vdev);
 		netdev = osif_priv->wdev->netdev;
-		cfg80211_disconnected(netdev, reason,
-				      ie, ie_len,
-				      locally_generated, gfp);
+		osif_cm_indicate_disconnect_result(
+				netdev, reason,
+				ie, ie_len,
+				locally_generated, link_id, gfp);
 	}
 }
 #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
@@ -134,9 +177,11 @@ osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
 			    struct net_device *dev,
 			    enum ieee80211_reasoncode reason,
 			    bool locally_generated, const u8 *ie,
-			    size_t ie_len, gfp_t gfp)
+			    size_t ie_len, int link_id, gfp_t gfp)
 {
-	cfg80211_disconnected(dev, reason, ie, ie_len, locally_generated, gfp);
+	osif_cm_indicate_disconnect_result(dev, reason, ie,
+					   ie_len, locally_generated,
+					   link_id, gfp);
 }
 #endif /* WLAN_FEATURE_11BE_MLO */
 #else
@@ -145,7 +190,7 @@ osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
 			    struct net_device *dev,
 			    enum ieee80211_reasoncode reason,
 			    bool locally_generated, const u8 *ie,
-			    size_t ie_len, gfp_t gfp)
+			    size_t ie_len, int link_id, gfp_t gfp)
 {
 	cfg80211_disconnected(dev, reason, ie, ie_len, gfp);
 }
@@ -197,6 +242,7 @@ QDF_STATUS osif_disconnect_handler(struct wlan_objmgr_vdev *vdev,
 	bool locally_generated = true;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	enum qca_disconnect_reason_codes qca_reason;
+	int link_id = -1;
 
 	qca_reason = osif_cm_mac_to_qca_reason(rsp->req.req.reason_code);
 	ieee80211_reason =
@@ -233,6 +279,7 @@ QDF_STATUS osif_disconnect_handler(struct wlan_objmgr_vdev *vdev,
 				    ieee80211_reason,
 				    locally_generated, rsp->ap_discon_ie.ptr,
 				    rsp->ap_discon_ie.len,
+				    link_id,
 				    qdf_mem_malloc_flags());
 
 	osif_cm_disconnect_comp_ind(vdev, rsp, OSIF_POST_USERSPACE_UPDATE);

+ 3 - 2
os_if/linux/mlme/src/osif_cm_rsp.h

@@ -137,13 +137,13 @@ QDF_STATUS osif_failed_candidate_handler(struct wlan_objmgr_vdev *vdev,
 
 /**
  * osif_cm_indicate_disconnect - notify osif that connection was dropped
- *
  * @vdev: pointer to vdev
  * @dev: network device
  * @reason: reason code for the disconnection, set it to 0 if unknown
  * @locally_generated: disconnection was requested locally
  * @ie: information elements of the deauth/disassoc frame (may be %NULL)
  * @ie_len: length of IEs
+ * @link_id: MLO link id needed for dynamic link removal
  * @gfp: allocation flags
  *
  * After it calls this function, the driver should enter an idle state
@@ -154,7 +154,8 @@ osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
 			    struct net_device *dev,
 			    enum ieee80211_reasoncode reason,
 			    bool locally_generated, const u8 *ie,
-			    size_t ie_len, gfp_t gfp);
+			    size_t ie_len, int link_id,
+			    gfp_t gfp);
 
 #ifdef WLAN_FEATURE_11BE_MLO
 /**