qcacmn: Define pointer p_dcs_im_stats instead of dcs_im_stats
Both im_intfr_cnt and im_samp_cnt need to store for following dcs event process, dcs_im_stats is a local variable, so both im_intfr_cnt and im_samp_cnt value will be missing when function wlan_dcs_wlan_interference_process return. Fix is to define pointer p_dcs_im_stats for use. Change-Id: I39622fbf0153271f27a03387ace4a270a912b6ff CRs-Fixed: 2638316
This commit is contained in:
@@ -274,7 +274,7 @@ wlan_dcs_wlan_interference_process(
|
||||
{
|
||||
struct wlan_host_dcs_im_tgt_stats *prev_stats;
|
||||
struct pdev_dcs_params dcs_host_params;
|
||||
struct pdev_dcs_im_stats dcs_im_stats;
|
||||
struct pdev_dcs_im_stats *p_dcs_im_stats;
|
||||
bool start_dcs_cbk_handler = false;
|
||||
|
||||
uint32_t reg_tsf_delta = 0;
|
||||
@@ -311,7 +311,7 @@ wlan_dcs_wlan_interference_process(
|
||||
}
|
||||
|
||||
dcs_host_params = dcs_pdev_priv->dcs_host_params;
|
||||
dcs_im_stats = dcs_pdev_priv->dcs_im_stats;
|
||||
p_dcs_im_stats = &dcs_pdev_priv->dcs_im_stats;
|
||||
prev_stats = &dcs_pdev_priv->dcs_im_stats.prev_dcs_im_stats;
|
||||
|
||||
if (unlikely(dcs_host_params.dcs_debug >= DCS_DEBUG_VERBOSE))
|
||||
@@ -512,16 +512,16 @@ wlan_dcs_wlan_interference_process(
|
||||
|
||||
if (reg_unused_cu >= dcs_host_params.coch_intfr_threshold)
|
||||
/* Quickly reach to decision */
|
||||
dcs_im_stats.im_intfr_cnt += 2;
|
||||
p_dcs_im_stats->im_intfr_cnt += 2;
|
||||
else if (too_many_phy_errors &&
|
||||
(((total_wasted_cu >
|
||||
(dcs_host_params.coch_intfr_threshold + 10)) &&
|
||||
((reg_tx_cu + reg_rx_cu) > dcs_host_params.user_max_cu)) ||
|
||||
((reg_tx_cu > DCS_TX_MAX_CU) &&
|
||||
(tx_err >= dcs_host_params.tx_err_threshold))))
|
||||
dcs_im_stats.im_intfr_cnt++;
|
||||
p_dcs_im_stats->im_intfr_cnt++;
|
||||
|
||||
if (dcs_im_stats.im_intfr_cnt >=
|
||||
if (p_dcs_im_stats->im_intfr_cnt >=
|
||||
dcs_host_params.intfr_detection_threshold) {
|
||||
if (unlikely(dcs_host_params.dcs_debug >= DCS_DEBUG_CRITICAL)) {
|
||||
dcs_debug("interference threshold exceeded");
|
||||
@@ -530,8 +530,8 @@ wlan_dcs_wlan_interference_process(
|
||||
total_wasted_cu, reg_tx_cu, reg_rx_cu);
|
||||
}
|
||||
|
||||
dcs_im_stats.im_intfr_cnt = 0;
|
||||
dcs_im_stats.im_samp_cnt = 0;
|
||||
p_dcs_im_stats->im_intfr_cnt = 0;
|
||||
p_dcs_im_stats->im_samp_cnt = 0;
|
||||
/*
|
||||
* Once the interference is detected, change the channel, as on
|
||||
* today this is common routine for wirelesslan and
|
||||
@@ -539,22 +539,23 @@ wlan_dcs_wlan_interference_process(
|
||||
* because of the DA code, which is using the same function.
|
||||
*/
|
||||
start_dcs_cbk_handler = true;
|
||||
} else if (!dcs_im_stats.im_intfr_cnt ||
|
||||
dcs_im_stats.im_samp_cnt >=
|
||||
} else if (0 == p_dcs_im_stats->im_intfr_cnt ||
|
||||
p_dcs_im_stats->im_samp_cnt >=
|
||||
dcs_host_params.intfr_detection_window) {
|
||||
dcs_im_stats.im_intfr_cnt = 0;
|
||||
dcs_im_stats.im_samp_cnt = 0;
|
||||
p_dcs_im_stats->im_intfr_cnt = 0;
|
||||
p_dcs_im_stats->im_samp_cnt = 0;
|
||||
}
|
||||
|
||||
/* Count the current run too */
|
||||
dcs_im_stats.im_samp_cnt++;
|
||||
p_dcs_im_stats->im_samp_cnt++;
|
||||
|
||||
/* Copy the stats for next cycle */
|
||||
wlan_dcs_im_copy_stats(prev_stats, curr_stats);
|
||||
|
||||
if (unlikely(dcs_host_params.dcs_debug >= DCS_DEBUG_VERBOSE))
|
||||
dcs_debug("intfr_count: %u, sample_count: %u",
|
||||
dcs_im_stats.im_intfr_cnt, dcs_im_stats.im_samp_cnt);
|
||||
p_dcs_im_stats->im_intfr_cnt,
|
||||
p_dcs_im_stats->im_samp_cnt);
|
||||
|
||||
end:
|
||||
return start_dcs_cbk_handler;
|
||||
|
Reference in New Issue
Block a user