mwifiex: remove MWIFIEX_BSS_MODE_ macros

replace them with NL80211_IFTYPE_ macros

Also remove redundant functions mwifiex_drv_get_mode()
and mwifiex_bss_ioctl_mode().

Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index de86ef8..701c179 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -398,13 +398,9 @@
 	int ret = 0;
 	int status = 0;
 	struct mwifiex_ds_band_cfg band_cfg;
-	int mode;
-	u8 wait_option = MWIFIEX_IOCTL_WAIT;
 	u32 config_bands = 0;
 	struct wiphy *wiphy = priv->wdev->wiphy;
 
-	mode = mwifiex_drv_get_mode(priv, wait_option);
-
 	if (chan) {
 		memset(&band_cfg, 0, sizeof(band_cfg));
 		/* Set appropriate bands */
@@ -412,10 +408,10 @@
 			config_bands = BAND_B | BAND_G | BAND_GN;
 		else
 			config_bands = BAND_AN | BAND_A;
-		if (mode == MWIFIEX_BSS_MODE_INFRA
-		    || mode == MWIFIEX_BSS_MODE_AUTO) {
+		if (priv->bss_mode == NL80211_IFTYPE_STATION
+		    || priv->bss_mode == NL80211_IFTYPE_UNSPECIFIED) {
 			band_cfg.config_bands = config_bands;
-		} else if (mode == MWIFIEX_BSS_MODE_IBSS) {
+		} else if (priv->bss_mode == NL80211_IFTYPE_ADHOC) {
 			band_cfg.config_bands = config_bands;
 			band_cfg.adhoc_start_band = config_bands;
 		}
@@ -432,7 +428,8 @@
 	}
 
 	wiphy_dbg(wiphy, "info: setting band %d, channel offset %d and "
-		"mode %d\n", config_bands, band_cfg.sec_chan_offset, mode);
+		"mode %d\n", config_bands, band_cfg.sec_chan_offset,
+		priv->bss_mode);
 	if (!chan)
 		return ret;
 
@@ -561,14 +558,6 @@
 
 /*
  * CFG802.11 operation handler to change interface type.
- *
- * This function creates an IOCTL request, populates it accordingly
- * and issues an IOCTL.
- *
- * The function also maps the CFG802.11 mode type into driver mode type.
- *      NL80211_IFTYPE_ADHOC        -> MWIFIEX_BSS_MODE_IBSS
- *      NL80211_IFTYPE_STATION      -> MWIFIEX_BSS_MODE_INFRA
- *      NL80211_IFTYPE_UNSPECIFIED  -> MWIFIEX_BSS_MODE_AUTO
  */
 static int
 mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
@@ -578,41 +567,50 @@
 {
 	int ret = 0;
 	struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
-	int mode = -1;
 	struct mwifiex_wait_queue *wait = NULL;
-	int status = 0;
+
+	if (priv->bss_mode == type) {
+		wiphy_warn(wiphy, "already set to required type\n");
+		return 0;
+	}
+
+	priv->bss_mode = type;
+
+	switch (type) {
+	case NL80211_IFTYPE_ADHOC:
+		dev->ieee80211_ptr->iftype = NL80211_IFTYPE_ADHOC;
+		wiphy_dbg(wiphy, "info: setting interface type to adhoc\n");
+		break;
+	case NL80211_IFTYPE_STATION:
+		dev->ieee80211_ptr->iftype = NL80211_IFTYPE_STATION;
+		wiphy_dbg(wiphy, "info: setting interface type to managed\n");
+		break;
+	case NL80211_IFTYPE_UNSPECIFIED:
+		dev->ieee80211_ptr->iftype = NL80211_IFTYPE_STATION;
+		wiphy_dbg(wiphy, "info: setting interface type to auto\n");
+		return 0;
+	default:
+		wiphy_err(wiphy, "unknown interface type: %d\n", type);
+		return -EINVAL;
+	}
 
 	wait = mwifiex_alloc_fill_wait_queue(priv, MWIFIEX_IOCTL_WAIT);
 	if (!wait)
 		return -ENOMEM;
 
-	switch (type) {
-	case NL80211_IFTYPE_ADHOC:
-		mode = MWIFIEX_BSS_MODE_IBSS;
-		dev->ieee80211_ptr->iftype = NL80211_IFTYPE_ADHOC;
-		wiphy_dbg(wiphy, "info: setting interface type to adhoc\n");
-		break;
-	case NL80211_IFTYPE_STATION:
-		mode = MWIFIEX_BSS_MODE_INFRA;
-		dev->ieee80211_ptr->iftype = NL80211_IFTYPE_STATION;
-		wiphy_dbg(wiphy, "info: Setting interface type to managed\n");
-		break;
-	case NL80211_IFTYPE_UNSPECIFIED:
-		mode = MWIFIEX_BSS_MODE_AUTO;
-		dev->ieee80211_ptr->iftype = NL80211_IFTYPE_STATION;
-		wiphy_dbg(wiphy, "info: setting interface type to auto\n");
-		break;
-	default:
-		ret = -EINVAL;
-	}
-	if (ret)
-		goto done;
-	status = mwifiex_bss_ioctl_mode(priv, wait, HostCmd_ACT_GEN_SET, &mode);
+	mwifiex_deauthenticate(priv, wait, NULL);
 
-	if (mwifiex_request_ioctl(priv, wait, status, MWIFIEX_IOCTL_WAIT))
+	priv->sec_info.authentication_mode = MWIFIEX_AUTH_MODE_OPEN;
+
+	ret = mwifiex_prepare_cmd(priv, HostCmd_CMD_SET_BSS_MODE,
+				  HostCmd_ACT_GEN_SET, 0, wait, NULL);
+	if (!ret)
+		ret = -EINPROGRESS;
+
+	ret = mwifiex_request_ioctl(priv, wait, ret, MWIFIEX_IOCTL_WAIT);
+	if (ret)
 		ret = -EFAULT;
 
-done:
 	kfree(wait);
 	return ret;
 }
