qcacmn: Add changes for RDK statistics

Change API signature for dp_getrateindex to populate rate index
and add additional stats required for RDK.
Add QDF abstraction for EWMA average rssi

CRs-Fixed: 2397918
Change-Id: Id878971799c5df2ae60057a86b2769724ee0dcc5
This commit is contained in:
Amir Patel
2019-02-23 10:54:32 +05:30
committed by nshrivas
parent 25ee316744
commit 78824b1d4e
8 changed files with 70 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -3208,12 +3208,13 @@ enum DP_CMN_MODULATION_TYPE dp_getmodulation(
* @nss - NSS 1...8 * @nss - NSS 1...8
* preamble - preamble * preamble - preamble
* @bw - Transmission Bandwidth * @bw - Transmission Bandwidth
* @rix: rate index to be populated
* *
* return - rate in kbps * return - rate in kbps
*/ */
uint32_t uint32_t
dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble, dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble,
uint8_t bw) uint8_t bw, uint32_t *rix)
{ {
uint32_t ratekbps = 0, res = RT_INVALID_INDEX; /* represents failure */ uint32_t ratekbps = 0, res = RT_INVALID_INDEX; /* represents failure */
uint16_t rc; uint16_t rc;
@@ -3251,7 +3252,7 @@ dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble,
break; break;
} }
if (res >= DP_RATE_TABLE_SIZE) if (res >= DP_RATE_TABLE_SIZE)
return ratekbps; goto done;
if (!gi) { if (!gi) {
ratekbps = dp_11abgnratetable.info[res].userratekbps; ratekbps = dp_11abgnratetable.info[res].userratekbps;
@@ -3268,6 +3269,8 @@ dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble,
break; break;
} }
} }
done:
*rix = res;
return ratekbps; return ratekbps;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -166,7 +166,7 @@ enum DP_CMN_MODULATION_TYPE dp_getmodulation(
uint32_t uint32_t
dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble, dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble,
uint8_t bw); uint8_t bw, uint32_t *rix);
int dp_rate_idx_to_kbps(uint8_t rate_idx, uint8_t gintval); int dp_rate_idx_to_kbps(uint8_t rate_idx, uint8_t gintval);

View File

