|
@@ -377,14 +377,17 @@ QDF_STATUS hdd_derive_link_address_from_mld(struct wlan_objmgr_psoc *psoc,
|
|
|
|
|
|
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
|
|
|
#ifdef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
|
|
|
-static void hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter)
|
|
|
+bool hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter,
|
|
|
+ bool same_vdev_mac_map)
|
|
|
{
|
|
|
int i;
|
|
|
+ bool mapping_changed = false;
|
|
|
unsigned long link_flags;
|
|
|
uint8_t vdev_id, cur_link_idx, temp_link_idx;
|
|
|
struct vdev_osif_priv *osif_priv;
|
|
|
struct wlan_objmgr_vdev *vdev;
|
|
|
struct wlan_hdd_link_info *temp_link_info, *link_info;
|
|
|
+ struct qdf_mac_addr temp_mac;
|
|
|
|
|
|
hdd_adapter_for_each_link_info(adapter, link_info) {
|
|
|
cur_link_idx = hdd_adapter_get_index_of_link_info(link_info);
|
|
@@ -437,6 +440,14 @@ static void hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter)
|
|
|
osif_priv->legacy_osif_priv = link_info;
|
|
|
}
|
|
|
|
|
|
+ /* Preserve the VDEV-MAC mapping if requested */
|
|
|
+ if (same_vdev_mac_map) {
|
|
|
+ qdf_copy_macaddr(&temp_mac, &temp_link_info->link_addr);
|
|
|
+ qdf_copy_macaddr(&temp_link_info->link_addr,
|
|
|
+ &link_info->link_addr);
|
|
|
+ qdf_copy_macaddr(&link_info->link_addr, &temp_mac);
|
|
|
+ }
|
|
|
+
|
|
|
/* Swap link flags */
|
|
|
link_flags = temp_link_info->link_flags;
|
|
|
temp_link_info->link_flags = link_info->link_flags;
|
|
@@ -448,8 +459,14 @@ static void hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter)
|
|
|
adapter->curr_link_info_map[temp_link_idx] =
|
|
|
adapter->curr_link_info_map[cur_link_idx];
|
|
|
adapter->curr_link_info_map[cur_link_idx] = cur_link_idx;
|
|
|
+
|
|
|
+ if (!mapping_changed)
|
|
|
+ mapping_changed = true;
|
|
|
}
|
|
|
- hdd_adapter_disable_all_links(adapter);
|
|
|
+
|
|
|
+ hdd_adapter_disable_all_links(adapter, !same_vdev_mac_map);
|
|
|
+
|
|
|
+ return mapping_changed;
|
|
|
}
|
|
|
|
|
|
int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
|
|
@@ -483,7 +500,7 @@ int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
|
|
|
if (QDF_IS_STATUS_ERROR(status))
|
|
|
return qdf_status_to_os_return(status);
|
|
|
|
|
|
- hdd_adapter_restore_link_vdev_map(adapter);
|
|
|
+ hdd_adapter_restore_link_vdev_map(adapter, false);
|
|
|
|
|
|
i = 0;
|
|
|
hdd_adapter_for_each_active_link_info(adapter, link_info) {
|