qcacmn: update RSSI specific parameters in mon pdev

Before we are updating RSSI params directly into mon_rx_status
this structure will reset every PPDU this breaks iwconfig,
wlanconfig and monitor packet RSSI values.
Fix added to storing the values in the mon_pdev.

Change-Id: I9f8fa776c65cbad84fac5e8c2f65b3fce1386e20
CRs-Fixed: 3276503
This commit is contained in:
KARTHIK KUMAR T
2022-08-25 20:27:58 +05:30
committed by Madan Koyyalamudi
父節點 a29914f3dc
當前提交 ea38e7997e
共有 8 個文件被更改,包括 63 次插入34 次删除

查看文件

@@ -498,6 +498,7 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, struct dp_intr *int_ctx,
(tlv_status == HAL_TLV_STATUS_MPDU_START) ||
(tlv_status == HAL_TLV_STATUS_MSDU_END));
}
dp_mon_rx_stats_update_rssi_dbm_params(mon_pdev, ppdu_info);
if (qdf_unlikely(mon_pdev->dp_peer_based_pktlog)) {
dp_rx_process_peer_based_pktlog(soc, ppdu_info,
status_nbuf,

查看文件

@@ -1454,6 +1454,7 @@ dp_rx_mon_process_status_tlv(struct dp_pdev *pdev)
mon_pdev->rx_mon_stats.status_buf_count++;
}
dp_mon_rx_stats_update_rssi_dbm_params(mon_pdev, ppdu_info);
if (work_done) {
mon_pdev->rx_mon_stats.mon_rx_bufs_replenished_dest +=
work_done;

查看文件

@@ -5936,11 +5936,13 @@ dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc,
}
mon_pdev = pdev->monitor_pdev;
mon_pdev->rssi_dbm_conv_support =
soc->features.rssi_dbm_conv_support;
if (dp_rssi_params->rssi_temp_off_present) {
temp_off_param = dp_rssi_params->temp_off_param;
mon_pdev->ppdu_info.rx_status.rssi_temp_offset =
temp_off_param.rssi_temp_offset;
mon_pdev->rssi_offsets.rssi_temp_offset =
temp_off_param.rssi_temp_offset;
}
if (dp_rssi_params->rssi_dbm_info_present) {
conv_params = dp_rssi_params->rssi_dbm_param;
@@ -5953,16 +5955,15 @@ dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc,
continue;
}
}
mon_pdev->ppdu_info.rx_status.xlna_bypass_offset =
mon_pdev->rssi_offsets.xlna_bypass_offset =
conv_params.xlna_bypass_offset;
mon_pdev->ppdu_info.rx_status.xlna_bypass_threshold =
mon_pdev->rssi_offsets.xlna_bypass_threshold =
conv_params.xlna_bypass_threshold;
mon_pdev->ppdu_info.rx_status.xbar_config =
conv_params.xbar_config;
mon_pdev->ppdu_info.rx_status.min_nf_dbm = min_nf;
mon_pdev->ppdu_info.rx_status.rssi_dbm_conv_support =
soc->features.rssi_dbm_conv_support;
mon_pdev->rssi_offsets.xbar_config = conv_params.xbar_config;
mon_pdev->rssi_offsets.min_nf_dbm = min_nf;
mon_pdev->rssi_offsets.rssi_offset =
mon_pdev->rssi_offsets.min_nf_dbm +
mon_pdev->rssi_offsets.rssi_temp_offset;
}
return QDF_STATUS_SUCCESS;
}

查看文件

