qcacmn: Fix for delay in preCAC timeout for non-weather radar channels

Maximum among primary CAC timeout and secondary timeout was used to
determime preCAC timeout. Due to this the non-weather radar channels
were also using 600sec as preCAC timeout.

To fix this, CAC on primary channel is done, then use secondary
preCAC timeout.

CRs-fixed: 2303360
Change-Id: If229957d8778a0a7794650e2908da8353fb9e090
Cette révision appartient à :
Shreedhar Parande
2018-08-29 19:49:17 +05:30
révisé par nshrivas
Parent 0ab053e1e1
révision ed2d24fc50

Voir le fichier

@@ -94,6 +94,7 @@
#include "wlan_dfs_mlme_api.h"
#include "wlan_dfs_utils_api.h"
#include "../dfs_internal.h"
#include "../dfs_etsi_precac.h"
void dfs_zero_cac_reset(struct wlan_dfs *dfs)
{
@@ -796,9 +797,21 @@ void dfs_start_precac_timer(struct wlan_dfs *dfs, uint8_t precac_chan)
* which cancels any previous CAC timer and starts a new CAC again.
* So CAC expiry does not happen and moreover a new CAC is started.
* Therefore do not disturb the CAC by channel restart (vdev_restart).
*
* If CAC was already completed on primary, then we do not need to
* calculate which CAC timeout is maximum.
* For example: If primary's CAC is 600 seconds and secondary's CAC
* is 60 seconds then maximum gives 600 seconds which is not needed
* if CAC was already completed on primary. It is to be noted that
* etsi_precac/cac is done on primary segment.
*/
precac_timeout = QDF_MAX(primary_cac_timeout, secondary_cac_timeout) +
EXTRA_TIME_IN_SEC;
if (!dfs_is_etsi_precac_done(dfs))
precac_timeout = QDF_MAX(primary_cac_timeout,
secondary_cac_timeout) +
EXTRA_TIME_IN_SEC;
else
precac_timeout = secondary_cac_timeout + EXTRA_TIME_IN_SEC;
dfs_debug(dfs, WLAN_DEBUG_DFS,
"precactimeout = %d", (precac_timeout)*1000);
qdf_timer_mod(&dfs->dfs_precac_timer, (precac_timeout) * 1000);