diff options
| author | Varun Reddy Yeturu <varunreddy.yeturu@codeaurora.org> | 2016-12-15 17:28:19 -0800 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2016-12-29 13:59:06 -0800 |
| commit | 4ca502c349d8870ae54ab277a632c7271f0eabbf (patch) | |
| tree | 24f9dcc049b4614ec0538e9d00b688552cf95f69 | |
| parent | 102269ec80f000a3d5549cff8d5b797083040ea8 (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.h | 8 | ||||
| -rw-r--r-- | core/wma/src/wma_utils.c | 56 |
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 /* |
