diff --git a/dp/cmn_dp_api/dp_ratetable.c b/dp/cmn_dp_api/dp_ratetable.c index 1701d08600..2670460cf8 100644 --- a/dp/cmn_dp_api/dp_ratetable.c +++ b/dp/cmn_dp_api/dp_ratetable.c @@ -18,6 +18,7 @@ #include "dp_ratetable.h" #include "qdf_module.h" +#include "cdp_txrx_mon_struct.h" enum { MODE_11A = 0, /* 11a Mode */ @@ -3211,7 +3212,8 @@ enum DP_CMN_MODULATION_TYPE dp_getmodulation( * return - rate in kbps */ uint32_t -dp_getrateindex(uint16_t mcs, uint8_t nss, uint8_t preamble, uint8_t bw) +dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble, + uint8_t bw) { uint32_t ratekbps = 0, res = RT_INVALID_INDEX; /* represents failure */ uint16_t rc; @@ -3251,7 +3253,21 @@ dp_getrateindex(uint16_t mcs, uint8_t nss, uint8_t preamble, uint8_t bw) if (res >= DP_RATE_TABLE_SIZE) return ratekbps; - ratekbps = dp_11abgnratetable.info[res].userratekbps; + if (!gi) { + ratekbps = dp_11abgnratetable.info[res].userratekbps; + } else { + switch (gi) { + case CDP_SGI_0_4_US: + ratekbps = dp_11abgnratetable.info[res].ratekbpssgi; + break; + case CDP_SGI_1_6_US: + ratekbps = dp_11abgnratetable.info[res].ratekbpsdgi; + break; + case CDP_SGI_3_2_US: + ratekbps = dp_11abgnratetable.info[res].ratekbpsqgi; + break; + } + } return ratekbps; } diff --git a/dp/cmn_dp_api/dp_ratetable.h b/dp/cmn_dp_api/dp_ratetable.h index 88000f0c29..940b28ea4c 100644 --- a/dp/cmn_dp_api/dp_ratetable.h +++ b/dp/cmn_dp_api/dp_ratetable.h @@ -165,7 +165,8 @@ enum DP_CMN_MODULATION_TYPE dp_getmodulation( uint8_t width); uint32_t -dp_getrateindex(uint16_t mcs, uint8_t nss, uint8_t preamble, uint8_t bw); +dp_getrateindex(uint32_t gi, uint16_t mcs, uint8_t nss, uint8_t preamble, + uint8_t bw); int dp_rate_idx_to_kbps(uint8_t rate_idx, uint8_t gintval); diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index 9c40eef14c..e1ef69d0ab 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -104,7 +104,8 @@ dp_tx_rate_stats_update(struct dp_peer *peer, dp_peer_stats_notify(peer); - ratekbps = dp_getrateindex(ppdu->mcs, + ratekbps = dp_getrateindex(ppdu->gi, + ppdu->mcs, ppdu->nss, ppdu->preamble, ppdu->bw); diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index ee9a98b4a3..8c6941b204 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -144,7 +144,8 @@ static inline void dp_rx_rate_stats_update(struct dp_peer *peer, else nss = ppdu->u.nss - 1; - ratekbps = dp_getrateindex(ppdu->u.mcs, + ratekbps = dp_getrateindex(ppdu->u.gi, + ppdu->u.mcs, nss, ppdu->u.preamble, ppdu->u.bw);