Add P2P support for BRCM CFG80211 driver

Change-Id: Iafec4bedbd33836d0a64e7ea054d8a46ef8ec204
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 8bccb6b..812cd52 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -724,7 +724,12 @@
 	 * reassociation is requested. If we are in process of associating with
 	 * the selected BSSID, do not trigger new attempt.
 	 */
-	if (wpa_s->reassociate ||
+	if ((wpa_s->reassociate
+#ifdef ANDROID_BRCM_P2P_PATCH
+		&& (os_memcmp(selected->bssid, wpa_s->bssid, ETH_ALEN) != 0)
+		&& (wpa_s->wpa_state != WPA_COMPLETED)
+#endif
+		)||
 	    (os_memcmp(selected->bssid, wpa_s->bssid, ETH_ALEN) != 0 &&
 	     ((wpa_s->wpa_state != WPA_ASSOCIATING &&
 	       wpa_s->wpa_state != WPA_AUTHENTICATING) ||
@@ -1851,6 +1856,11 @@
 		}
 #endif /* CONFIG_AP */
 		wpa_supplicant_event_disassoc(wpa_s, reason_code);
+
+#if defined(ANDROID_BRCM_P2P_PATCH) && defined(CONFIG_P2P)
+		wpas_p2p_group_remove_notif(wpa_s, reason_code);
+#endif
+
 		break;
 	case EVENT_MICHAEL_MIC_FAILURE:
 		wpa_supplicant_event_michael_mic_failure(wpa_s, data);
@@ -1988,6 +1998,25 @@
 				size_t ie_len = data->rx_mgmt.frame_len -
 					(mgmt->u.probe_req.variable -
 					 data->rx_mgmt.frame);
+			#ifdef ANDROID_BRCM_P2P_PATCH
+				wpa_printf(MSG_DEBUG, "Non-AP: Probe request frame ");
+			{
+				/* If we are Go or client, we need not reply the probe reqest on eth0 interface */
+				struct wpa_supplicant* ifs;
+				int ignore = 0;
+				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_printf(MSG_DEBUG, "Non-AP: NEERAJKG Ignoring Probe request");
+						ignore = 1;
+						break;
+					}
+				}
+				if(ignore)
+					break;
+				else
+					wpa_printf(MSG_DEBUG, "Non-AP: Couln't Ignore Probe request %d", wpa_s->p2p_group_interface);
+			}
+			#endif
 				wpas_p2p_probe_req_rx(wpa_s, src, ie, ie_len);
 				break;
 			}