Disable pri/sec channel switch for GO with force frequency
Do not allow 40 MHz co-ex PRI/SEC switch to force
to change Autonomous GO PRI channel, when P2P group
add is called with a force frequency. This is to,
1. Avoid 20/40 coex scan & reduce GO bring up time.
2. Allow supplicant to follow the same frequency requested
by the application.
Bug: 250456161
Test: Tested autonomous GO & confirmed from the logs that
P2P GO is not triggering 20/40 coex scan .
Signed-off-by: Sunil Ravi <sunilravi@google.com>
Change-Id: Ib891f0c6de948580b9868e898a88ff61c598af66
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 0261362..bee4fe7 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -414,7 +414,9 @@
}
}
- if (conf->secondary_channel) {
+ if (wpa_s->p2p_go_no_pri_sec_switch) {
+ conf->no_pri_sec_switch = 1;
+ } else if (conf->secondary_channel) {
struct wpa_supplicant *iface;
for (iface = wpa_s->global->ifaces; iface; iface = iface->next)
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index 2e7cc4c..f658fa0 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -6909,6 +6909,7 @@
bool allow_6ghz)
{
struct p2p_go_neg_results params;
+ int selected_freq = 0;
if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL)
return -1;
@@ -6923,12 +6924,12 @@
wpas_p2p_stop_find_oper(wpa_s);
if (!wpa_s->p2p_go_do_acs) {
- freq = wpas_p2p_select_go_freq(wpa_s, freq);
- if (freq < 0)
+ selected_freq = wpas_p2p_select_go_freq(wpa_s, freq);
+ if (selected_freq < 0)
return -1;
}
- if (wpas_p2p_init_go_params(wpa_s, ¶ms, freq, vht_center_freq2,
+ if (wpas_p2p_init_go_params(wpa_s, ¶ms, selected_freq, vht_center_freq2,
ht40, vht, max_oper_chwidth, he, edmg,
NULL))
return -1;
@@ -6939,6 +6940,8 @@
wpa_s = wpas_p2p_get_group_iface(wpa_s, 0, 1);
if (wpa_s == NULL)
return -1;
+ if (freq > 0)
+ wpa_s->p2p_go_no_pri_sec_switch = 1;
wpas_start_wps_go(wpa_s, ¶ms, 0);
return 0;
@@ -7058,6 +7061,7 @@
freq = wpas_p2p_select_go_freq(wpa_s, force_freq);
if (freq < 0)
return -1;
+ wpa_s->p2p_go_no_pri_sec_switch = 1;
} else {
freq = wpas_p2p_select_go_freq(wpa_s, neg_freq);
if (freq < 0 ||
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 9daf908..a76da0b 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -1162,6 +1162,7 @@
unsigned int user_initiated_pd:1;
unsigned int p2p_go_group_formation_completed:1;
unsigned int group_formation_reported:1;
+ unsigned int p2p_go_no_pri_sec_switch:1;
unsigned int waiting_presence_resp;
int p2p_first_connection_timeout;
unsigned int p2p_nfc_tag_enabled:1;