Browse Source

qcacld-3.0: Move big data stats to per link data structure

To save per link big data stats received from FW and later send to
userspace, move the big_data_stats member in adapter to link_info.
Update the existing references to deflink in adapter.

Change-Id: I0b68e60f51c4f7b9dbe996d71754530f53350cb2
CRs-Fixed: 3518185
Vinod Kumar Pirla 1 year ago
parent
commit
399b45759d

+ 4 - 4
core/hdd/inc/wlan_hdd_main.h

@@ -1027,6 +1027,7 @@ enum udp_qos_upgrade {
  * @is_mlo_vdev_active: is the mlo vdev currently active
  * @estimated_linkspeed: estimated link speed
  * @hdd_stats: HDD statistics
+ * @big_data_stats: Big data stats
  * @ll_iface_stats: Link Layer interface stats
  * @mscs_prev_tx_vo_pkts: count of prev VO AC packets transmitted
  * @mscs_counter: Counter on MSCS action frames sent
@@ -1055,6 +1056,9 @@ struct wlan_hdd_link_info {
 	bool is_mlo_vdev_active;
 	uint32_t estimated_linkspeed;
 	struct hdd_stats hdd_stats;
+#ifdef WLAN_FEATURE_BIG_DATA_STATS
+	struct big_data_stats_event big_data_stats;
+#endif
 #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
 	struct wifi_interface_stats ll_iface_stats;
 #endif
@@ -1189,7 +1193,6 @@ struct wlan_hdd_tx_power {
  * progress, and any operation using rtnl lock inside
  * the driver can be avoided/skipped.
  * @is_virtual_iface: Indicates that netdev is called from virtual interface
- * @big_data_stats:
  * @mon_adapter: hdd_adapter of monitor mode.
  * @mlo_adapter_info:
  * @set_mac_addr_req_ctx: Set MAC address command request context
@@ -1365,9 +1368,6 @@ struct hdd_adapter {
 	qdf_atomic_t net_dev_hold_ref_count[NET_DEV_HOLD_ID_MAX];
 	bool delete_in_progress;
 	bool is_virtual_iface;
-#ifdef WLAN_FEATURE_BIG_DATA_STATS
-	struct big_data_stats_event big_data_stats;
-#endif
 #ifdef WLAN_FEATURE_PKT_CAPTURE
 	struct hdd_adapter *mon_adapter;
 #endif

+ 37 - 36
core/hdd/src/wlan_hdd_station_info.c

@@ -1973,7 +1973,7 @@ hdd_add_pmf_bcn_protect_stats(struct sk_buff *skb,
 /**
  * hdd_get_big_data_stats_len - get data length used in
  * hdd_big_data_pack_resp_nlmsg()
- * @adapter: hdd adapter
+ * @link_info: Link info pointer in HDD adapter.
  *
  * This function calculates the data length used in
  * hdd_big_data_pack_resp_nlmsg()
@@ -1981,18 +1981,19 @@ hdd_add_pmf_bcn_protect_stats(struct sk_buff *skb,
  * Return: total data length used in hdd_big_data_pack_resp_nlmsg()
  */
 static uint32_t
-hdd_get_big_data_stats_len(struct hdd_adapter *adapter)
+hdd_get_big_data_stats_len(struct wlan_hdd_link_info *link_info)
 {
 	uint32_t len;
+	struct big_data_stats_event *big_data_stats =
+					&link_info->big_data_stats;
 
-	len =
-	nla_total_size(sizeof(adapter->big_data_stats.last_tx_data_rate_kbps)) +
-	nla_total_size(sizeof(adapter->big_data_stats.target_power_ofdm)) +
-	nla_total_size(sizeof(adapter->big_data_stats.target_power_dsss)) +
-	nla_total_size(sizeof(adapter->big_data_stats.last_tx_data_rix)) +
-	nla_total_size(sizeof(adapter->big_data_stats.tsf_out_of_sync)) +
-	nla_total_size(sizeof(adapter->big_data_stats.ani_level)) +
-	nla_total_size(sizeof(adapter->big_data_stats.last_data_tx_pwr));
+	len = nla_total_size(sizeof(big_data_stats->last_tx_data_rate_kbps)) +
+	      nla_total_size(sizeof(big_data_stats->target_power_ofdm)) +
+	      nla_total_size(sizeof(big_data_stats->target_power_dsss)) +
+	      nla_total_size(sizeof(big_data_stats->last_tx_data_rix)) +
+	      nla_total_size(sizeof(big_data_stats->tsf_out_of_sync)) +
+	      nla_total_size(sizeof(big_data_stats->ani_level)) +
+	      nla_total_size(sizeof(big_data_stats->last_data_tx_pwr));
 
 	/** Add len of roam params **/
 	len += nla_total_size(sizeof(uint32_t)) * 3;
@@ -2003,27 +2004,27 @@ hdd_get_big_data_stats_len(struct hdd_adapter *adapter)
 /**
  * hdd_big_data_pack_resp_nlmsg() - pack big data nl resp msg
  * @skb: pointer to response skb buffer
- * @adapter: adapter holding big data stats
- * @hdd_ctx: hdd context
+ * @link_info: Link info pointer in HDD adapter
  *
  * This function adds big data stats in response.
  *
  * Return: 0 on success
  */
-static int
-hdd_big_data_pack_resp_nlmsg(struct sk_buff *skb,
-			     struct hdd_adapter *adapter,
-			     struct hdd_context *hdd_ctx)
+static int hdd_big_data_pack_resp_nlmsg(struct sk_buff *skb,
+					struct wlan_hdd_link_info *link_info)
 {
 	struct hdd_station_ctx *hdd_sta_ctx;
+	struct hdd_context *hdd_ctx = link_info->adapter->hdd_ctx;
+	struct big_data_stats_event *big_data_stats =
+					&link_info->big_data_stats;
 
-	hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter->deflink);
+	hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
 	if (!hdd_sta_ctx) {
 		hdd_err("Invalid station context");
 		return -EINVAL;
 	}
 	if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_RATE,
-			adapter->big_data_stats.last_tx_data_rate_kbps)){
+			big_data_stats->last_tx_data_rate_kbps)){
 		hdd_err("latest tx rate put fail");
 		return -EINVAL;
 	}
@@ -2032,7 +2033,7 @@ hdd_big_data_pack_resp_nlmsg(struct sk_buff *skb,
 		if (nla_put_u32(
 			skb,
 			QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_5G_6MBPS,
-			adapter->big_data_stats.target_power_ofdm)){
+			big_data_stats->target_power_ofdm)){
 			hdd_err("5G ofdm power put fail");
 			return -EINVAL;
 		}
@@ -2041,51 +2042,51 @@ hdd_big_data_pack_resp_nlmsg(struct sk_buff *skb,
 		if (nla_put_u32(
 		       skb,
 		       QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_6MBPS,
-		       adapter->big_data_stats.target_power_ofdm)){
+		       big_data_stats->target_power_ofdm)){
 			hdd_err("2.4G ofdm power put fail");
 			return -EINVAL;
 		}
 		if (nla_put_u32(
 		       skb,
 		       QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_1MBPS,
-		       adapter->big_data_stats.target_power_dsss)){
+		       big_data_stats->target_power_dsss)){
 			hdd_err("target power dsss put fail");
 			return -EINVAL;
 		}
 	}
 
 	if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_RIX,
-			adapter->big_data_stats.last_tx_data_rix)){
+			big_data_stats->last_tx_data_rix)){
 		hdd_err("last rix rate put fail");
 		return -EINVAL;
 	}
 	if (nla_put_u32(skb,
 			QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT,
-			adapter->big_data_stats.tsf_out_of_sync)){
+			big_data_stats->tsf_out_of_sync)){
 		hdd_err("tsf out of sync put fail");
 		return -EINVAL;
 	}
 	if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ANI_LEVEL,
