Merge "qca-wifi: Set FW ADFS support flags in dfs"

This commit is contained in:
Linux Build Service Account
2019-09-25 22:38:09 -07:00
committed by Gerrit - the friendly Code Review server
2 fájl változott, egészen pontosan 48 új sor hozzáadva és 28 régi sor törölve

Fájl megtekintése

@@ -37,6 +37,7 @@
#include "wlan_dfs_mlme_api.h"
#include "wlan_dfs_utils_api.h"
#include "dfs_internal.h"
#include "dfs_zero_cac.h"
#include "dfs_process_radar_found_ind.h"
#define ETSI_CAC_TIME_OUT_MS 86400000
@@ -328,7 +329,7 @@ void dfs_add_to_etsi_precac_required_list(struct wlan_dfs *dfs, uint8_t *chan)
}
if (utils_get_dfsdomain(dfs->dfs_pdev_obj) == DFS_ETSI_REGION &&
dfs->dfs_precac_enable) {
dfs_is_legacy_precac_enabled(dfs)) {
etsi_precac_entry = qdf_mem_malloc(sizeof(*etsi_precac_entry));
if (!etsi_precac_entry) {

Fájl megtekintése

@@ -297,6 +297,16 @@ int dfs_get_override_precac_timeout(struct wlan_dfs *dfs, int *precac_timeout)
return 0;
}
bool dfs_is_legacy_precac_enabled(struct wlan_dfs *dfs)
{
return dfs->dfs_legacy_precac_ucfg;
}
bool dfs_is_agile_precac_enabled(struct wlan_dfs *dfs)
{
return (dfs->dfs_agile_precac_ucfg && dfs->dfs_fw_adfs_support_non_160);
}
/* dfs_descend_precac_tree() - Descend into the precac BSTree based on the
* channel provided. If the channel is less than
* given node's channel, descend left, else right.
@@ -836,7 +846,7 @@ void dfs_unmark_precac_nol(struct wlan_dfs *dfs, uint8_t channel)
"NOL expired for channel %u, trying to start preCAC",
channel);
if (!dfs->dfs_soc_obj->dfs_precac_timer_running) {
if (dfs->dfs_precac_enable) {
if (dfs_is_legacy_precac_enabled(dfs)) {
if (dfs_is_ap_cac_timer_running(dfs)) {
dfs->dfs_defer_precac_channel_change = 1;
dfs_debug(dfs, WLAN_DEBUG_DFS,
@@ -857,7 +867,7 @@ void dfs_unmark_precac_nol(struct wlan_dfs *dfs, uint8_t channel)
dfs_mlme_channel_change_by_precac(
dfs->dfs_pdev_obj);
}
} else if (dfs->dfs_agile_precac_enable &&
} else if (dfs_is_agile_precac_enabled(dfs) &&
!dfs->dfs_soc_obj->precac_state_started) {
/* precac_state_started will be set to false if
* agile CAC is not begun for any channels or
@@ -931,7 +941,7 @@ void dfs_mark_precac_nol(struct wlan_dfs *dfs,
if (!dfs_soc_obj->dfs_precac_timer_running)
return;
if (dfs->dfs_precac_enable) {
if (dfs_is_legacy_precac_enabled(dfs)) {
qdf_timer_sync_cancel(&dfs_soc_obj->dfs_precac_timer);
dfs_soc_obj->dfs_precac_timer_running = 0;
/*
@@ -956,7 +966,7 @@ void dfs_mark_precac_nol(struct wlan_dfs *dfs,
dfs->dfs_pdev_obj);
}
}
} else if (dfs->dfs_agile_precac_enable) {
} else if (dfs_is_agile_precac_enabled(dfs)) {
/* If preCAC is not running on the DFS where radar is detected,
* no need to configure agile channel.
* Return from this function.
@@ -1146,7 +1156,7 @@ static os_timer_func(dfs_precac_timeout)
dfs = dfs_soc_obj->dfs_priv[dfs_soc_obj->cur_precac_dfs_index].dfs;
dfs_soc_obj->dfs_precac_timer_running = 0;
if (!dfs->dfs_agile_precac_enable) {
if (dfs_is_legacy_precac_enabled(dfs)) {
/*
* Remove the HT80 freq from the precac-required-list
* and add it to the precac-done-list
@@ -1175,7 +1185,7 @@ static os_timer_func(dfs_precac_timeout)
*/
dfs_mlme_channel_change_by_precac(dfs->dfs_pdev_obj);
}
} else {
} else if (dfs_is_agile_precac_enabled(dfs)) {
current_time = qdf_system_ticks_to_msecs(qdf_system_ticks());
dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
"Pre-cac expired, Agile Precac chan %u curr time %d",
@@ -2306,6 +2316,17 @@ void dfs_get_ieeechan_for_agilecac(struct wlan_dfs *dfs,
* 20 - 20, 40 - 40, 80 - 80, 160 - 80, 160 (non contiguous) - 80.
*/
dfs_find_chwidth_and_center_chan(dfs, &chwidth, NULL, NULL);
/* Check if the FW supports agile DFS when the pdev is operating on
* 160 or 80P80MHz bandwidth. This information is stored in the flag
* "dfs_fw_adfs_support_160" when the current chainmask is configured.
*/
if ((chwidth == CH_WIDTH_80P80MHZ || chwidth == CH_WIDTH_160MHZ) &&
(!dfs->dfs_fw_adfs_support_160)) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,
"aDFS during 160MHz operation not supported by target");
return;
}
dfs->dfs_precac_chwidth = dfs_find_agile_width(dfs, chwidth);
if (dfs->dfs_precac_chwidth == CH_WIDTH_INVALID) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "cannot start agile CAC!");
@@ -2355,7 +2376,7 @@ void dfs_find_vht80_chan_for_precac(struct wlan_dfs *dfs,
* the secondary VHT80 and Change the mode to
* VHT80_80 or VHT160.
*/
if (dfs->dfs_precac_enable) {
if (dfs_is_legacy_precac_enabled(dfs)) {
/*
* If precac timer is running then do not change the
* secondary channel use the old secondary VHT80
@@ -2443,7 +2464,7 @@ void dfs_find_vht80_chan_for_precac(struct wlan_dfs *dfs,
} else {
dfs->dfs_precac_secondary_freq = 0;
} /* End of if(ieee_freq) */
} /* End of if(dfs->dfs_precac_enable) */
} /* End of if(dfs_is_legacy_precac_enabled(dfs)) */
}
void dfs_set_precac_enable(struct wlan_dfs *dfs, uint32_t value)
@@ -2457,8 +2478,8 @@ void dfs_set_precac_enable(struct wlan_dfs *dfs, uint32_t value)
psoc = wlan_pdev_get_psoc(dfs->dfs_pdev_obj);
if (!psoc) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "psoc is NULL");
dfs->dfs_precac_enable = 0;
dfs->dfs_agile_precac_enable = 0;
dfs->dfs_legacy_precac_ucfg = 0;
dfs->dfs_agile_precac_ucfg = 0;
return;
}
@@ -2494,15 +2515,15 @@ void dfs_set_precac_enable(struct wlan_dfs *dfs, uint32_t value)
* then enable Agile preCAC.
*/
if ((1 == value) && tx_ops->tgt_is_tgt_type_qca9984(target_type) &&
if ((1 == value) &&
(utils_get_dfsdomain(dfs->dfs_pdev_obj) == DFS_ETSI_DOMAIN)) {
dfs->dfs_precac_enable = value;
} else if ((1 == value) && (info->wlan_res_cfg.agile_capability == 1) &&
(utils_get_dfsdomain(dfs->dfs_pdev_obj) == DFS_ETSI_DOMAIN)) {
dfs->dfs_agile_precac_enable = value;
if (tx_ops->tgt_is_tgt_type_qca9984(target_type))
dfs->dfs_legacy_precac_ucfg = value;
else
dfs->dfs_agile_precac_ucfg = value;
} else {
dfs->dfs_agile_precac_enable = 0;
dfs->dfs_precac_enable = 0;
dfs->dfs_agile_precac_ucfg = 0;
dfs->dfs_legacy_precac_ucfg = 0;
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "preCAC disabled");
}
@@ -2553,16 +2574,6 @@ void dfs_agile_precac_start(struct wlan_dfs *dfs)
}
#endif
uint32_t dfs_get_precac_enable(struct wlan_dfs *dfs)
{
return dfs->dfs_precac_enable;
}
bool dfs_get_agile_precac_enable(struct wlan_dfs *dfs)
{
return dfs->dfs_agile_precac_enable;
}
#ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
int32_t dfs_set_precac_intermediate_chan(struct wlan_dfs *dfs, uint32_t value)
{
@@ -2612,4 +2623,12 @@ void dfs_reset_agile_config(struct dfs_soc_priv_obj *dfs_soc)
dfs_soc->precac_state_started = PRECAC_NOT_STARTED;
dfs_soc->ocac_status = OCAC_SUCCESS;
}
void dfs_set_fw_adfs_support(struct wlan_dfs *dfs,
bool fw_adfs_support_160,
bool fw_adfs_support_non_160)
{
dfs->dfs_fw_adfs_support_non_160 = fw_adfs_support_non_160;
dfs->dfs_fw_adfs_support_160 = fw_adfs_support_160;
}
#endif