From 0de3803610f402d10d54f8bb7b5e77490485c009 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 7 Nov 2013 16:18:44 +0200 Subject: [PATCH] Android: Add P2P/WPS wrappers for private lib Android uses a vendor specific library for implementing couple of driver interface functions. Add the wrapper code to allow that mechanism to be used. Signed-hostap: Jouni Malinen --- src/drivers/driver_nl80211.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 9b2f81e3e..484c61768 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -363,6 +363,14 @@ static int android_pno_start(struct i802_bss *bss, struct wpa_driver_scan_params *params); static int android_pno_stop(struct i802_bss *bss); #endif /* ANDROID */ +#ifdef ANDROID_P2P +int wpa_driver_set_p2p_noa(void *priv, u8 count, int start, int duration); +int wpa_driver_get_p2p_noa(void *priv, u8 *buf, size_t len); +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, + const struct wpabuf *proberesp, + const struct wpabuf *assocresp); +#endif /* ANDROID_P2P */ static void add_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx); static void del_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx); @@ -615,10 +623,13 @@ static int send_and_recv_msgs_global(struct nl80211_global *global, } -static int send_and_recv_msgs(struct wpa_driver_nl80211_data *drv, - struct nl_msg *msg, - int (*valid_handler)(struct nl_msg *, void *), - void *valid_data) +#ifndef ANDROID_P2P +static +#endif /* ANDROID_P2P */ +int send_and_recv_msgs(struct wpa_driver_nl80211_data *drv, + struct nl_msg *msg, + int (*valid_handler)(struct nl_msg *, void *), + void *valid_data) { return send_and_recv(drv->global, drv->global->nl, msg, valid_handler, valid_data); @@ -10610,8 +10621,13 @@ static int nl80211_set_p2p_powersave(void *priv, int legacy_ps, int opp_ps, wpa_printf(MSG_DEBUG, "nl80211: set_p2p_powersave (legacy_ps=%d " "opp_ps=%d ctwindow=%d)", legacy_ps, opp_ps, ctwindow); - if (opp_ps != -1 || ctwindow != -1) + if (opp_ps != -1 || ctwindow != -1) { +#ifdef ANDROID_P2P + wpa_driver_set_p2p_ps(priv, legacy_ps, opp_ps, ctwindow); +#else /* ANDROID_P2P */ return -1; /* Not yet supported */ +#endif /* ANDROID_P2P */ + } if (legacy_ps == -1) return 0; @@ -11433,4 +11449,9 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = { .get_survey = wpa_driver_nl80211_get_survey, .status = wpa_driver_nl80211_status, .switch_channel = nl80211_switch_channel, +#ifdef ANDROID_P2P + .set_noa = wpa_driver_set_p2p_noa, + .get_noa = wpa_driver_get_p2p_noa, + .set_ap_wps_ie = wpa_driver_set_ap_wps_p2p_ie, +#endif /* ANDROID_P2P */ };