-			adapter->big_data_stats.ani_level)){
+			big_data_stats->ani_level)){
 		hdd_err("ani level put fail");
 		return -EINVAL;
 	}
 	if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_POWER,
-			adapter->big_data_stats.last_data_tx_pwr)){
+			big_data_stats->last_data_tx_pwr)){
 		hdd_err("last data tx power put fail");
 		return -EINVAL;
 	}
 	if (nla_put_u32(skb,
 			QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_TRIGGER_REASON,
 			wlan_cm_get_roam_states(hdd_ctx->psoc,
-						adapter->deflink->vdev_id,
+						link_info->vdev_id,
 						ROAM_TRIGGER_REASON))){
 		hdd_err("roam trigger reason put fail");
 		return -EINVAL;
 	}
 	if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_FAIL_REASON,
 			wlan_cm_get_roam_states(hdd_ctx->psoc,
-						adapter->deflink->vdev_id,
+						link_info->vdev_id,
 						ROAM_FAIL_REASON))){
 		hdd_err("roam fail reason put fail");
 		return -EINVAL;
@@ -2094,7 +2095,7 @@ hdd_big_data_pack_resp_nlmsg(struct sk_buff *skb,
 		      skb,
 		      QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_INVOKE_FAIL_REASON,
 		      wlan_cm_get_roam_states(hdd_ctx->psoc,
-					      adapter->deflink->vdev_id,
+					      link_info->vdev_id,
 					      ROAM_INVOKE_FAIL_REASON))){
 		hdd_err("roam invoke fail reason put fail");
 		return -EINVAL;
@@ -2123,16 +2124,15 @@ hdd_reset_roam_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 				   0, ROAM_INVOKE_FAIL_REASON);
 }
 #else