@@ -38,6 +38,7 @@
#include <cdp_txrx_mob_def.h> #include <cdp_txrx_mob_def.h>
#endif /* CONFIG_WIN */ #endif /* CONFIG_WIN */
#include <cdp_txrx_handle.h> #include <cdp_txrx_handle.h>
#include <cdp_txrx_stats_struct.h>
#ifndef OL_TXRX_NUM_LOCAL_PEER_IDS #ifndef OL_TXRX_NUM_LOCAL_PEER_IDS
/* /*
@@ -143,6 +144,7 @@
#define FILTER_DATA_NULL 0x0008 #define FILTER_DATA_NULL 0x0008
QDF_DECLARE_EWMA(tx_lag, 1024, 8) QDF_DECLARE_EWMA(tx_lag, 1024, 8)
struct cdp_stats_cookie;
/* /*
* DP configuration parameters * DP configuration parameters
@@ -1067,12 +1069,14 @@ enum cdp_stat_update_type {
* @avg_sojourn_msdu: average sojourn msdu time * @avg_sojourn_msdu: average sojourn msdu time
* @sum_sojourn_msdu: sum sojourn msdu time * @sum_sojourn_msdu: sum sojourn msdu time
* @num_msdu: number of msdus per ppdu * @num_msdu: number of msdus per ppdu
* @cookie: cookie to be used by upper layer
*/ */
struct cdp_tx_sojourn_stats { struct cdp_tx_sojourn_stats {
uint32_t ppdu_seq_id; uint32_t ppdu_seq_id;
qdf_ewma_tx_lag avg_sojourn_msdu[CDP_DATA_TID_MAX]; qdf_ewma_tx_lag avg_sojourn_msdu[CDP_DATA_TID_MAX];
uint32_t sum_sojourn_msdu[CDP_DATA_TID_MAX]; uint32_t sum_sojourn_msdu[CDP_DATA_TID_MAX];
uint32_t num_msdus[CDP_DATA_TID_MAX]; uint32_t num_msdus[CDP_DATA_TID_MAX];
struct cdp_stats_cookie *cookie;
}; };
/** /**
@@ -1119,6 +1123,8 @@ struct cdp_tx_sojourn_stats {
* @tx_rate: Transmission Rate * @tx_rate: Transmission Rate
* @user_pos: user position * @user_pos: user position
* @mu_group_id: mu group id * @mu_group_id: mu group id
* @rix: rate index
* @cookie: cookie to used by upper layer
*/ */
struct cdp_tx_completion_ppdu_user { struct cdp_tx_completion_ppdu_user {
uint32_t completion_status:8, uint32_t completion_status:8,
@@ -1173,6 +1179,8 @@ struct cdp_tx_completion_ppdu_user {
bool ack_rssi_valid; bool ack_rssi_valid;
uint32_t user_pos; uint32_t user_pos;
uint32_t mu_group_id; uint32_t mu_group_id;
uint32_t rix;
struct cdp_stats_cookie *cookie;
}; };
/** /**
@@ -1331,6 +1339,9 @@ struct cdp_tx_completion_msdu {
* @channel: Channel informartion * @channel: Channel informartion
* @lsig_A: L-SIG in 802.11 PHY header * @lsig_A: L-SIG in 802.11 PHY header
* @frame_ctrl: frame control field * @frame_ctrl: frame control field
* @rix: rate index
* @rssi_chain: rssi chain per nss per bw
* @cookie: cookie to used by upper layer
*/ */
struct cdp_rx_indication_ppdu { struct cdp_rx_indication_ppdu {
uint32_t ppdu_id; uint32_t ppdu_id;
@@ -1338,6 +1349,7 @@ struct cdp_rx_indication_ppdu {
num_mpdu:9, num_mpdu:9,
reserved:6; reserved:6;
uint32_t num_msdu; uint32_t num_msdu;
uint32_t num_bytes;
uint16_t udp_msdu_count; uint16_t udp_msdu_count;
uint16_t tcp_msdu_count; uint16_t tcp_msdu_count;
uint16_t other_msdu_count; uint16_t other_msdu_count;
@@ -1363,6 +1375,7 @@ struct cdp_rx_indication_ppdu {
ppdu_type:5; ppdu_type:5;
}; };
} u; } u;
uint32_t rix;
uint32_t lsig_a; uint32_t lsig_a;
uint32_t rssi; uint32_t rssi;
uint64_t timestamp; uint64_t timestamp;
@@ -1378,6 +1391,8 @@ struct cdp_rx_indication_ppdu {
uint8_t rx_ratecode; uint8_t rx_ratecode;
uint8_t fcs_error_mpdus; uint8_t fcs_error_mpdus;
uint16_t frame_ctrl; uint16_t frame_ctrl;
uint32_t rssi_chain[SS_COUNT][MAX_BW];
struct cdp_stats_cookie *cookie;
}; };
/** /**
@@ -1491,4 +1506,18 @@ enum cdp_dp_cfg {
cfg_dp_ce_classify_enable, cfg_dp_ce_classify_enable,
cfg_dp_disable_intra_bss_fwd, cfg_dp_disable_intra_bss_fwd,
}; };
/**
* struct cdp_peer_cookie - cookie used when creating peer
* @peer_id: peer id
* @mac_addr: MAC address of peer
* @cookie: cookie to be used by consumer
* @ctx: context passed to be used by consumer
*/
struct cdp_peer_cookie {
uint8_t peer_id;
uint8_t mac_addr[CDP_MAC_ADDR_LEN];
uint8_t cookie;
struct cdp_stats_cookie *ctx;
};
#endif #endif

View File

