Просмотр исходного кода

qcacld-3.0: support ml through new netdev model

Remove the wdev reistration/unregistration for link wdev's
and support the open association through new netdev model.

Change-Id: I3f5c5e969bec4430ad8812073e396cba87c0e27b
CRs-Fixed: 3241850
Arun Kumar Khandavalli 2 лет назад
Родитель
Сommit
13e8cb80f9
2 измененных файлов с 62 добавлено и 17 удалено
  1. 3 1
      core/hdd/src/wlan_hdd_main.c
  2. 59 16
      core/hdd/src/wlan_hdd_mlo.c

+ 3 - 1
core/hdd/src/wlan_hdd_main.c

@@ -3106,7 +3106,9 @@ static bool hdd_max_sta_interface_up_count_reached(struct hdd_adapter *adapter)
 	return false;
 }
 
-#if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_IFTYPE_MLO_LINK_SUPPORT)
+#if defined(WLAN_FEATURE_11BE_MLO) && \
+(defined(CFG80211_IFTYPE_MLO_LINK_SUPPORT) || \
+defined(CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT))
 static int hdd_start_link_adapter(struct hdd_adapter *sta_adapter)
 {
 	int i, ret = 0;

+ 59 - 16
core/hdd/src/wlan_hdd_mlo.c

@@ -80,25 +80,60 @@ uint8_t *wlan_hdd_get_mld_addr(struct hdd_context *hdd_ctx, uint8_t device_mode)
 	return mac_info->mld_mac_list[i].mld_addr.bytes;
 }
 
-void hdd_register_wdev(struct hdd_adapter *sta_adapter,
-		       struct hdd_adapter *link_adapter,
-		       struct hdd_adapter_create_param *adapter_params)
+#ifndef CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT
+static
+void wlan_hdd_register_ml_link(struct hdd_adapter *sta_adapter,
+			       struct hdd_adapter *link_adapter)
 {
-	int ret, i;
+	int ret;
 
-	hdd_enter_dev(sta_adapter->dev);
-	/* Set the relation between adapters*/
 	link_adapter->wdev.iftype = NL80211_IFTYPE_MLO_LINK;
-
 	mutex_lock(&sta_adapter->wdev.mtx);
 	ret = cfg80211_register_sta_mlo_link(&sta_adapter->wdev,
 					     &link_adapter->wdev);
 	mutex_unlock(&sta_adapter->wdev.mtx);
+
 	if (ret) {
 		hdd_err("Failed to register ml link wdev %d", ret);
 		return;
 	}
+}
+
+static
+void wlan_hdd_unregister_ml_link(struct hdd_adapter *link_adapter,
+				 bool rtnl_held)
+{
+	if (rtnl_held)
+		rtnl_unlock();
+
+	cfg80211_unregister_wdev(&link_adapter->wdev);
+
+	if (rtnl_held)
+		rtnl_lock();
+}
+#else
+static
+void wlan_hdd_register_ml_link(struct hdd_adapter *sta_adapter,
+			       struct hdd_adapter *link_adapter)
+{
+}
+
+static
+void wlan_hdd_unregister_ml_link(struct hdd_adapter *link_adapter,
+				 bool rtnl_held)
+{
+}
+#endif
+
+void hdd_register_wdev(struct hdd_adapter *sta_adapter,
+		       struct hdd_adapter *link_adapter,
+		       struct hdd_adapter_create_param *adapter_params)
+{
+	int  i;
 
+	hdd_enter_dev(sta_adapter->dev);
+	/* Set the relation between adapters*/
+	wlan_hdd_register_ml_link(sta_adapter, link_adapter);
 	sta_adapter->mlo_adapter_info.is_ml_adapter = true;
 	sta_adapter->mlo_adapter_info.is_link_adapter = false;
 	link_adapter->mlo_adapter_info.is_link_adapter = true;
@@ -136,15 +171,9 @@ void hdd_mlo_close_adapter(struct hdd_adapter *link_adapter, bool rtnl_held)
 					  link_adapter->device_mode);
 	link_adapter->wdev.netdev = NULL;
 
-	if (rtnl_held)
-		rtnl_unlock();
-
-	cfg80211_unregister_wdev(&link_adapter->wdev);
+	wlan_hdd_unregister_ml_link(link_adapter, rtnl_held);
 	free_netdev(link_adapter->dev);
 
-	if (rtnl_held)
-		rtnl_lock();
-
 	if (vdev_sync)
 		osif_vdev_sync_destroy(vdev_sync);
 }
@@ -261,6 +290,21 @@ QDF_STATUS hdd_check_for_existing_mldaddr(struct hdd_context *hdd_ctx,
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifndef CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT
+static inline
+void wlan_hdd_populate_mld_address(struct hdd_adapter *adapter,
+				   uint8_t *mld_addr)
+{
+	qdf_mem_copy(adapter->wdev.mld_address, mld_addr,
+		     QDF_NET_MAC_ADDR_MAX_LEN);
+}
+#else
+static inline
+void wlan_hdd_populate_mld_address(struct hdd_adapter *adapter,
+				   uint8_t *mld_addr)
+{
+}
+#endif
 void
 hdd_populate_mld_vdev_params(struct hdd_adapter *adapter,
 			     struct wlan_vdev_create_params *vdev_params)
@@ -292,10 +336,9 @@ hdd_populate_mld_vdev_params(struct hdd_adapter *adapter,
 		}
 		qdf_mem_copy(vdev_params->mldaddr, mld_addr,
 			     QDF_NET_MAC_ADDR_MAX_LEN);
-		qdf_mem_copy(adapter->wdev.mld_address, mld_addr,
-			     QDF_NET_MAC_ADDR_MAX_LEN);
 		qdf_mem_copy(adapter->mld_addr.bytes, mld_addr,
 			     QDF_NET_MAC_ADDR_MAX_LEN);
+		wlan_hdd_populate_mld_address(adapter, mld_addr);
 	}
 }