From 6428490a6494726668213720ba9f00f81c06d2db Mon Sep 17 00:00:00 2001 From: Subhani Shaik Date: Fri, 1 Apr 2016 15:56:32 -0700 Subject: Wifi: Fix handling of DRIVER STOP command DRIVER STOP command needs to be sent to driver before bringing the interface down. This is done to address a bug where driver is de-registering n/w iface as it can't distinguish between wifi off and DRIVER STOP. BUG: 27576943 Change-Id: I9885b7858f7ee0dff3d5dcc4c64360147dfd8d9f --- qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'qcwcn') diff --git a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c index f2f625d..a82b980 100644 --- a/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c +++ b/qcwcn/wpa_supplicant_8_lib/driver_cmd_nl80211.c @@ -82,12 +82,7 @@ int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf, android_wifi_priv_cmd priv_cmd; int ret = 0; - if (os_strcasecmp(cmd, "STOP") == 0) { - dl_list_for_each(driver, &drv->global->interfaces, struct wpa_driver_nl80211_data, list) { - linux_set_iface_flags(drv->global->ioctl_sock, driver->first_bss->ifname, 0); - wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "STOPPED"); - } - } else if (os_strcasecmp(cmd, "START") == 0) { + if (os_strcasecmp(cmd, "START") == 0) { dl_list_for_each(driver, &drv->global->interfaces, struct wpa_driver_nl80211_data, list) { linux_set_iface_flags(drv->global->ioctl_sock, driver->first_bss->ifname, 1); wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "STARTED"); @@ -131,6 +126,13 @@ int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf, wpa_printf(MSG_DEBUG, "%s: P2P: %s ", __func__, buf); else if (os_strcasecmp(cmd, "P2P_SET_NOA") == 0) wpa_printf(MSG_DEBUG, "%s: P2P: %s ", __func__, buf); + else if (os_strcasecmp(cmd, "STOP") == 0) { + wpa_printf(MSG_DEBUG, "%s: %s ", __func__, buf); + dl_list_for_each(driver, &drv->global->interfaces, struct wpa_driver_nl80211_data, list) { + linux_set_iface_flags(drv->global->ioctl_sock, driver->first_bss->ifname, 0); + wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "STOPPED"); + } + } else wpa_printf(MSG_DEBUG, "%s %s len = %d, %lu", __func__, buf, ret, buf_len); wpa_driver_notify_country_change(drv->ctx, cmd); -- cgit v1.2.3