@@ -1046,7 +1044,7 @@
 
 	ret = mwifiex_set_encode(priv, NULL, 0, 0, 1);	/* Disable keys */
 
-	if (mode == MWIFIEX_BSS_MODE_IBSS) {
+	if (mode == NL80211_IFTYPE_ADHOC) {
 		/* "privacy" is set only for ad-hoc mode */
 		if (privacy) {
 			/*
@@ -1108,7 +1106,7 @@
 
 	memcpy(&ssid_bssid.ssid, &req_ssid, sizeof(struct mwifiex_802_11_ssid));
 
-	if (mode != MWIFIEX_BSS_MODE_IBSS) {
+	if (mode != NL80211_IFTYPE_ADHOC) {
 		if (mwifiex_find_best_bss(priv, MWIFIEX_IOCTL_WAIT,
 					  &ssid_bssid))
 			return -EFAULT;
@@ -1129,7 +1127,7 @@
 	if (mwifiex_bss_start(priv, MWIFIEX_IOCTL_WAIT, &ssid_bssid))
 		return -EFAULT;
 
-	if (mode == MWIFIEX_BSS_MODE_IBSS) {
+	if (mode == NL80211_IFTYPE_ADHOC) {
 		/* Inform the BSS information to kernel, otherwise
 		 * kernel will give a panic after successful assoc */
 		if (mwifiex_cfg80211_inform_ibss_bss(priv))
@@ -1152,14 +1150,11 @@
 {
 	struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
 	int ret = 0;
-	int mode = 0;
 
 	if (priv->assoc_request)
 		return -EBUSY;
 
-	mode = mwifiex_drv_get_mode(priv, MWIFIEX_IOCTL_WAIT);
-
-	if (mode == MWIFIEX_BSS_MODE_IBSS) {
+	if (priv->bss_mode == NL80211_IFTYPE_ADHOC) {
 		wiphy_err(wiphy, "received infra assoc request "
 				"when station is in ibss mode\n");
 		goto done;
@@ -1171,7 +1166,7 @@
 	       (char *) sme->ssid, sme->bssid);
 
 	ret = mwifiex_cfg80211_assoc(priv, sme->ssid_len, sme->ssid, sme->bssid,
-				     mode, sme->channel, sme, 0);
+				     priv->bss_mode, sme->channel, sme, 0);
 
 done:
 	priv->assoc_result = ret;
@@ -1191,13 +1186,11 @@
 {
 	struct mwifiex_private *priv = mwifiex_cfg80211_get_priv(wiphy);
 	int ret = 0;
-	int mode = 0;
 
 	if (priv->ibss_join_request)
 		return -EBUSY;
 
-	mode = mwifiex_drv_get_mode(priv, MWIFIEX_IOCTL_WAIT);
-	if (mode != MWIFIEX_BSS_MODE_IBSS) {
+	if (priv->bss_mode != NL80211_IFTYPE_ADHOC) {
 		wiphy_err(wiphy, "request to join ibss received "
 				"when station is not in ibss mode\n");
 		goto done;
@@ -1209,8 +1202,8 @@
 	       (char *) params->ssid, params->bssid);
 
 	ret = mwifiex_cfg80211_assoc(priv, params->ssid_len, params->ssid,
-				     params->bssid, mode, params->channel, NULL,
-				     params->privacy);
+				params->bssid, priv->bss_mode,
+				params->channel, NULL, params->privacy);
 done:
 	priv->ibss_join_result = ret;
 	queue_work(priv->workqueue, &priv->cfg_workqueue);
@@ -1301,7 +1294,7 @@
 	/* Clear all the other values */
 	memset(&mcs[rx_mcs_supp], 0,
 			sizeof(struct ieee80211_mcs_info) - rx_mcs_supp);
-	if (priv->bss_mode == MWIFIEX_BSS_MODE_INFRA ||
+	if (priv->bss_mode == NL80211_IFTYPE_STATION ||
 			ISSUPP_CHANWIDTH40(adapter->hw_dot_11n_dev_cap))
 		/* Set MCS32 for infra mode or ad-hoc mode with 40MHz support */
 		SETHT_MCS32(mcs_set.rx_mask);