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:

committed by
Madan Koyyalamudi

parent
a29914f3dc
commit
ea38e7997e
@@ -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_MPDU_START) ||
|
||||||
(tlv_status == HAL_TLV_STATUS_MSDU_END));
|
(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)) {
|
if (qdf_unlikely(mon_pdev->dp_peer_based_pktlog)) {
|
||||||
dp_rx_process_peer_based_pktlog(soc, ppdu_info,
|
dp_rx_process_peer_based_pktlog(soc, ppdu_info,
|
||||||
status_nbuf,
|
status_nbuf,
|
||||||
|
@@ -1454,6 +1454,7 @@ dp_rx_mon_process_status_tlv(struct dp_pdev *pdev)
|
|||||||
mon_pdev->rx_mon_stats.status_buf_count++;
|
mon_pdev->rx_mon_stats.status_buf_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dp_mon_rx_stats_update_rssi_dbm_params(mon_pdev, ppdu_info);
|
||||||
if (work_done) {
|
if (work_done) {
|
||||||
mon_pdev->rx_mon_stats.mon_rx_bufs_replenished_dest +=
|
mon_pdev->rx_mon_stats.mon_rx_bufs_replenished_dest +=
|
||||||
work_done;
|
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 = pdev->monitor_pdev;
|
||||||
|
mon_pdev->rssi_dbm_conv_support =
|
||||||
|
soc->features.rssi_dbm_conv_support;
|
||||||
|
|
||||||
if (dp_rssi_params->rssi_temp_off_present) {
|
if (dp_rssi_params->rssi_temp_off_present) {
|
||||||
temp_off_param = dp_rssi_params->temp_off_param;
|
temp_off_param = dp_rssi_params->temp_off_param;
|
||||||
mon_pdev->ppdu_info.rx_status.rssi_temp_offset =
|
mon_pdev->rssi_offsets.rssi_temp_offset =
|
||||||
temp_off_param.rssi_temp_offset;
|
temp_off_param.rssi_temp_offset;
|
||||||
}
|
}
|
||||||
if (dp_rssi_params->rssi_dbm_info_present) {
|
if (dp_rssi_params->rssi_dbm_info_present) {
|
||||||
conv_params = dp_rssi_params->rssi_dbm_param;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mon_pdev->ppdu_info.rx_status.xlna_bypass_offset =
|
mon_pdev->rssi_offsets.xlna_bypass_offset =
|
||||||
conv_params.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;
|
conv_params.xlna_bypass_threshold;
|
||||||
mon_pdev->ppdu_info.rx_status.xbar_config =
|
mon_pdev->rssi_offsets.xbar_config = conv_params.xbar_config;
|
||||||
conv_params.xbar_config;
|
mon_pdev->rssi_offsets.min_nf_dbm = min_nf;
|
||||||
|
mon_pdev->rssi_offsets.rssi_offset =
|
||||||
mon_pdev->ppdu_info.rx_status.min_nf_dbm = min_nf;
|
mon_pdev->rssi_offsets.min_nf_dbm +
|
||||||
mon_pdev->ppdu_info.rx_status.rssi_dbm_conv_support =
|
mon_pdev->rssi_offsets.rssi_temp_offset;
|
||||||
soc->features.rssi_dbm_conv_support;
|
|
||||||
}
|
}
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -931,6 +931,21 @@ struct dp_mon_peer {
|
|||||||
struct cdp_peer_rate_stats_ctx *peerstats_ctx;
|
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 {
|
struct dp_mon_pdev {
|
||||||
/* monitor */
|
/* monitor */
|
||||||
bool monitor_configured;
|
bool monitor_configured;
|
||||||
@@ -1119,6 +1134,9 @@ struct dp_mon_pdev {
|
|||||||
|
|
||||||
/* Invalid monitor peer to account for stats in mcopy mode */
|
/* Invalid monitor peer to account for stats in mcopy mode */
|
||||||
struct dp_mon_peer *invalid_mon_peer;
|
struct dp_mon_peer *invalid_mon_peer;
|
||||||
|
|
||||||
|
bool rssi_dbm_conv_support;
|
||||||
|
struct dp_rx_mon_rssi_offset rssi_offsets;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dp_mon_vdev {
|
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
|
* 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,
|
static uint8_t dp_rx_mon_rf_index_conv(uint8_t chain,
|
||||||
struct hal_rx_ppdu_info *ppdu_info,
|
struct dp_mon_pdev *mon_pdev)
|
||||||
struct dp_pdev *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 ((xbar_config >> (3 * chain)) & 0x07);
|
||||||
return chain;
|
return chain;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static uint8_t dp_rx_mon_rf_index_conv(uint8_t chain,
|
static uint8_t dp_rx_mon_rf_index_conv(uint8_t chain,
|
||||||
struct hal_rx_ppdu_info *ppdu_info,
|
struct dp_mon_pdev *mon_pdev)
|
||||||
struct dp_pdev *pdev)
|
|
||||||
{
|
{
|
||||||
return chain;
|
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 chain, bw;
|
||||||
uint8_t rssi;
|
uint8_t rssi;
|
||||||
uint8_t chain_rf;
|
uint8_t chain_rf;
|
||||||
|
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
|
||||||
|
|
||||||
for (chain = 0; chain < SS_COUNT; chain++) {
|
for (chain = 0; chain < SS_COUNT; chain++) {
|
||||||
for (bw = 0; bw < MAX_BW; bw++) {
|
for (bw = 0; bw < MAX_BW; bw++) {
|
||||||
chain_rf = dp_rx_mon_rf_index_conv(chain,
|
chain_rf = dp_rx_mon_rf_index_conv(chain, mon_pdev);
|
||||||
ppdu_info, pdev);
|
|
||||||
rssi = ppdu_info->rx_status.rssi_chain[chain_rf][bw];
|
rssi = ppdu_info->rx_status.rssi_chain[chain_rf][bw];
|
||||||
if (rssi != DP_RSSI_INVAL)
|
if (rssi != DP_RSSI_INVAL)
|
||||||
cdp_rx_ppdu->rssi_chain[chain_rf][bw] = rssi;
|
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;
|
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,
|
uint32_t dp_mon_rx_add_tlv(uint8_t id, uint16_t len, void *value,
|
||||||
qdf_nbuf_t mpdu_nbuf);
|
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_ */
|
#endif /* _DP_RX_MON_H_ */
|
||||||
|
@@ -359,13 +359,9 @@ typedef __qdf_nbuf_queue_t qdf_nbuf_queue_t;
|
|||||||
* @aggregation: Indicate A-MPDU format
|
* @aggregation: Indicate A-MPDU format
|
||||||
* @ht_stbc: Indicate stbc
|
* @ht_stbc: Indicate stbc
|
||||||
* @ht_crc: ht crc
|
* @ht_crc: ht crc
|
||||||
* @xlna_bypass_offset: Low noise amplifier bypass offset
|
|
||||||
* @xlna_bypass_threshold: Low noise amplifier bypass threshold
|
|
||||||
* @rssi_temp_offset: Temperature based rssi offset
|
|
||||||
* @min_nf_dbm: min noise floor in active chains per channel
|
|
||||||
* @xbar_config: 4 bytes, used for BB to RF Chain mapping
|
|
||||||
* @rssi_dbm_conv_support: Rssi dbm conversion support param
|
|
||||||
* @rx_user_status: pointer to mon_rx_user_status, when set update
|
* @rx_user_status: pointer to mon_rx_user_status, when set update
|
||||||
|
* @rssi_offset: This offset value will use for RSSI db to dbm conversion
|
||||||
|
* @rssi_dbm_conv_support: Rssi dbm converstion support param
|
||||||
* radiotap header will use userinfo from this structure.
|
* radiotap header will use userinfo from this structure.
|
||||||
*/
|
*/
|
||||||
struct mon_rx_status {
|
struct mon_rx_status {
|
||||||
@@ -482,16 +478,10 @@ struct mon_rx_status {
|
|||||||
aggregation:1,
|
aggregation:1,
|
||||||
ht_stbc:2,
|
ht_stbc:2,
|
||||||
ht_crc:8;
|
ht_crc:8;
|
||||||
#endif
|
|
||||||
#ifdef QCA_RSSI_DB2DBM
|
|
||||||
int32_t xlna_bypass_offset;
|
|
||||||
int32_t xlna_bypass_threshold;
|
|
||||||
int32_t rssi_temp_offset;
|
|
||||||
int8_t min_nf_dbm;
|
|
||||||
uint32_t xbar_config;
|
|
||||||
bool rssi_dbm_conv_support;
|
|
||||||
#endif
|
#endif
|
||||||
struct mon_rx_user_status *rx_user_status;
|
struct mon_rx_user_status *rx_user_status;
|
||||||
|
int32_t rssi_offset;
|
||||||
|
bool rssi_dbm_conv_support;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -5412,8 +5412,7 @@ static unsigned int qdf_nbuf_update_radiotap_ampdu_flags(
|
|||||||
#ifdef QCA_RSSI_DB2DBM
|
#ifdef QCA_RSSI_DB2DBM
|
||||||
#define QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status) \
|
#define QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status) \
|
||||||
(((rx_status)->rssi_dbm_conv_support) ? \
|
(((rx_status)->rssi_dbm_conv_support) ? \
|
||||||
((rx_status)->rssi_comb + (rx_status)->min_nf_dbm +\
|
((rx_status)->rssi_comb + (rx_status)->rssi_offset) :\
|
||||||
(rx_status)->rssi_temp_offset) : \
|
|
||||||
((rx_status)->rssi_comb + (rx_status)->chan_noise_floor))
|
((rx_status)->rssi_comb + (rx_status)->chan_noise_floor))
|
||||||
#else
|
#else
|
||||||
#define QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status) \
|
#define QDF_MON_STATUS_GET_RSSI_IN_DBM(rx_status) \
|
||||||
|
Reference in New Issue
Block a user