Browse Source

qcacld-3.0: Refactor put_wifi_peer_info()

In order to simplify put_wifi_peer_info() refactor the logic for
attribute QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_RATE_INFO into a
separate function.

Change-Id: I72f4aef0a4df340a52eea59579216e5978a0d98c
CRs-Fixed: 2424696
Jeff Johnson 6 years ago
parent
commit
43b0c6a123
1 changed files with 50 additions and 42 deletions
  1. 50 42
      core/hdd/src/wlan_hdd_stats.c

+ 50 - 42
core/hdd/src/wlan_hdd_stats.c

@@ -236,6 +236,47 @@ static bool put_wifi_rate_stat(tpSirWifiRateStat stats,
 	return true;
 }
 
+/**
+ * put_wifi_peer_rates() - put wifi peer rate info
+ * @stats: Pointer to stats context
+ * @vendor_event: Pointer to vendor event
+ *
+ * Return: bool
+ */
+static bool put_wifi_peer_rates(tpSirWifiPeerInfo stats,
+				struct sk_buff *vendor_event)
+{
+	uint32_t i;
+	tpSirWifiRateStat rate_stat;
+	int nest_id;
+	struct nlattr *info;
+	struct nlattr *rates;
+
+	/* no rates is ok */
+	if (!stats->numRate)
+		return true;
+
+	nest_id = QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_RATE_INFO;
+	info = nla_nest_start(vendor_event, nest_id);
+	if (!info)
+		return false;
+
+	for (i = 0; i < stats->numRate; i++) {
+		rates = nla_nest_start(vendor_event, i);
+		if (!rates)
+			return false;
+		rate_stat = &stats->rateStats[i];
+		if (!put_wifi_rate_stat(rate_stat, vendor_event)) {
+			hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
+			return false;
+		}
+		nla_nest_end(vendor_event, rates);
+	}
+	nla_nest_end(vendor_event, info);
+
+	return true;
+}
+
 /**
  * put_wifi_peer_info() - put wifi peer info
  * @stats: Pointer to stats context
@@ -246,56 +287,23 @@ static bool put_wifi_rate_stat(tpSirWifiRateStat stats,
 static bool put_wifi_peer_info(tpSirWifiPeerInfo stats,
 			       struct sk_buff *vendor_event)
 {
-	u32 i = 0;
-	tpSirWifiRateStat rate_stat;
-
-	if (nla_put_u32
-		    (vendor_event, QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_TYPE,
-		    wmi_to_sir_peer_type(stats->type)) ||
+	if (nla_put_u32(vendor_event,
+			QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_TYPE,
+			wmi_to_sir_peer_type(stats->type)) ||
 	    nla_put(vendor_event,
 		       QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_MAC_ADDRESS,
 		       QDF_MAC_ADDR_SIZE, &stats->peerMacAddress.bytes[0]) ||
 	    nla_put_u32(vendor_event,
-			   QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_CAPABILITIES,
-			   stats->capabilities) ||
+			QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_CAPABILITIES,
+			stats->capabilities) ||
 	    nla_put_u32(vendor_event,
-			   QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_NUM_RATES,
-			   stats->numRate)) {
+			QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_NUM_RATES,
+			stats->numRate)) {
 		hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
-		goto error;
-	}
-
-	if (stats->numRate) {
-		struct nlattr *rateInfo;
-		struct nlattr *rates;
-
-		rateInfo = nla_nest_start(vendor_event,
-					  QCA_WLAN_VENDOR_ATTR_LL_STATS_PEER_INFO_RATE_INFO);
-		if (!rateInfo)
-			goto error;
-
-		for (i = 0; i < stats->numRate; i++) {
-			rate_stat = (tpSirWifiRateStat) ((uint8_t *)
-							  stats->rateStats +
-							  (i *
-							   sizeof
-							   (tSirWifiRateStat)));
-			rates = nla_nest_start(vendor_event, i);
-			if (!rates)
-				goto error;
-
-			if (!put_wifi_rate_stat(rate_stat, vendor_event)) {
-				hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
-				return false;
-			}
-			nla_nest_end(vendor_event, rates);
-		}
-		nla_nest_end(vendor_event, rateInfo);
+		return false;
 	}
 
-	return true;
-error:
-	return false;
+	return put_wifi_peer_rates(stats, vendor_event);
 }
 
 /**