|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
|