diff options
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 22 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 7 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 22 |
3 files changed, 45 insertions, 6 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 05dd0c1dc2d8..5b7efd129ef4 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -6756,16 +6756,18 @@ static int put_wifi_channel_cca_info(struct sir_wifi_chan_cca_stats *cca, static int put_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal, struct sk_buff *skb) { - uint32_t i; + uint32_t i, chain_count; struct nlattr *chains, *att; /* There might be no signal info for a peer */ if (peer_signal == NULL) return 0; + chain_count = peer_signal->num_chain < WIFI_MAX_CHAINS ? + peer_signal->num_chain : WIFI_MAX_CHAINS; if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_ANT_NUM, - WIFI_MAX_CHAINS)) { + chain_count)) { hddLog(LOGE, FL("QCA_WLAN_VENDOR_ATTR put fail")); return -EINVAL; } @@ -6777,7 +6779,7 @@ static int put_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal, return -EINVAL; } - for (i = 0; i < WIFI_MAX_CHAINS; i++) { + for (i = 0; i < chain_count; i++) { chains = nla_nest_start(skb, i); if (chains == NULL) { @@ -6785,12 +6787,24 @@ static int put_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal, return -EINVAL; } + hddLog(LOG2, + FL("SNR=%d, NF=%d, RX=%d, TX=%d"), + peer_signal->per_ant_snr[i], + peer_signal->nf[i], + peer_signal->per_ant_rx_mpdus[i], + peer_signal->per_ant_tx_mpdus[i]); if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_ANT_SNR, peer_signal->per_ant_snr[i]) || nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_ANT_NF, - peer_signal->nf[i])) { + peer_signal->nf[i]) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_RX_MPDU, + peer_signal->per_ant_rx_mpdus[i]) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TX_MPDU, + peer_signal->per_ant_tx_mpdus[i])) { hddLog(VOS_TRACE_LEVEL_ERROR, FL("QCA_WLAN_VENDOR_ATTR put fail")); return -EINVAL; diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index aa7abc3a3d87..5a4c2405da8d 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -6445,6 +6445,9 @@ struct sir_wifi_chan_cca_stats { * @peer_id: peer ID * @per_ant_snr: per antenna SNR * @nf: peer background noise + * @per_ant_rx_mpdus: MPDUs received per antenna + * @per_ant_tx_mpdus: MPDUs transferred per antenna + * @num_chain: valid chain count */ struct sir_wifi_peer_signal_stats { uint32_t vdev_id; @@ -6455,6 +6458,10 @@ struct sir_wifi_peer_signal_stats { /* Background noise */ int32_t nf[WIFI_MAX_CHAINS]; + + int32_t per_ant_rx_mpdus[WIFI_MAX_CHAINS]; + int32_t per_ant_tx_mpdus[WIFI_MAX_CHAINS]; + int32_t num_chain; }; #define WIFI_VDEV_NUM 4 diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 27528445f64c..92687b95a9a3 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -5813,9 +5813,26 @@ static int wma_ll_stats_evt_handler(void *handle, u_int8_t *event, peer_stats[i].vdev_id = wmi_peer_signal->vdev_id; peer_signal = &peer_stats[i].peer_signal_stats; + WMA_LOGI("%d antennas for peer %d", + wmi_peer_signal->num_chains_valid, + wmi_peer_signal->peer_id); if (dst_len <= result_size) { - vos_mem_copy(peer_signal, - &wmi_peer_signal->vdev_id, dst_len); + peer_signal->vdev_id = wmi_peer_signal->vdev_id; + peer_signal->peer_id = wmi_peer_signal->peer_id; + peer_signal->num_chain = + wmi_peer_signal->num_chains_valid; + vos_mem_copy(peer_signal->per_ant_snr, + wmi_peer_signal->per_chain_snr, + sizeof(peer_signal->per_ant_snr)); + vos_mem_copy(peer_signal->nf, + wmi_peer_signal->per_chain_nf, + sizeof(peer_signal->nf)); + vos_mem_copy(peer_signal->per_ant_rx_mpdus, + wmi_peer_signal->per_antenna_rx_mpdus, + sizeof(peer_signal->per_ant_rx_mpdus)); + vos_mem_copy(peer_signal->per_ant_tx_mpdus, + wmi_peer_signal->per_antenna_tx_mpdus, + sizeof(peer_signal->per_ant_tx_mpdus)); result_size -= dst_len; } else { WMA_LOGE(FL("Invalid length of PEER signal.")); @@ -5837,6 +5854,7 @@ static int wma_ll_stats_evt_handler(void *handle, u_int8_t *event, peer->mac_addr.raw[2], peer->mac_addr.raw[3], peer->mac_addr.raw[4], peer->mac_addr.raw[5]); } + wmi_peer_signal++; } result += peer_num * sizeof(struct sir_wifi_ll_ext_peer_stats); |
