Преглед изворни кода

Merge "qcacmn: Add support to send chan info for standby link" into wlan-cmn.driver.lnx.2.0.14

CNSS_WLAN Service пре 1 година
родитељ
комит
52158589b3

+ 11 - 3
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -50,6 +50,7 @@
 #ifdef CONNECTIVITY_DIAG_EVENT
 #include "wlan_connectivity_logging.h"
 #endif
+#include "wlan_mlme_api.h"
 
 void
 cm_fill_failure_resp_from_cm_id(struct cnx_mgr *cm_ctx,
@@ -2956,23 +2957,30 @@ static void cm_update_link_channel_info(struct wlan_objmgr_vdev *vdev,
 	struct wlan_channel channel;
 
 	pdev = wlan_vdev_get_pdev(vdev);
-
 	cache_entry = wlan_scan_get_scan_entry_by_mac_freq(pdev, mac_addr,
 							   freq);
 	if (!cache_entry) {
 		mlme_debug("not found the mac_addr from scan entry");
 		return;
 	}
-	link_id = wlan_vdev_get_link_id(vdev);
 
+	link_id = wlan_vdev_get_link_id(vdev);
 	channel.ch_freq = cache_entry->channel.chan_freq;
 	channel.ch_ieee = wlan_reg_freq_to_chan(pdev, channel.ch_freq);
 	channel.ch_phymode = cache_entry->phy_mode;
 	channel.ch_cfreq1 = cache_entry->channel.cfreq0;
 	channel.ch_cfreq2 = cache_entry->channel.cfreq1;
+	channel.ch_width =
+		wlan_mlme_get_ch_width_from_phymode(cache_entry->phy_mode);
+	/*
+	 * Supplicant needs non zero center_freq1 in case of 20 MHz connection
+	 * also as a response of get_channel request. In case of 20 MHz channel
+	 * width central frequency is same as channel frequency
+	 */
+	if (channel.ch_width == CH_WIDTH_20MHZ)
+		channel.ch_cfreq1 = channel.ch_freq;
 
 	util_scan_free_cache_entry(cache_entry);
-
 	mlo_mgr_update_ap_channel_info(vdev, link_id, (uint8_t *)mac_addr,
 				       channel);
 }

+ 22 - 1
umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -1241,4 +1241,25 @@ mlo_is_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev)
 	return false;
 }
 #endif
+
+#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
+/**
+ * mlo_mgr_get_per_link_chan_info: Get wlan channel info per link id
+ * @vdev: vdev obj
+ * @link_id: link id
+ * @chan_info: wlan channel info buffer
+ *
+ * Return: zero for success, non-zero for failure
+ */
+int mlo_mgr_get_per_link_chan_info(struct wlan_objmgr_vdev *vdev, int link_id,
+				   struct wlan_channel *chan_info);
+#else
+static inline int
+mlo_mgr_get_per_link_chan_info(struct wlan_objmgr_vdev *vdev, int link_id,
+			       struct wlan_channel *chan_info)
+{
+	return -EINVAL;
+}
+#endif
+
 #endif

+ 2 - 2
umac/mlo_mgr/src/wlan_mlo_mgr_link_switch.c

@@ -137,10 +137,10 @@ void mlo_mgr_update_ap_channel_info(struct wlan_objmgr_vdev *vdev, uint8_t link_
 	qdf_mem_copy(link_info->link_chan_info, &channel,
 		     sizeof(*link_info->link_chan_info));
 
-	mlo_debug("Update AP Channel info link_id: %d, vdev_id:%d, link_addr:" QDF_MAC_ADDR_FMT,
+	mlo_debug("update AP channel info link_id: %d, vdev_id:%d, link_addr:" QDF_MAC_ADDR_FMT,
 		  link_info->link_id, link_info->vdev_id,
 		  QDF_MAC_ADDR_REF(link_info->ap_link_addr.bytes));
-	mlo_debug("Ch_freq: %d, freq1: %d, freq2: %d phy_mode: %d",
+	mlo_debug("ch_freq: %d, freq1: %d, freq2: %d, phy_mode: %d",
 		  link_info->link_chan_info->ch_freq,
 		  link_info->link_chan_info->ch_cfreq1,
 		  link_info->link_chan_info->ch_cfreq2,

+ 18 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

@@ -316,6 +316,24 @@ static void mlo_free_copied_conn_req(struct wlan_mlo_sta *sta_ctx)
 }
 
 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
+int mlo_mgr_get_per_link_chan_info(struct wlan_objmgr_vdev *vdev, int link_id,
+				   struct wlan_channel *chan_info)
+{
+	struct mlo_link_info *ml_link_info;
+
+	ml_link_info = mlo_mgr_get_ap_link_by_link_id(vdev->mlo_dev_ctx,
+						      link_id);
+	if (!ml_link_info) {
+		mlo_debug("ml_link_info null for link_id: %d", link_id);
+		return -EINVAL;
+	}
+
+	qdf_mem_copy(chan_info, ml_link_info->link_chan_info,
+		     sizeof(*chan_info));
+
+	return 0;
+}
+
 static QDF_STATUS
 mlo_validate_connect_req(struct wlan_objmgr_vdev *vdev,
 			 struct wlan_mlo_dev_context *mlo_dev_ctx,