qcacld-3.0: Add mac counters for per-antenna TX/RX stats

qcacld-2.0 to qcacld-3.0 propagation

New MAC counters are added to count MPDUs received and transferred
on each antenna.

Change-Id: Ia7fbf7642922f006882619848459192dcfca3c40
CRs-Fixed: 2043156
This commit is contained in:
Zhang Qian 2017-05-18 13:59:07 +08:00 • committed by snandini
commit 303ebe9dbf
3 changed files with 43 additions and 6 deletions

View file

@ -1855,16 +1855,18 @@ static int
hdd_populate_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)
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)) {
hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
return -EINVAL;
}
@ -1876,7 +1878,7 @@ hdd_populate_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) {
@ -1884,12 +1886,23 @@ hdd_populate_wifi_signal_info(struct sir_wifi_peer_signal_stats *peer_signal,
return -EINVAL;
}
hdd_debug("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])) {
hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
return -EINVAL;
}

View file

@ -5225,6 +5225,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;
@ -5235,6 +5238,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

View file

@ -1064,9 +1064,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_LOGD("%d antennas for peer %d",
wmi_peer_signal->num_chains_valid,
wmi_peer_signal->peer_id);
if (dst_len <= result_size) {
qdf_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;
qdf_mem_copy(peer_signal->per_ant_snr,
wmi_peer_signal->per_chain_snr,
sizeof(peer_signal->per_ant_snr));
qdf_mem_copy(peer_signal->nf,
wmi_peer_signal->per_chain_nf,
sizeof(peer_signal->nf));
qdf_mem_copy(peer_signal->per_ant_rx_mpdus,
wmi_peer_signal->per_antenna_rx_mpdus,
sizeof(peer_signal->per_ant_rx_mpdus));
qdf_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."));