qcacmn: Add support to handle HE 6GHz duplicate beacon

Check HE 6GHz duplicate beacon in scan results and do not
drop the beacon due to channel mismatch.

Change-Id: If095c18e4ad377a5909c9460fceaa47a2a768ce0
CRs-Fixed: 2654483
This commit is contained in:
Kiran Kumar Lokere
2020-03-31 17:49:29 -07:00
committato da nshrivas
parent c053dca35b
commit 1413ea8e1e

Vedi File

@@ -238,11 +238,13 @@ static struct he_oper_6g_param *util_scan_get_he_6g_params(uint8_t *he_ops)
static void
util_scan_get_chan_from_he_6g_params(struct scan_cache_entry *scan_params,
uint8_t *chan_idx)
uint8_t *chan_idx, bool *he_6g_dup_bcon)
{
struct he_oper_6g_param *he_6g_params;
uint8_t *he_ops;
*he_6g_dup_bcon = false;
he_ops = util_scan_entry_heop(scan_params);
if (!util_scan_entry_hecap(scan_params) || !he_ops)
return;
@@ -252,6 +254,7 @@ util_scan_get_chan_from_he_6g_params(struct scan_cache_entry *scan_params,
return;
*chan_idx = he_6g_params->primary_channel;
*he_6g_dup_bcon = he_6g_params->duplicate_beacon ? true : false;
}
static enum wlan_phymode
@@ -311,7 +314,7 @@ util_scan_get_phymode_6g(struct wlan_objmgr_pdev *pdev,
#else
static void
util_scan_get_chan_from_he_6g_params(struct scan_cache_entry *scan_params,
uint8_t *chan_idx)
uint8_t *chan_idx, bool *he_6g_dup_bcon)
{}
static inline enum wlan_phymode
util_scan_get_phymode_6g(struct wlan_objmgr_pdev *pdev,
@@ -1410,6 +1413,7 @@ util_scan_gen_scan_entry(struct wlan_objmgr_pdev *pdev,
struct qbss_load_ie *qbss_load;
struct scan_cache_node *scan_node;
uint8_t i, chan_idx = 0;
bool he_6g_dup_bcon = false;
scan_entry = qdf_mem_malloc_atomic(sizeof(*scan_entry));
if (!scan_entry) {
@@ -1507,7 +1511,8 @@ util_scan_gen_scan_entry(struct wlan_objmgr_pdev *pdev,
scan_entry->is_p2p = true;
if (!chan_idx && util_scan_entry_hecap(scan_entry))
util_scan_get_chan_from_he_6g_params(scan_entry, &chan_idx);
util_scan_get_chan_from_he_6g_params(scan_entry, &chan_idx,
&he_6g_dup_bcon);
if (chan_idx) {
uint8_t band_mask = BIT(wlan_reg_freq_to_band(
@@ -1523,7 +1528,8 @@ util_scan_gen_scan_entry(struct wlan_objmgr_pdev *pdev,
scan_entry->channel.chan_freq = rx_param->chan_freq;
} else if (rx_param->chan_freq !=
scan_entry->channel.chan_freq) {
if (!wlan_reg_is_49ghz_freq(scan_entry->channel.chan_freq))
if (!wlan_reg_is_49ghz_freq(scan_entry->channel.chan_freq) &&
!he_6g_dup_bcon)
scan_entry->channel_mismatch = true;
}