소스 검색

qcacld-3.0: Remove SNR and RSSI request from get station stats

Remove redundant request get_rssi and get_snr from function
__wlan_hdd_cfg80211_get_station. Get Stats request being sent
to firmware in same function is super set of these two request.

Change-Id: I3b478db41da10d9112437415be4775d07decb550
CRs-Fixed: 1078877
Naveen Rawat 8 년 전
부모
커밋
2cb788d391
3개의 변경된 파일27개의 추가작업 그리고 11개의 파일을 삭제
  1. 6 3
      core/hdd/src/wlan_hdd_stats.c
  2. 2 0
      core/sme/inc/csr_api.h
  3. 19 8
      core/wma/src/wma_utils.c

+ 6 - 3
core/hdd/src/wlan_hdd_stats.c

@@ -1683,8 +1683,12 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
 	if (0 != status)
 		return status;
 
-	wlan_hdd_get_rssi(pAdapter, &sinfo->signal);
-	wlan_hdd_get_snr(pAdapter, &snr);
+	wlan_hdd_get_station_stats(pAdapter);
+	sinfo->signal = pAdapter->hdd_stats.summary_stat.rssi;
+	snr = pAdapter->hdd_stats.summary_stat.snr;
+	hdd_info("snr: %d, rssi: %d",
+		pAdapter->hdd_stats.summary_stat.snr,
+		pAdapter->hdd_stats.summary_stat.rssi);
 	pHddStaCtx->conn_info.signal = sinfo->signal;
 	pHddStaCtx->conn_info.noise =
 		pHddStaCtx->conn_info.signal - snr;
@@ -1703,7 +1707,6 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
 	 */
 	hdd_lpass_notify_connect(pAdapter);
 
-	wlan_hdd_get_station_stats(pAdapter);
 	rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags;
 
 	/* convert to the UI units of 100kbps */

+ 2 - 0
core/sme/inc/csr_api.h

@@ -1468,6 +1468,8 @@ typedef struct sSirSmeAssocIndToUpperLayerCnf {
 } tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf;
 
 typedef struct tagCsrSummaryStatsInfo {
+	uint32_t snr;
+	uint32_t rssi;
 	uint32_t retry_cnt[4];
 	uint32_t multiple_retry_cnt[4];
 	uint32_t tx_frm_cnt[4];

+ 19 - 8
core/wma/src/wma_utils.c

@@ -1054,6 +1054,11 @@ static void wma_update_vdev_stats(tp_wma_handle wma,
 	cds_msg_t sme_msg = { 0 };
 	int8_t bcn_snr, dat_snr;
 
+	bcn_snr = vdev_stats->vdev_snr.bcn_snr;
+	dat_snr = vdev_stats->vdev_snr.dat_snr;
+	WMA_LOGD("vdev id %d beancon snr %d data snr %d",
+		 vdev_stats->vdev_id, bcn_snr, dat_snr);
+
 	node = &wma->interfaces[vdev_stats->vdev_id];
 	stats_rsp_params = node->stats_rsp;
 	if (stats_rsp_params) {
@@ -1079,13 +1084,21 @@ static void wma_update_vdev_stats(tp_wma_handle wma,
 			summary_stats->ack_fail_cnt = vdev_stats->ack_fail_cnt;
 			summary_stats->rts_succ_cnt = vdev_stats->rts_succ_cnt;
 			summary_stats->rts_fail_cnt = vdev_stats->rts_fail_cnt;
+			/* Update SNR and RSSI in SummaryStats */
+			if (bcn_snr != WMA_TGT_INVALID_SNR) {
+				summary_stats->snr = bcn_snr;
+				summary_stats->rssi =
+					bcn_snr + WMA_TGT_NOISE_FLOOR_DBM;
+			} else if (dat_snr != WMA_TGT_INVALID_SNR) {
+				summary_stats->snr = dat_snr;
+				summary_stats->rssi =
+					bcn_snr + WMA_TGT_NOISE_FLOOR_DBM;
+			} else {
+				summary_stats->snr = WMA_TGT_INVALID_SNR;
+				summary_stats->rssi = 0;
+			}
 		}
 	}
-	bcn_snr = vdev_stats->vdev_snr.bcn_snr;
-	dat_snr = vdev_stats->vdev_snr.dat_snr;
-
-	WMA_LOGD("vdev id %d beancon snr %d data snr %d",
-		 vdev_stats->vdev_id, bcn_snr, dat_snr);
 
 	if (pGetRssiReq && pGetRssiReq->sessionId == vdev_stats->vdev_id) {
 		if ((bcn_snr == WMA_TGT_INVALID_SNR) &&
@@ -1132,10 +1145,8 @@ static void wma_update_vdev_stats(tp_wma_handle wma,
 
 		if (bcn_snr != WMA_TGT_INVALID_SNR)
 			p_snr_req->snr = bcn_snr;
-		else if (dat_snr != WMA_TGT_INVALID_SNR)
-			p_snr_req->snr = dat_snr;
 		else
-			p_snr_req->snr = (int8_t)WMA_TGT_INVALID_SNR;
+			p_snr_req->snr = dat_snr;
 
 		sme_msg.type = eWNI_SME_SNR_IND;
 		sme_msg.bodyptr = p_snr_req;