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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user