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/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index dfca9ef..9dc2494 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -209,6 +209,7 @@
 static void mlme_event_deauth_disassoc(struct wpa_driver_nl80211_data *drv,
 				  enum wpa_event_type type,
 				  const u8 *frame, size_t len);
+int wpa_driver_get_p2p_noa(void *priv, u8 *buf, size_t len);
 int wpa_driver_set_p2p_noa(void *priv, u8 count, int start, int duration);
 int wpa_driver_set_p2p_ps(void *priv, int legacy_ps, int opp_ps, int ctwindow);
 int wpa_driver_set_ap_wps_p2p_ie(void *priv, const struct wpabuf *beacon,
@@ -6837,6 +6838,7 @@
 	.remove_pmkid = nl80211_remove_pmkid,
 	.flush_pmkid = nl80211_flush_pmkid,
 #ifdef ANDROID_BRCM_P2P_PATCH
+	.get_noa = wpa_driver_get_p2p_noa,
 	.set_noa = wpa_driver_set_p2p_noa,
 	.set_p2p_powersave = wpa_driver_set_p2p_ps,
 	.set_ap_wps_ie = wpa_driver_set_ap_wps_p2p_ie,
diff --git a/src/p2p/p2p_group.c b/src/p2p/p2p_group.c
index 9fb9f00..0d05319 100644
--- a/src/p2p/p2p_group.c
+++ b/src/p2p/p2p_group.c
@@ -499,7 +499,11 @@
 	} else {
 		if (group->noa) {
 			if (wpabuf_size(group->noa) >= noa_len) {
+			#ifdef ANDROID_BRCM_P2P_PATCH
+				group->noa->used = 0;
+			#else
 				group->noa->size = 0;
+			#endif
 				wpabuf_put_data(group->noa, noa, noa_len);
 			} else {
 				wpabuf_free(group->noa);
@@ -658,11 +662,11 @@
 	else
 		wpa_hexdump(MSG_DEBUG, "P2P: Current NoA", curr_noa,
 			    curr_noa_len);
-
+#ifndef ANDROID_BRCM_P2P_PATCH
 	/* TODO: properly process request and store copy */
 	if (curr_noa_len > 0)
 		return P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE;
-
+#endif
 	return P2P_SC_SUCCESS;
 }
 
diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h
index 52d9311..afb891e 100644
--- a/src/p2p/p2p_i.h
+++ b/src/p2p/p2p_i.h
@@ -532,6 +532,11 @@
 
 /* p2p_group.c */
 const u8 * p2p_group_get_interface_addr(struct p2p_group *group);
+
+#ifdef ANDROID_BRCM_P2P_PATCH
+void p2p_get_group_noa(struct p2p_group *group, u8 *noa, size_t* noa_len);
+#endif
+
 u8 p2p_group_presence_req(struct p2p_group *group,
 			  const u8 *client_interface_addr,
 			  const u8 *noa, size_t noa_len);