@@ -360,6 +360,7 @@ struct cdp_tx_stats {
* @bar_recv_cnt: Number of bar received * @bar_recv_cnt: Number of bar received
* @rssi: RSSI of received signal * @rssi: RSSI of received signal
* @last_rssi: Previous rssi * @last_rssi: Previous rssi
* @avg_rssi: Average rssi
* @rx_rate: Rx rate * @rx_rate: Rx rate
* @last_rx_rate: Previous rx rate * @last_rx_rate: Previous rx rate
* @rnd_avg_rx_rate: Rounded average rx rate * @rnd_avg_rx_rate: Rounded average rx rate
@@ -417,6 +418,7 @@ struct cdp_rx_stats {
uint32_t bar_recv_cnt; uint32_t bar_recv_cnt;
uint32_t rssi; uint32_t rssi;
uint32_t last_rssi; uint32_t last_rssi;
uint32_t avg_rssi;
uint32_t rx_rate; uint32_t rx_rate;
uint32_t last_rx_rate; uint32_t last_rx_rate;
uint32_t rnd_avg_rx_rate; uint32_t rnd_avg_rx_rate;

View File

@@ -130,6 +130,7 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
{ {
uint32_t ratekbps = 0; uint32_t ratekbps = 0;
uint32_t ppdu_tx_rate = 0; uint32_t ppdu_tx_rate = 0;
uint32_t rix;
if (!peer || !ppdu) if (!peer || !ppdu)
return; return;
@@ -139,7 +140,8 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
ppdu->mcs, ppdu->mcs,
ppdu->nss, ppdu->nss,
ppdu->preamble, ppdu->preamble,
ppdu->bw); ppdu->bw,
&rix);
DP_STATS_UPD(peer, tx.last_tx_rate, ratekbps); DP_STATS_UPD(peer, tx.last_tx_rate, ratekbps);

View File

@@ -137,6 +137,7 @@ static inline void dp_rx_rate_stats_update(struct dp_peer *peer,
uint32_t ratekbps = 0; uint32_t ratekbps = 0;
uint32_t ppdu_rx_rate = 0; uint32_t ppdu_rx_rate = 0;
uint32_t nss = 0; uint32_t nss = 0;
uint32_t rix;
if (!peer || !ppdu) if (!peer || !ppdu)
return; return;
@@ -150,7 +151,8 @@ static inline void dp_rx_rate_stats_update(struct dp_peer *peer,
ppdu->u.mcs, ppdu->u.mcs,
nss, nss,
ppdu->u.preamble, ppdu->u.preamble,
ppdu->u.bw); ppdu->u.bw,
&rix);
if (!ratekbps) if (!ratekbps)
return; return;

View File

@@ -122,6 +122,16 @@ typedef __qdf_wait_queue_head_t qdf_wait_queue_head_t;
#define qdf_ewma_tx_lag_read(tx_lag) \ #define qdf_ewma_tx_lag_read(tx_lag) \
__qdf_ewma_tx_lag_read(tx_lag) __qdf_ewma_tx_lag_read(tx_lag)
#define qdf_ewma_rx_rssi __qdf_ewma_rx_rssi
#define qdf_ewma_rx_rssi_init(rx_rssi) \
__qdf_ewma_rx_rssi_init(rx_rssi)
#define qdf_ewma_rx_rssi_add(rx_rssi, value) \
__qdf_ewma_rx_rssi_add(rx_rssi, value)
#define qdf_ewma_rx_rssi_read(rx_rssi) \
__qdf_ewma_rx_rssi_read(rx_rssi)
/** /**
* qdf_set_bit() - set bit in address * qdf_set_bit() - set bit in address
* @nr: bit number to be set * @nr: bit number to be set

View File

@@ -172,11 +172,13 @@ static inline bool __qdf_is_macaddr_equal(struct qdf_mac_addr *mac_addr1,
#define __QDF_DECLARE_EWMA(name, _factor, _weight) #define __QDF_DECLARE_EWMA(name, _factor, _weight)
#define __qdf_ewma_tx_lag int #define __qdf_ewma_tx_lag int
#define __qdf_ewma_rx_rssi int
#else #else
#define __QDF_DECLARE_EWMA(name, _factor, _weight) \ #define __QDF_DECLARE_EWMA(name, _factor, _weight) \
DECLARE_EWMA(name, _factor, _weight) DECLARE_EWMA(name, _factor, _weight)
#define __qdf_ewma_tx_lag struct ewma_tx_lag #define __qdf_ewma_tx_lag struct ewma_tx_lag
#define __qdf_ewma_rx_rssi struct ewma_rx_rssi
#endif #endif
#define __qdf_ffz(mask) (~(mask) == 0 ? -1 : ffz(mask)) #define __qdf_ffz(mask) (~(mask) == 0 ? -1 : ffz(mask))
@@ -253,6 +255,10 @@ static inline bool __qdf_is_macaddr_equal(struct qdf_mac_addr *mac_addr1,
#define __qdf_ewma_tx_lag_init(tx_lag) #define __qdf_ewma_tx_lag_init(tx_lag)
#define __qdf_ewma_tx_lag_add(tx_lag, value) #define __qdf_ewma_tx_lag_add(tx_lag, value)
#define __qdf_ewma_tx_lag_read(tx_lag) #define __qdf_ewma_tx_lag_read(tx_lag)
#define __qdf_ewma_rx_rssi_init(rx_rssi)
#define __qdf_ewma_rx_rssi_add(rx_rssi, value)
#define __qdf_ewma_rx_rssi_read(rx_rssi)
#else #else
#define __qdf_ewma_tx_lag_init(tx_lag) \ #define __qdf_ewma_tx_lag_init(tx_lag) \
ewma_tx_lag_init(tx_lag) ewma_tx_lag_init(tx_lag)
@@ -262,6 +268,15 @@ static inline bool __qdf_is_macaddr_equal(struct qdf_mac_addr *mac_addr1,
#define __qdf_ewma_tx_lag_read(tx_lag) \ #define __qdf_ewma_tx_lag_read(tx_lag) \
ewma_tx_lag_read(tx_lag) ewma_tx_lag_read(tx_lag)
#define __qdf_ewma_rx_rssi_init(rx_rssi) \
ewma_rx_rssi_init(rx_rssi)
#define __qdf_ewma_rx_rssi_add(rx_rssi, value) \
ewma_rx_rssi_add(rx_rssi, value)
#define __qdf_ewma_rx_rssi_read(rx_rssi) \
ewma_rx_rssi_read(rx_rssi)
#endif #endif
#ifdef QCA_CONFIG_SMP #ifdef QCA_CONFIG_SMP