Pārlūkot izejas kodu

qcacld-3.0: Iterate all the links to report best RSSI

To report best RSSI of all the links, iterate through
all the active links in adapter.

Change-Id: I2cea05894e5e3e946ea604ec2965401334ee8c8b
CRs-Fixed: 3523109
Vinod Kumar Pirla 2 gadi atpakaļ
vecāks
revīzija
a4494b8fa5
1 mainītis faili ar 59 papildinājumiem un 9 dzēšanām
  1. 59 9
      core/hdd/src/wlan_hdd_stats.c

+ 59 - 9
core/hdd/src/wlan_hdd_stats.c

@@ -6236,15 +6236,63 @@ static inline void wlan_hdd_populate_mlo_snr(int32_t *snr, int32_t *link_snr)
 	*snr = QDF_MAX(*snr, *link_snr);
 }
 
-static inline void wlan_hdd_mlo_update_stats_info(struct hdd_adapter *adapter)
+#ifdef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
+static inline void
+wlan_hdd_mlo_update_stats_info(struct wlan_hdd_link_info *link_info)
+{
+	int8_t *rssi, *link_rssi;
+	uint32_t *snr, *link_snr;
+	struct wlan_objmgr_vdev *vdev;
+	struct wlan_hdd_link_info *iter_link_info;
+	struct hdd_station_ctx *sta_ctx;
+	struct hdd_adapter *adapter = link_info->adapter;
+
+	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
+
+	rssi = &link_info->hdd_stats.summary_stat.rssi;
+	snr = &link_info->hdd_stats.summary_stat.snr;
+
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
+	if (!vdev)
+		return;
+
+	/* For non ML connection just
+	 * update the values in the adapter
+	 */
+	if (!wlan_vdev_mlme_is_mlo_vdev(vdev)) {
+		hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
+		goto stat_update;
+	}
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
+
+	hdd_debug("Link0: RSSI: %d, SNR: %d", *rssi, *snr);
+	hdd_adapter_for_each_active_link_info(adapter, iter_link_info) {
+		if (link_info == iter_link_info)
+			continue;
+
+		link_rssi = &iter_link_info->hdd_stats.summary_stat.rssi;
+		wlan_hdd_populate_mlo_rssi(rssi, link_rssi);
+
+		link_snr = &iter_link_info->hdd_stats.summary_stat.snr;
+		wlan_hdd_populate_mlo_snr(snr, link_snr);
+		hdd_debug("Partner Link: RSSI: %d, SNR: %d",
+			  *link_rssi, *link_snr);
+	}
+stat_update:
+	link_info->rssi = *rssi;
+	link_info->snr = *snr;
+}
+#else
+static void wlan_hdd_mlo_update_stats_info(struct wlan_hdd_link_info *link_info)
 {
 	int8_t *rssi, *link_rssi;
 	uint32_t *snr, *link_snr;
 	uint8_t iter;
 	struct hdd_mlo_adapter_info *mlo_adapter_info;
-	struct hdd_adapter *link_adapter, *ml_adapter;
+	struct hdd_adapter *link_adapter, *ml_adapter, *adapter;
 	struct wlan_objmgr_vdev *vdev;
 
+	adapter = link_info->adapter;
 	if (hdd_adapter_is_link_adapter(adapter))
 		ml_adapter = hdd_adapter_get_mlo_adapter_from_link(adapter);
 	else
@@ -6253,7 +6301,7 @@ static inline void wlan_hdd_mlo_update_stats_info(struct hdd_adapter *adapter)
 	rssi = &ml_adapter->deflink->hdd_stats.summary_stat.rssi;
 	snr = &ml_adapter->deflink->hdd_stats.summary_stat.snr;
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink,
+	vdev = hdd_objmgr_get_vdev_by_user(link_info,
 					   WLAN_OSIF_STATS_ID);
 	if (!vdev)
 		return;
@@ -6286,14 +6334,16 @@ static inline void wlan_hdd_mlo_update_stats_info(struct hdd_adapter *adapter)
 	}
 
 stat_update:
-	adapter->deflink->rssi = *rssi;
-	adapter->deflink->snr = *snr;
+	link_info->rssi = *rssi;
+	link_info->snr = *snr;
 }
+#endif
 #else
-static inline void wlan_hdd_mlo_update_stats_info(struct hdd_adapter *adapter)
+static inline void
+wlan_hdd_mlo_update_stats_info(struct wlan_hdd_link_info *link_info)
 {
-	adapter->deflink->rssi = adapter->deflink->hdd_stats.summary_stat.rssi;
-	adapter->deflink->snr = adapter->deflink->hdd_stats.summary_stat.snr;
+	link_info->rssi = link_info->hdd_stats.summary_stat.rssi;
+	link_info->snr = link_info->hdd_stats.summary_stat.snr;
 }
 #endif
 
@@ -6576,7 +6626,7 @@ static int wlan_hdd_get_sta_stats(struct wlan_hdd_link_info *link_info,
 
 	wlan_hdd_get_peer_rx_rate_stats(link_info);
 
-	wlan_hdd_mlo_update_stats_info(adapter);
+	wlan_hdd_mlo_update_stats_info(link_info);
 
 	wlan_hdd_update_rssi(link_info, sinfo);