Add P2P support for BRCM CFG80211 driver

Change-Id: Iafec4bedbd33836d0a64e7ea054d8a46ef8ec204
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index b071f76..1ad7d80 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -303,7 +303,9 @@
 #ifdef CONFIG_AP
 	u8 *_p2p_dev_addr = NULL;
 #endif /* CONFIG_AP */
-
+#ifdef ANDROID_BRCM_P2P_PATCH	
+	struct wpa_supplicant *iface;
+#endif
 	if (cmd == NULL || os_strcmp(cmd, "any") == 0) {
 		_bssid = NULL;
 #ifdef CONFIG_P2P
@@ -322,7 +324,17 @@
 		return -1;
 	}
 
-#ifdef CONFIG_AP
+#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_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);
+	}
+#elif defined CONFIG_AP
 	if (wpa_s->ap_iface)
 		return wpa_supplicant_ap_wps_pbc(wpa_s, _bssid, _p2p_dev_addr);
 #endif /* CONFIG_AP */
@@ -339,6 +351,10 @@
 	char *pin;
 	int ret;
 
+#if defined ANDROID_BRCM_P2P_PATCH && defined CONFIG_AP
+	struct wpa_supplicant *iface;
+#endif
+
 	pin = os_strchr(cmd, ' ');
 	if (pin)
 		*pin++ = '\0';
@@ -351,7 +367,19 @@
 		return -1;
 	}
 
-#ifdef CONFIG_AP
+#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);
+			/* 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);
+	}
+#elif defined CONFIG_AP
 	if (wpa_s->ap_iface)
 		return wpa_supplicant_ap_wps_pin(wpa_s, _bssid, pin,
 						 buf, buflen);
@@ -2335,6 +2363,16 @@
 {
 	struct wpa_ssid *ssid = wpa_s->current_ssid;
 
+#ifdef ANDROID_BRCM_P2P_PATCH
+	struct wpa_supplicant *ifs = NULL;
+	
+	for (ifs = wpa_s->global->ifaces; ifs; ifs = ifs->next) {
+		if((ifs->ap_iface) && 
+			(ifs->p2p_group_interface == P2P_GROUP_INTERFACE_GO)) {
+			ssid = ifs->current_ssid;
+		}
+	}
+#endif
 	if (ssid == NULL || ssid->mode != WPAS_MODE_P2P_GO ||
 	    ssid->passphrase == NULL)
 		return -1;