diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 5a142bc98204..7237cbffc0c4 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -11446,6 +11446,7 @@ static int hdd_post_get_chain_rssi_rsp(struct hdd_context *hdd_ctx, skb = cfg80211_vendor_cmd_alloc_reply_skb(hdd_ctx->wiphy, (sizeof(result->chain_rssi) + NLA_HDRLEN) + + (sizeof(result->chain_evm) + NLA_HDRLEN) + (sizeof(result->ant_id) + NLA_HDRLEN) + NLMSG_HDRLEN); @@ -11455,15 +11456,22 @@ static int hdd_post_get_chain_rssi_rsp(struct hdd_context *hdd_ctx, } if (nla_put(skb, QCA_WLAN_VENDOR_ATTR_CHAIN_RSSI, - sizeof(result->chain_rssi), - result->chain_rssi)) { + sizeof(result->chain_rssi), + result->chain_rssi)) { + hdd_err("put fail"); + goto nla_put_failure; + } + + if (nla_put(skb, QCA_WLAN_VENDOR_ATTR_CHAIN_EVM, + sizeof(result->chain_evm), + result->chain_evm)) { hdd_err("put fail"); goto nla_put_failure; } if (nla_put(skb, QCA_WLAN_VENDOR_ATTR_ANTENNA_INFO, - sizeof(result->ant_id), - result->ant_id)) { + sizeof(result->ant_id), + result->ant_id)) { hdd_err("put fail"); goto nla_put_failure; } diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 3843b71dbda7..dace34f03471 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -5989,12 +5989,14 @@ struct sir_rssi_disallow_lst { * struct chain_rssi_result - chain rssi result * num_chains_valid: valid chain num * @chain_rssi: chain rssi result as dBm unit + * @chain_evm: error vector magnitude * @ant_id: antenna id */ #define CHAIN_MAX_NUM 8 struct chain_rssi_result { uint32_t num_chains_valid; uint32_t chain_rssi[CHAIN_MAX_NUM]; + int32_t chain_evm[CHAIN_MAX_NUM]; uint32_t ant_id[CHAIN_MAX_NUM]; }; diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 89d1730111ea..2b3d0d403fc0 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -5535,6 +5535,8 @@ int wma_pdev_div_info_evt_handler(void *handle, u_int8_t *event_buf, return -EINVAL; } + qdf_mem_zero(&chain_rssi_result, sizeof(chain_rssi_result)); + WMI_MAC_ADDR_TO_CHAR_ARRAY(&event->macaddr, macaddr); WMA_LOGD(FL("macaddr: " MAC_ADDRESS_STR), MAC_ADDR_ARRAY(macaddr)); @@ -5542,25 +5544,32 @@ int wma_pdev_div_info_evt_handler(void *handle, u_int8_t *event_buf, chain_rssi_result.num_chains_valid = event->num_chains_valid; qdf_mem_copy(chain_rssi_result.chain_rssi, event->chain_rssi, - sizeof(event->chain_rssi)); - for (i = 0; i < event->num_chains_valid; i++) { - WMA_LOGD(FL("chain_rssi: %d, ant_id: %d"), - event->chain_rssi[i], event->ant_id[i]); + sizeof(event->chain_rssi)); + + qdf_mem_copy(chain_rssi_result.chain_evm, event->chain_evm, + sizeof(event->chain_evm)); + + qdf_mem_copy(chain_rssi_result.ant_id, event->ant_id, + sizeof(event->ant_id)); + + for (i = 0; i < chain_rssi_result.num_chains_valid; i++) { + WMA_LOGD(FL("chain_rssi: %d, chain_evm: %d,ant_id: %d"), + chain_rssi_result.chain_rssi[i], + chain_rssi_result.chain_evm[i], + chain_rssi_result.ant_id[i]); + if (!wmi_service_enabled(wma->wmi_handle, wmi_service_hw_db2dbm_support)) { if (chain_rssi_result.chain_rssi[i] != WMA_INVALID_PER_CHAIN_SNR) chain_rssi_result.chain_rssi[i] += - WMA_TGT_NOISE_FLOOR_DBM; + WMA_TGT_NOISE_FLOOR_DBM; else chain_rssi_result.chain_rssi[i] = WMA_INVALID_PER_CHAIN_RSSI; } } - qdf_mem_copy(chain_rssi_result.ant_id, event->ant_id, - sizeof(event->ant_id)); - pmac->sme.get_chain_rssi_cb(pmac->sme.get_chain_rssi_context, &chain_rssi_result);