mwifiex: inform disconnection initiator correctly.

This patch ensures that 'locally_generated' parameter is correctly
passed to cfg80211_disconnected() API.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Amitkumar Karwar 2016-05-25 08:37:35 -07:00 committed by Kalle Valo
parent 5c87a55adb
commit c62d50a406
4 changed files with 12 additions and 10 deletions
drivers/net/wireless/marvell/mwifiex

View File

@ -1281,7 +1281,7 @@ int mwifiex_ret_802_11_ad_hoc(struct mwifiex_private *priv,
if (result) { if (result) {
mwifiex_dbg(priv->adapter, ERROR, "ADHOC_RESP: failed\n"); mwifiex_dbg(priv->adapter, ERROR, "ADHOC_RESP: failed\n");
if (priv->media_connected) if (priv->media_connected)
mwifiex_reset_connect_state(priv, result); mwifiex_reset_connect_state(priv, result, true);
memset(&priv->curr_bss_params.bss_descriptor, memset(&priv->curr_bss_params.bss_descriptor,
0x00, sizeof(struct mwifiex_bssdescriptor)); 0x00, sizeof(struct mwifiex_bssdescriptor));

View File

@ -1128,7 +1128,8 @@ int mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,
struct mwifiex_bssdescriptor *bss_desc); struct mwifiex_bssdescriptor *bss_desc);
int mwifiex_ret_802_11_associate(struct mwifiex_private *priv, int mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp); struct host_cmd_ds_command *resp);
void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason); void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason,
bool from_ap);
u8 mwifiex_band_to_radio_type(u8 band); u8 mwifiex_band_to_radio_type(u8 band);
int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac); int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac);
void mwifiex_deauthenticate_all(struct mwifiex_adapter *adapter); void mwifiex_deauthenticate_all(struct mwifiex_adapter *adapter);

View File

@ -553,7 +553,8 @@ static int mwifiex_ret_802_11_deauthenticate(struct mwifiex_private *priv,
if (!memcmp(resp->params.deauth.mac_addr, if (!memcmp(resp->params.deauth.mac_addr,
&priv->curr_bss_params.bss_descriptor.mac_address, &priv->curr_bss_params.bss_descriptor.mac_address,
sizeof(resp->params.deauth.mac_addr))) sizeof(resp->params.deauth.mac_addr)))
mwifiex_reset_connect_state(priv, WLAN_REASON_DEAUTH_LEAVING); mwifiex_reset_connect_state(priv, WLAN_REASON_DEAUTH_LEAVING,
false);
return 0; return 0;
} }
@ -566,7 +567,7 @@ static int mwifiex_ret_802_11_deauthenticate(struct mwifiex_private *priv,
static int mwifiex_ret_802_11_ad_hoc_stop(struct mwifiex_private *priv, static int mwifiex_ret_802_11_ad_hoc_stop(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp) struct host_cmd_ds_command *resp)
{ {
mwifiex_reset_connect_state(priv, WLAN_REASON_DEAUTH_LEAVING); mwifiex_reset_connect_state(priv, WLAN_REASON_DEAUTH_LEAVING, false);
return 0; return 0;
} }

View File

@ -40,8 +40,8 @@
* - Erases current SSID and BSSID information * - Erases current SSID and BSSID information
* - Sends a disconnect event to upper layers/applications. * - Sends a disconnect event to upper layers/applications.
*/ */
void void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code,
mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code) bool from_ap)
{ {
struct mwifiex_adapter *adapter = priv->adapter; struct mwifiex_adapter *adapter = priv->adapter;
@ -140,7 +140,7 @@ mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code)
if (priv->bss_mode == NL80211_IFTYPE_STATION || if (priv->bss_mode == NL80211_IFTYPE_STATION ||
priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) { priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) {
cfg80211_disconnected(priv->netdev, reason_code, NULL, 0, cfg80211_disconnected(priv->netdev, reason_code, NULL, 0,
false, GFP_KERNEL); !from_ap, GFP_KERNEL);
} }
eth_zero_addr(priv->cfg_bssid); eth_zero_addr(priv->cfg_bssid);
@ -574,7 +574,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
if (priv->media_connected) { if (priv->media_connected) {
reason_code = reason_code =
le16_to_cpu(*(__le16 *)adapter->event_body); le16_to_cpu(*(__le16 *)adapter->event_body);
mwifiex_reset_connect_state(priv, reason_code); mwifiex_reset_connect_state(priv, reason_code, true);
} }
break; break;
@ -589,7 +589,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
if (priv->media_connected) { if (priv->media_connected) {
reason_code = reason_code =
le16_to_cpu(*(__le16 *)adapter->event_body); le16_to_cpu(*(__le16 *)adapter->event_body);
mwifiex_reset_connect_state(priv, reason_code); mwifiex_reset_connect_state(priv, reason_code, true);
} }
break; break;
@ -599,7 +599,7 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
if (priv->media_connected) { if (priv->media_connected) {
reason_code = reason_code =
le16_to_cpu(*(__le16 *)adapter->event_body); le16_to_cpu(*(__le16 *)adapter->event_body);
mwifiex_reset_connect_state(priv, reason_code); mwifiex_reset_connect_state(priv, reason_code, true);
} }
break; break;