Răsfoiți Sursa

qcacld-3.0: Add change to clear per MAC obss stats

Add change to pass mac_id for which clear obss
request was received.

Change-Id: I9606f9c777b18ad3fc4383f1856975b04d384812
CRs-Fixed: 3343340
Amit Mehta 2 ani în urmă
părinte
comite
ea9c714188
1 a modificat fișierele cu 33 adăugiri și 8 ștergeri
  1. 33 8
      core/hdd/src/wlan_hdd_he.c

+ 33 - 8
core/hdd/src/wlan_hdd_he.c

@@ -627,6 +627,29 @@ static int hdd_get_sr_stats(struct hdd_context *hdd_ctx, uint8_t mac_id,
 	return 0;
 }
 
+static int hdd_clear_sr_stats(struct hdd_context *hdd_ctx, uint8_t mac_id)
+{
+	QDF_STATUS status;
+	ol_txrx_soc_handle soc;
+	uint8_t pdev_id;
+	struct cdp_txrx_stats_req req = {0};
+
+	soc = cds_get_context(QDF_MODULE_ID_SOC);
+	if (!soc) {
+		hdd_err("invalid soc");
+		return -EINVAL;
+	}
+
+	req.mac_id = mac_id;
+	pdev_id = wlan_objmgr_pdev_get_pdev_id(hdd_ctx->pdev);
+	status = cdp_clear_pdev_obss_pd_stats(soc, pdev_id, &req);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		hdd_err("Unable to clear stats");
+		return -EAGAIN;
+	}
+	return 0;
+}
+
 /**
  * __wlan_hdd_cfg80211_sr_operations: To handle SR operation
  *
@@ -647,7 +670,7 @@ static int __wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
 	int32_t srg_pd_threshold = 0;
 	int32_t non_srg_pd_threshold = 0;
 	uint8_t sr_he_siga_val15_allowed = true;
-	uint8_t pdev_id, mac_id, sr_ctrl, non_srg_max_pd_offset;
+	uint8_t mac_id, sr_ctrl, non_srg_max_pd_offset;
 	uint8_t srg_min_pd_offset = 0, srg_max_pd_offset = 0;
 	uint32_t nl_buf_len;
 	int ret;
@@ -660,7 +683,6 @@ static int __wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
 	struct nlattr *sr_param_attr;
 	struct sk_buff *skb;
 	struct cdp_pdev_obss_pd_stats_tlv stats;
-	ol_txrx_soc_handle soc;
 	uint8_t sr_device_modes;
 
 	hdd_enter_dev(wdev->netdev);
@@ -806,13 +828,16 @@ static int __wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
 		ret = cfg80211_vendor_cmd_reply(skb);
 		break;
 	case QCA_WLAN_SR_OPERATION_CLEAR_STATS:
-		soc = cds_get_context(QDF_MODULE_ID_SOC);
-		if (!soc) {
-			hdd_err("invalid soc");
-			return -EINVAL;
+		status = policy_mgr_get_mac_id_by_session_id(hdd_ctx->psoc,
+							     adapter->vdev_id,
+							     &mac_id);
+		if (QDF_IS_STATUS_ERROR(status)) {
+			hdd_err("Failed to get mac_id for vdev_id: %u",
+				adapter->vdev_id);
+			return -EAGAIN;
 		}
-		pdev_id = wlan_objmgr_pdev_get_pdev_id(hdd_ctx->pdev);
-		cdp_clear_pdev_obss_pd_stats(soc, pdev_id);
+		if (hdd_clear_sr_stats(hdd_ctx, mac_id))
+			return -EAGAIN;
 		break;
 	case QCA_WLAN_SR_OPERATION_PSR_AND_NON_SRG_OBSS_PD_PROHIBIT:
 		if (tb2[QCA_WLAN_VENDOR_ATTR_SR_PARAMS_HESIGA_VAL15_ENABLE])