@@ -931,6 +931,21 @@ struct dp_mon_peer {
struct cdp_peer_rate_stats_ctx *peerstats_ctx;
};
struct dp_rx_mon_rssi_offset {
/* Temperature based rssi offset */
int32_t rssi_temp_offset;
/* Low noise amplifier bypass offset */
int32_t xlna_bypass_offset;
/* Low noise amplifier bypass threshold */
int32_t xlna_bypass_threshold;
/* 3 Bytes of xbar_config are used for RF to BB mapping */
uint32_t xbar_config;
/* min noise floor in active chains per channel */
int8_t min_nf_dbm;
/* this value is sum of temp_oofset + min_nf*/
int32_t rssi_offset;
};
struct dp_mon_pdev {
/* monitor */
bool monitor_configured;
@@ -1119,6 +1134,9 @@ struct dp_mon_pdev {
/* Invalid monitor peer to account for stats in mcopy mode */
struct dp_mon_peer *invalid_mon_peer;
bool rssi_dbm_conv_support;
struct dp_rx_mon_rssi_offset rssi_offsets;
};
struct dp_mon_vdev {

查看文件

@@ -306,19 +306,17 @@ dp_bb_captured_chan_status(struct dp_pdev *pdev,
* bits 21 to 23 = 3, maps BB chain 3 for RF chain 7
*/
static uint8_t dp_rx_mon_rf_index_conv(uint8_t chain,
struct hal_rx_ppdu_info *ppdu_info,
struct dp_pdev *pdev)
struct dp_mon_pdev *mon_pdev)
{
uint32_t xbar_config = ppdu_info->rx_status.xbar_config;
uint32_t xbar_config = mon_pdev->rssi_offsets.xbar_config;
if (pdev->soc->features.rssi_dbm_conv_support && xbar_config)
if (mon_pdev->rssi_dbm_conv_support && xbar_config)
return ((xbar_config >> (3 * chain)) & 0x07);
return chain;
}
#else
static uint8_t dp_rx_mon_rf_index_conv(uint8_t chain,
struct hal_rx_ppdu_info *ppdu_info,
struct dp_pdev *pdev)
struct dp_mon_pdev *mon_pdev)
{
return chain;
}
@@ -331,11 +329,11 @@ dp_rx_populate_rx_rssi_chain(struct hal_rx_ppdu_info *ppdu_info,
uint8_t chain, bw;
uint8_t rssi;
uint8_t chain_rf;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
for (chain = 0; chain < SS_COUNT; chain++) {
for (bw = 0; bw < MAX_BW; bw++) {
chain_rf = dp_rx_mon_rf_index_conv(chain,
ppdu_info, pdev);
chain_rf = dp_rx_mon_rf_index_conv(chain, mon_pdev);
rssi = ppdu_info->rx_status.rssi_chain[chain_rf][bw];
if (rssi != DP_RSSI_INVAL)
cdp_rx_ppdu->rssi_chain[chain_rf][bw] = rssi;
@@ -2029,3 +2027,12 @@ dp_mon_rx_add_tlv(uint8_t id, uint16_t len, void *value, qdf_nbuf_t mpdu_nbuf)
return num_bytes_pushed;
}
void
dp_mon_rx_stats_update_rssi_dbm_params(struct dp_mon_pdev *mon_pdev,
struct hal_rx_ppdu_info *ppdu_info)
{
ppdu_info->rx_status.rssi_offset = mon_pdev->rssi_offsets.rssi_offset;
ppdu_info->rx_status.rssi_dbm_conv_support =
mon_pdev->rssi_dbm_conv_support;
}

查看文件

@@ -772,4 +772,16 @@ dp_rx_process_peer_based_pktlog(struct dp_soc *soc,
uint32_t dp_mon_rx_add_tlv(uint8_t id, uint16_t len, void *value,
qdf_nbuf_t mpdu_nbuf);
/**
* dp_mon_rx_stats_update_rssi_dbm_params() - update rssi calibration
* parameters in rx stats
* @mon_pdev: monitor pdev
* @ppdu_info: Structure for rx ppdu info
*
* Return: none
*/
void
dp_mon_rx_stats_update_rssi_dbm_params(struct dp_mon_pdev *mon_pdev,
struct hal_rx_ppdu_info *ppdu_info);
#endif /* _DP_RX_MON_H_ */