summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVarun Reddy Yeturu <varunreddy.yeturu@codeaurora.org>2016-12-15 17:28:19 -0800
committerqcabuildsw <qcabuildsw@localhost>2016-12-29 13:59:06 -0800
commit4ca502c349d8870ae54ab277a632c7271f0eabbf (patch)
tree24f9dcc049b4614ec0538e9d00b688552cf95f69
parent102269ec80f000a3d5549cff8d5b797083040ea8 (diff)
qcacld-3.0: Fix the invalid SNR value in Host
Firmware sends a value of 0x127 or -1 to represent an invalid SNR to the host. Handle it in the host for both the values Change-Id: I374c626566cd5b7d67aaca43167f9fe4bd4b85a2 CRs-Fixed: 1105132
-rw-r--r--core/wma/inc/wma.h8
-rw-r--r--core/wma/src/wma_utils.c56
2 files changed, 41 insertions, 23 deletions
diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h
index f43e3590deb0..6d700edfb7a2 100644
--- a/core/wma/inc/wma.h
+++ b/core/wma/inc/wma.h
@@ -262,7 +262,13 @@ enum ds_mode {
#define WMA_VDEV_START_REQUEST_TIMEOUT (6000) /* 6 seconds */
#define WMA_VDEV_STOP_REQUEST_TIMEOUT (6000) /* 6 seconds */
-#define WMA_TGT_INVALID_SNR 0x127
+/*
+ * The firmware value has been changed recently to 0x127
+ * But, to maintain backward compatibility, the old
+ * value is also preserved.
+ */
+#define WMA_TGT_INVALID_SNR_OLD (-1)
+#define WMA_TGT_INVALID_SNR_NEW 0x127
#define WMA_TX_Q_RECHECK_TIMER_WAIT 2 /* 2 ms */
#define WMA_TX_Q_RECHECK_TIMER_MAX_WAIT 20 /* 20 ms */
diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c
index 8c97b55eea4a..b9ff00e835c3 100644
--- a/core/wma/src/wma_utils.c
+++ b/core/wma/src/wma_utils.c
@@ -1334,6 +1334,7 @@ static void wma_vdev_stats_lost_link_helper(tp_wma_handle wma,
int32_t rssi;
struct wma_target_req *req_msg;
static const uint8_t zero_mac[QDF_MAC_ADDR_SIZE] = {0};
+ int8_t bcn_snr, dat_snr;
node = &wma->interfaces[vdev_stats->vdev_id];
if (node->vdev_up &&
@@ -1345,17 +1346,18 @@ static void wma_vdev_stats_lost_link_helper(tp_wma_handle wma,
WMA_LOGD(FL("cannot find DELETE_BSS request message"));
return;
}
+ bcn_snr = vdev_stats->vdev_snr.bcn_snr;
+ dat_snr = vdev_stats->vdev_snr.dat_snr;
WMA_LOGD(FL("get vdev id %d, beancon snr %d, data snr %d"),
- vdev_stats->vdev_id,
- vdev_stats->vdev_snr.bcn_snr,
- vdev_stats->vdev_snr.dat_snr);
- if (WMA_TGT_INVALID_SNR != vdev_stats->vdev_snr.bcn_snr)
- rssi = vdev_stats->vdev_snr.bcn_snr;
- else if (WMA_TGT_INVALID_SNR != vdev_stats->vdev_snr.dat_snr)
- rssi = vdev_stats->vdev_snr.dat_snr;
+ vdev_stats->vdev_id, bcn_snr, dat_snr);
+ if ((bcn_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (bcn_snr != WMA_TGT_INVALID_SNR_NEW))
+ rssi = bcn_snr;
+ else if ((dat_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (dat_snr != WMA_TGT_INVALID_SNR_NEW))
+ rssi = dat_snr;
else
- rssi = WMA_TGT_INVALID_SNR;
-
+ rssi = WMA_TGT_INVALID_SNR_OLD;
/* Get the absolute rssi value from the current rssi value */
rssi = rssi + WMA_TGT_NOISE_FLOOR_DBM;
wma_lost_link_info_handler(wma, vdev_stats->vdev_id, rssi);
@@ -1414,24 +1416,28 @@ static void wma_update_vdev_stats(tp_wma_handle wma,
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) {
+ if ((bcn_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (bcn_snr != WMA_TGT_INVALID_SNR_NEW)) {
summary_stats->snr = bcn_snr;
summary_stats->rssi =
bcn_snr + WMA_TGT_NOISE_FLOOR_DBM;
- } else if (dat_snr != WMA_TGT_INVALID_SNR) {
+ } else if ((dat_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (dat_snr != WMA_TGT_INVALID_SNR_NEW)) {
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->snr = WMA_TGT_INVALID_SNR_OLD;
summary_stats->rssi = 0;
}
}
}
if (pGetRssiReq && pGetRssiReq->sessionId == vdev_stats->vdev_id) {
- if ((bcn_snr == WMA_TGT_INVALID_SNR) &&
- (dat_snr == WMA_TGT_INVALID_SNR)) {
+ if ((bcn_snr == WMA_TGT_INVALID_SNR_OLD ||
+ bcn_snr == WMA_TGT_INVALID_SNR_NEW) &&
+ (dat_snr == WMA_TGT_INVALID_SNR_OLD ||
+ dat_snr == WMA_TGT_INVALID_SNR_NEW)) {
/*
* Firmware sends invalid snr till it sees
* Beacon/Data after connection since after
@@ -1440,11 +1446,12 @@ static void wma_update_vdev_stats(tp_wma_handle wma,
* rssi during connection.
*/
WMA_LOGE("Invalid SNR from firmware");
-
} else {
- if (bcn_snr != WMA_TGT_INVALID_SNR) {
+ if (bcn_snr != WMA_TGT_INVALID_SNR_OLD &&
+ bcn_snr != WMA_TGT_INVALID_SNR_NEW) {
rssi = bcn_snr;
- } else if (dat_snr != WMA_TGT_INVALID_SNR) {
+ } else if (dat_snr != WMA_TGT_INVALID_SNR_OLD &&
+ dat_snr != WMA_TGT_INVALID_SNR_NEW) {
rssi = dat_snr;
}
@@ -1471,11 +1478,14 @@ static void wma_update_vdev_stats(tp_wma_handle wma,
if (node->psnr_req) {
tAniGetSnrReq *p_snr_req = node->psnr_req;
-
- if (bcn_snr != WMA_TGT_INVALID_SNR)
+ if ((bcn_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (bcn_snr != WMA_TGT_INVALID_SNR_NEW))
p_snr_req->snr = bcn_snr;
- else
+ else if ((dat_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (dat_snr != WMA_TGT_INVALID_SNR_NEW))
p_snr_req->snr = dat_snr;
+ else
+ p_snr_req->snr = WMA_TGT_INVALID_SNR_OLD;
sme_msg.type = eWNI_SME_SNR_IND;
sme_msg.bodyptr = p_snr_req;
@@ -1620,9 +1630,11 @@ static void wma_update_per_chain_rssi_stats(tp_wma_handle wma,
dat_snr = rssi_stats->rssi_avg_data[i];
WMA_LOGD("chain %d beacon snr %d data snr %d",
i, bcn_snr, dat_snr);
- if (dat_snr != WMA_TGT_INVALID_SNR)
+ if ((dat_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (dat_snr != WMA_TGT_INVALID_SNR_NEW))
rssi_per_chain_stats->rssi[i] = dat_snr;
- else if (bcn_snr != WMA_TGT_INVALID_SNR)
+ else if ((bcn_snr != WMA_TGT_INVALID_SNR_OLD) &&
+ (bcn_snr != WMA_TGT_INVALID_SNR_NEW))
rssi_per_chain_stats->rssi[i] = bcn_snr;
else
/*