nl80211: Add get_noa() support for WFD certification (BRCM)
BUG: b/5367351
Change-Id: I14ed79e10ade205c5dd4cdc0d2e888ed1279d1bb
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 1ee2d15..a163c28 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -327,12 +327,12 @@
#if defined(ANDROID_BRCM_P2P_PATCH) && defined(CONFIG_AP)
for (iface = wpa_s->global->ifaces; iface; iface = iface->next) {
if (iface->ap_iface){
- wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PBC: iface 0x%08x wpa_s->ap_iface %p", iface, iface->ap_iface);
+ wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PBC: iface 0x%08x wpa_s->ap_iface %p", (u32)iface, iface->ap_iface);
wpa_supplicant_ap_wps_pbc(iface, _bssid, _p2p_dev_addr);
return 0;
}
else
- wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PBC: ap_iface is not set iface 0x%08x", iface);
+ wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PBC: ap_iface is not set iface 0x%08x", (u32)iface);
}
#elif defined CONFIG_AP
if (wpa_s->ap_iface)
@@ -370,14 +370,14 @@
#if defined(ANDROID_BRCM_P2P_PATCH) && defined(CONFIG_AP)
for (iface = wpa_s->global->ifaces; iface; iface = iface->next) {
if (iface->ap_iface){
- wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PIN: iface 0x%08x wpa_s->ap_iface %p", iface, iface->ap_iface);
+ wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PIN: iface 0x%08x wpa_s->ap_iface %p", (u32)iface, iface->ap_iface);
/* Call the wps registrar for the main interface */
wpa_supplicant_ap_wps_pin(iface, _bssid, pin,
buf, buflen);
return 0;
}
else
- wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PIN: ap_iface is not set iface 0x%08x", iface);
+ wpa_printf(MSG_DEBUG, "CTRL_IFACE WPS_PIN: ap_iface is not set iface 0x%08x", (u32)iface);
}
#elif defined CONFIG_AP
if (wpa_s->ap_iface)
@@ -2814,6 +2814,24 @@
buf, buflen);
}
+#ifdef ANDROID_BRCM_P2P_PATCH
+struct wpa_supplicant* p2p_get_apif(struct wpa_supplicant* wpa_s)
+{
+ struct wpa_supplicant* iface;
+ for (iface = wpa_s->global->ifaces; iface; iface = iface->next)
+ if (iface->ap_iface)
+ return iface;
+ return wpa_s;
+}
+struct wpa_supplicant* p2p_get_clientif(struct wpa_supplicant* wpa_s)
+{
+ struct wpa_supplicant* iface;
+ for (iface = wpa_s->global->ifaces; iface; iface = iface->next)
+ if (iface->p2p_group_interface == P2P_GROUP_INTERFACE_CLIENT)
+ return iface;
+ return wpa_s;
+}
+#endif
static int p2p_ctrl_set(struct wpa_supplicant *wpa_s, char *cmd)
{
@@ -2869,17 +2887,46 @@
return -1;
wpa_printf(MSG_DEBUG, "CTRL_IFACE: P2P_SET GO NoA: count=%d "
"start=%d duration=%d", count, start, duration);
+#ifdef ANDROID_BRCM_P2P_PATCH
+ return wpas_p2p_set_noa(p2p_get_apif(wpa_s), count, start, duration);
+#else
return wpas_p2p_set_noa(wpa_s, count, start, duration);
+#endif
}
if (os_strcmp(cmd, "ps") == 0)
+#ifdef ANDROID_BRCM_P2P_PATCH
+ return wpas_drv_set_p2p_powersave(p2p_get_clientif(wpa_s), atoi(param), -1, -1);
+#else
return wpa_drv_set_p2p_powersave(wpa_s, atoi(param), -1, -1);
+#endif
if (os_strcmp(cmd, "oppps") == 0)
+#ifdef ANDROID_BRCM_P2P_PATCH
+ return wpas_drv_set_p2p_powersave(p2p_get_apif(wpa_s), -1, atoi(param), -1);
+#else
return wpa_drv_set_p2p_powersave(wpa_s, -1, atoi(param), -1);
+#endif
if (os_strcmp(cmd, "ctwindow") == 0)
+#ifdef ANDROID_BRCM_P2P_PATCH
+ return wpa_drv_set_p2p_powersave(p2p_get_apif(wpa_s), -1, -1, atoi(param));
+#else
return wpa_drv_set_p2p_powersave(wpa_s, -1, -1, atoi(param));
+#endif
+
+ if (os_strcmp(cmd, "disabled") == 0) {
+ wpa_s->global->p2p_disabled = atoi(param);
+ wpa_printf(MSG_DEBUG, "P2P functionality %s",
+ wpa_s->global->p2p_disabled ?
+ "disabled" : "enabled");
+ if (wpa_s->global->p2p_disabled) {
+ wpas_p2p_stop_find(wpa_s);
+ os_memset(wpa_s->p2p_auth_invite, 0, ETH_ALEN);
+ p2p_flush(wpa_s->global->p2p);
+ }
+ return 0;
+ }
if (os_strcmp(cmd, "disabled") == 0) {
wpa_s->global->p2p_disabled = atoi(param);
@@ -3312,6 +3359,18 @@
if (wpas_p2p_cancel(wpa_s))
reply_len = -1;
} else if (os_strncmp(buf, "P2P_PRESENCE_REQ ", 17) == 0) {
+ #if defined(ANDROID_BRCM_P2P_PATCH) && defined(CONFIG_P2P)
+ /* We have to send presence command to p2p interface if p2p_interface is started
+ * otherwise we can send it to primary interface
+ */
+ struct wpa_supplicant* ifs;
+ for (ifs = wpa_s->global->ifaces; ifs; ifs = ifs->next) {
+ if ( (ifs->p2p_group_interface == P2P_GROUP_INTERFACE_GO ) ||(ifs->p2p_group_interface == P2P_GROUP_INTERFACE_CLIENT )) {
+ wpa_s = ifs;
+ break;
+ }
+ }
+ #endif /* defined ANDROID_BRCM_P2P_PATCH && defined CONFIG_P2P */
if (p2p_ctrl_presence_req(wpa_s, buf + 17) < 0)
reply_len = -1;
} else if (os_strcmp(buf, "P2P_PRESENCE_REQ") == 0) {