-static int
+static inline int
 hdd_big_data_pack_resp_nlmsg(struct sk_buff *skb,
-			     struct hdd_adapter *adapter,
-			     struct hdd_context *hdd_ctx)
+			     struct wlan_hdd_link_info *link_info)
 {
 	return 0;
 }
 
 static uint32_t
-hdd_get_big_data_stats_len(struct hdd_adapter *adapter)
+hdd_get_big_data_stats_len(struct wlan_hdd_link_info *link_info)
 {
 	return 0;
 }
@@ -2429,7 +2429,8 @@ static int hdd_get_station_remote_ex(struct hdd_context *hdd_ctx,
  */
 static int hdd_get_station_info_ex(struct wlan_hdd_link_info *link_info)
 {
-	struct hdd_context *hdd_ctx = link_info->adapter->hdd_ctx;
+	struct hdd_adapter *adapter = link_info->adapter;
+	struct hdd_context *hdd_ctx = adapter->hdd_ctx;
 	struct sk_buff *skb;
 	uint32_t nl_buf_len = 0, connect_fail_rsn_len;
 	struct hdd_station_ctx *hdd_sta_ctx;
@@ -2449,11 +2450,11 @@ static int hdd_get_station_info_ex(struct wlan_hdd_link_info *link_info)
 	wlan_hdd_get_peer_rx_rate_stats(adapter);
 
 	if (big_data_stats_req) {
-		if (wlan_hdd_get_big_data_station_stats(adapter)) {
+		if (wlan_hdd_get_big_data_station_stats(link_info)) {
 			hdd_err_rl("wlan_hdd_get_big_data_station_stats fail");
 			return -EINVAL;
 		}
-		nl_buf_len = hdd_get_big_data_stats_len(adapter);
+		nl_buf_len = hdd_get_big_data_stats_len(link_info);
 	}
 
 	nl_buf_len += hdd_get_pmf_bcn_protect_stats_len(link_info);
@@ -2488,7 +2489,7 @@ static int hdd_get_station_info_ex(struct wlan_hdd_link_info *link_info)
 	}
 
 	if (big_data_stats_req) {
-		if (hdd_big_data_pack_resp_nlmsg(skb, adapter, hdd_ctx)) {
+		if (hdd_big_data_pack_resp_nlmsg(skb, link_info)) {
 			wlan_cfg80211_vendor_free_skb(skb);
 			return -EINVAL;
 		}

+ 20 - 23
core/hdd/src/wlan_hdd_stats.c

@@ -341,27 +341,26 @@ out:
 #ifdef WLAN_FEATURE_BIG_DATA_STATS
 /*
  * copy_station_big_data_stats_to_adapter() - Copy big data stats to adapter
- * @adapter: Pointer to the adapter
+ * @link_info: Link info pointer in HDD adapter.
  * @stats: Pointer to the big data stats event
  *
  * Return: 0 if success, non-zero for failure
  */
-static void copy_station_big_data_stats_to_adapter(
-					struct hdd_adapter *adapter,
-					struct big_data_stats_event *stats)
-{
-	adapter->big_data_stats.vdev_id = stats->vdev_id;
-	adapter->big_data_stats.tsf_out_of_sync = stats->tsf_out_of_sync;
-	adapter->big_data_stats.ani_level = stats->ani_level;
-	adapter->big_data_stats.last_data_tx_pwr =
-					stats->last_data_tx_pwr;
-	adapter->big_data_stats.target_power_dsss =
-					stats->target_power_dsss;
-	adapter->big_data_stats.target_power_ofdm =
-					stats->target_power_ofdm;
-	adapter->big_data_stats.last_tx_data_rix = stats->last_tx_data_rix;
-	adapter->big_data_stats.last_tx_data_rate_kbps =
-					stats->last_tx_data_rate_kbps;
+static void
+copy_station_big_data_stats_to_adapter(struct wlan_hdd_link_info *link_info,
+				       struct big_data_stats_event *stats)
+{
+	struct big_data_stats_event *big_data_stats =
+						&link_info->big_data_stats;
+
+	big_data_stats->vdev_id = stats->vdev_id;
+	big_data_stats->tsf_out_of_sync = stats->tsf_out_of_sync;
+	big_data_stats->ani_level = stats->ani_level;
+	big_data_stats->last_data_tx_pwr = stats->last_data_tx_pwr;
+	big_data_stats->target_power_dsss = stats->target_power_dsss;
+	big_data_stats->target_power_ofdm = stats->target_power_ofdm;
+	big_data_stats->last_tx_data_rix = stats->last_tx_data_rix;
+	big_data_stats->last_tx_data_rate_kbps = stats->last_tx_data_rate_kbps;
 }
 #endif
 
@@ -7762,23 +7761,21 @@ out:
 }
 
 #ifdef WLAN_FEATURE_BIG_DATA_STATS
-int wlan_hdd_get_big_data_station_stats(struct hdd_adapter *adapter)
+int wlan_hdd_get_big_data_station_stats(struct wlan_hdd_link_info *link_info)
 {
 	int ret = 0;
 	struct big_data_stats_event *big_data_stats;
 	struct wlan_objmgr_vdev *vdev;
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink,
-					   WLAN_OSIF_STATS_ID);
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
 	if (!vdev)
 		return -EINVAL;
 
-	big_data_stats = wlan_cfg80211_mc_cp_get_big_data_stats(vdev,
-								&ret);
+	big_data_stats = wlan_cfg80211_mc_cp_get_big_data_stats(vdev, &ret);
 	if (ret || !big_data_stats)
 		goto out;
 
-	copy_station_big_data_stats_to_adapter(adapter, big_data_stats);
+	copy_station_big_data_stats_to_adapter(link_info, big_data_stats);
 out:
 	if (big_data_stats)
 		wlan_cfg80211_mc_cp_stats_free_big_data_stats_event(

+ 4 - 4
core/hdd/src/wlan_hdd_stats.h

@@ -532,11 +532,11 @@ int wlan_hdd_qmi_put_suspend(void);
 #ifdef WLAN_FEATURE_BIG_DATA_STATS
 /**
  * wlan_hdd_get_big_data_station_stats() - Get big data station statistics
- * @adapter: adapter for which statistics are desired
+ * @link_info: Link info pointer in HDD adapter
  *
  * Return: status of operation
  */
-int wlan_hdd_get_big_data_station_stats(struct hdd_adapter *adapter);
+int wlan_hdd_get_big_data_station_stats(struct wlan_hdd_link_info *link_info);
 
 /**
  * wlan_cfg80211_mc_cp_get_big_data_stats() - API to get big data
@@ -560,8 +560,8 @@ wlan_cfg80211_mc_cp_get_big_data_stats(struct wlan_objmgr_vdev *vdev,
 void wlan_cfg80211_mc_cp_stats_free_big_data_stats_event(
 					struct big_data_stats_event *info);
 #else
-static inline int wlan_hdd_get_big_data_station_stats(
-						struct hdd_adapter *adapter)
+static inline int
+wlan_hdd_get_big_data_station_stats(struct wlan_hdd_link_info *link_info)
 {
 	return 0;
 }