All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] mwifiex: set channel via start_ap handler for AP interface
@ 2012-06-12  1:14 Bing Zhao
  2012-06-12  1:14 ` [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP Bing Zhao
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Bing Zhao @ 2012-06-12  1:14 UTC (permalink / raw)
  To: linux-wireless
  Cc: John W. Linville, Avinash Patil, Yogesh Powar, Kiran Divekar,
	Amitkumar Karwar, Stone Piao, Ying Luo, Frank Huang, Bing Zhao

From: Avinash Patil <patila@marvell.com>

This patch adds functionality to set channel info received from
cfg80211_ap_settings in start_ap handler.

Since set_channel cfg80211 handler has been removed and we need
not explicitely call mwifiex_uap_set_channel(); hence this
function definition is also removed.

Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Kiran Divekar <dkiran@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
 drivers/net/wireless/mwifiex/cfg80211.c |   23 +++++++++++++++++------
 drivers/net/wireless/mwifiex/main.h     |    1 -
 drivers/net/wireless/mwifiex/uap_cmd.c  |   30 ------------------------------
 3 files changed, 17 insertions(+), 37 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 015fec3..7b4eaf4 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -384,13 +384,13 @@ mwifiex_set_rf_channel(struct mwifiex_private *priv,
 	cfp.freq = chan->center_freq;
 	cfp.channel = ieee80211_frequency_to_channel(chan->center_freq);
 
-	if (mwifiex_bss_set_channel(priv, &cfp))
-		return -EFAULT;
-
-	if (priv->bss_type == MWIFIEX_BSS_TYPE_STA)
+	if (priv->bss_type == MWIFIEX_BSS_TYPE_STA) {
+		if (mwifiex_bss_set_channel(priv, &cfp))
+			return -EFAULT;
 		return mwifiex_drv_change_adhoc_chan(priv, cfp.channel);
-	else
-		return mwifiex_uap_set_channel(priv, cfp.channel);
+	}
+
+	return 0;
 }
 
 /*
@@ -961,6 +961,17 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
 		return -EINVAL;
 	}
 
+	bss_cfg->channel =
+	    (u8)ieee80211_frequency_to_channel(params->channel->center_freq);
+	bss_cfg->band_cfg = BAND_CONFIG_MANUAL;
+
+	if (mwifiex_set_rf_channel(priv, params->channel,
+				   params->channel_type)) {
+		kfree(bss_cfg);
+		wiphy_err(wiphy, "Failed to set band config information!\n");
+		return -1;
+	}
+
 	if (mwifiex_set_secure_params(priv, bss_cfg, params)) {
 		kfree(bss_cfg);
 		wiphy_err(wiphy, "Failed to parse secuirty parameters!\n");
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 5b32221..512481e 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -990,7 +990,6 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv,
 
 int mwifiex_main_process(struct mwifiex_adapter *);
 
-int mwifiex_uap_set_channel(struct mwifiex_private *priv, int channel);
 int mwifiex_bss_set_channel(struct mwifiex_private *,
 			    struct mwifiex_chan_freq_power *cfp);
 int mwifiex_get_bss_info(struct mwifiex_private *,
diff --git a/drivers/net/wireless/mwifiex/uap_cmd.c b/drivers/net/wireless/mwifiex/uap_cmd.c
index 89f9a2a..fb0c6cb 100644
--- a/drivers/net/wireless/mwifiex/uap_cmd.c
+++ b/drivers/net/wireless/mwifiex/uap_cmd.c
@@ -421,33 +421,3 @@ int mwifiex_uap_prepare_cmd(struct mwifiex_private *priv, u16 cmd_no,
 
 	return 0;
 }
-
-/* This function sets the RF channel for AP.
- *
- * This function populates channel information in AP config structure
- * and sends command to configure channel information in AP.
- */
-int mwifiex_uap_set_channel(struct mwifiex_private *priv, int channel)
-{
-	struct mwifiex_uap_bss_param *bss_cfg;
-	struct wiphy *wiphy = priv->wdev->wiphy;
-
-	bss_cfg = kzalloc(sizeof(struct mwifiex_uap_bss_param), GFP_KERNEL);
-	if (!bss_cfg)
-		return -ENOMEM;
-
-	mwifiex_set_sys_config_invalid_data(bss_cfg);
-	bss_cfg->band_cfg = BAND_CONFIG_MANUAL;
-	bss_cfg->channel = channel;
-
-	if (mwifiex_send_cmd_async(priv, HostCmd_CMD_UAP_SYS_CONFIG,
-				   HostCmd_ACT_GEN_SET,
-				   UAP_BSS_PARAMS_I, bss_cfg)) {
-		wiphy_err(wiphy, "Failed to set the uAP channel\n");
-		kfree(bss_cfg);
-		return -1;
-	}
-
-	kfree(bss_cfg);
-	return 0;
-}
-- 
1.7.0.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP
  2012-06-12  1:14 [PATCH 1/4] mwifiex: set channel via start_ap handler for AP interface Bing Zhao
@ 2012-06-12  1:14 ` Bing Zhao
  2012-06-12 11:54   ` Johannes Berg
  2012-06-12  1:14 ` [PATCH 3/4] mwifiex: add 11n support for AP mode Bing Zhao
  2012-06-12  1:14 ` [PATCH 4/4] mwifiex: separate uAP WPA/WPA2 parsing from other BSS parameters Bing Zhao
  2 siblings, 1 reply; 10+ messages in thread
From: Bing Zhao @ 2012-06-12  1:14 UTC (permalink / raw)
  To: linux-wireless
  Cc: John W. Linville, Avinash Patil, Yogesh Powar, Kiran Divekar,
	Amitkumar Karwar, Stone Piao, Ying Luo, Frank Huang, Bing Zhao

From: Avinash Patil <patila@marvell.com>

Add support for parsing WPA IE from beacon parameter of
cfg80211_ap_settings and set it to FW.

WPA/WPA2 mixed mode is supported with this patch.

Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Kiran Divekar <dkiran@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
This patch depends on:
[PATCH] ieee80211: definitions for Microsoft Vendor OUI and WPA OUI type

 drivers/net/wireless/mwifiex/ie.c      |   55 +++++++++++++++++++++-----------
 drivers/net/wireless/mwifiex/uap_cmd.c |   17 +++++++--
 2 files changed, 49 insertions(+), 23 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/ie.c b/drivers/net/wireless/mwifiex/ie.c
index ceb82cd..328fb14 100644
--- a/drivers/net/wireless/mwifiex/ie.c
+++ b/drivers/net/wireless/mwifiex/ie.c
@@ -224,29 +224,46 @@ int mwifiex_set_mgmt_ies(struct mwifiex_private *priv,
 			 struct cfg80211_ap_settings *params)
 {
 	struct mwifiex_ie *beacon_ie = NULL, *pr_ie = NULL;
-	struct mwifiex_ie *ar_ie = NULL, *rsn_ie = NULL;
-	struct ieee_types_header *ie = NULL;
+	struct mwifiex_ie *ar_ie = NULL, *gen_ie = NULL;
+	struct ieee_types_header *rsn_ie = NULL, *wpa_ie = NULL;
 	u16 beacon_idx = MWIFIEX_AUTO_IDX_MASK, pr_idx = MWIFIEX_AUTO_IDX_MASK;
 	u16 ar_idx = MWIFIEX_AUTO_IDX_MASK, rsn_idx = MWIFIEX_AUTO_IDX_MASK;
-	u16 mask;
+	u16 mask, ie_len = 0;
+	const u8 *vendor_ie;
 	int ret = 0;
 
 	if (params->beacon.tail && params->beacon.tail_len) {
-		ie = (void *)cfg80211_find_ie(WLAN_EID_RSN, params->beacon.tail,
-					      params->beacon.tail_len);
-		if (ie) {
-			rsn_ie = kmalloc(sizeof(struct mwifiex_ie), GFP_KERNEL);
-			if (!rsn_ie)
-				return -ENOMEM;
-
-			rsn_ie->ie_index = cpu_to_le16(rsn_idx);
-			mask = MGMT_MASK_BEACON | MGMT_MASK_PROBE_RESP |
-			       MGMT_MASK_ASSOC_RESP;
-			rsn_ie->mgmt_subtype_mask = cpu_to_le16(mask);
-			rsn_ie->ie_length = cpu_to_le16(ie->len + 2);
-			memcpy(rsn_ie->ie_buffer, ie, ie->len + 2);
-
-			if (mwifiex_update_uap_custom_ie(priv, rsn_ie, &rsn_idx,
+		gen_ie = kzalloc(sizeof(struct mwifiex_ie), GFP_KERNEL);
+		if (!gen_ie)
+			return -ENOMEM;
+		gen_ie->ie_index = cpu_to_le16(rsn_idx);
+		mask = MGMT_MASK_BEACON | MGMT_MASK_PROBE_RESP |
+		       MGMT_MASK_ASSOC_RESP;
+		gen_ie->mgmt_subtype_mask = cpu_to_le16(mask);
+
+		rsn_ie = (void *)cfg80211_find_ie(WLAN_EID_RSN,
+						  params->beacon.tail,
+						  params->beacon.tail_len);
+		if (rsn_ie) {
+			memcpy(gen_ie->ie_buffer, rsn_ie, rsn_ie->len + 2);
+			ie_len = rsn_ie->len + 2;
+			gen_ie->ie_length = cpu_to_le16(ie_len);
+		}
+
+		vendor_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+						    WLAN_OUI_TYPE_MICROSOFT_WPA,
+						    params->beacon.tail,
+						    params->beacon.tail_len);
+		if (vendor_ie) {
+			wpa_ie = (struct ieee_types_header *)vendor_ie;
+			memcpy(gen_ie->ie_buffer + ie_len,
+			       wpa_ie, wpa_ie->len + 2);
+			ie_len += wpa_ie->len + 2;
+			gen_ie->ie_length = cpu_to_le16(ie_len);
+		}
+
+		if (rsn_ie || wpa_ie) {
+			if (mwifiex_update_uap_custom_ie(priv, gen_ie, &rsn_idx,
 							 NULL, NULL,
 							 NULL, NULL)) {
 				ret = -1;
@@ -319,7 +336,7 @@ done:
 	kfree(beacon_ie);
 	kfree(pr_ie);
 	kfree(ar_ie);
-	kfree(rsn_ie);
+	kfree(gen_ie);
 
 	return ret;
 }
diff --git a/drivers/net/wireless/mwifiex/uap_cmd.c b/drivers/net/wireless/mwifiex/uap_cmd.c
index fb0c6cb..38a49a1 100644
--- a/drivers/net/wireless/mwifiex/uap_cmd.c
+++ b/drivers/net/wireless/mwifiex/uap_cmd.c
@@ -65,7 +65,7 @@ int mwifiex_set_secure_params(struct mwifiex_private *priv,
 			}
 			if (params->crypto.wpa_versions &
 			    NL80211_WPA_VERSION_2) {
-				bss_config->protocol = PROTOCOL_WPA2;
+				bss_config->protocol |= PROTOCOL_WPA2;
 				bss_config->key_mgmt = KEY_MGMT_EAP;
 			}
 			break;
@@ -77,7 +77,7 @@ int mwifiex_set_secure_params(struct mwifiex_private *priv,
 			}
 			if (params->crypto.wpa_versions &
 			    NL80211_WPA_VERSION_2) {
-				bss_config->protocol = PROTOCOL_WPA2;
+				bss_config->protocol |= PROTOCOL_WPA2;
 				bss_config->key_mgmt = KEY_MGMT_PSK;
 			}
 			break;
@@ -91,10 +91,19 @@ int mwifiex_set_secure_params(struct mwifiex_private *priv,
 		case WLAN_CIPHER_SUITE_WEP104:
 			break;
 		case WLAN_CIPHER_SUITE_TKIP:
-			bss_config->wpa_cfg.pairwise_cipher_wpa = CIPHER_TKIP;
+			if (params->crypto.wpa_versions & NL80211_WPA_VERSION_1)
+				bss_config->wpa_cfg.pairwise_cipher_wpa |=
+								CIPHER_TKIP;
+			if (params->crypto.wpa_versions & NL80211_WPA_VERSION_2)
+				bss_config->wpa_cfg.pairwise_cipher_wpa2 |=
+								CIPHER_TKIP;
 			break;
 		case WLAN_CIPHER_SUITE_CCMP:
-			bss_config->wpa_cfg.pairwise_cipher_wpa2 =
+			if (params->crypto.wpa_versions & NL80211_WPA_VERSION_1)
+				bss_config->wpa_cfg.pairwise_cipher_wpa |=
+								CIPHER_AES_CCMP;
+			if (params->crypto.wpa_versions & NL80211_WPA_VERSION_2)
+				bss_config->wpa_cfg.pairwise_cipher_wpa2 |=
 								CIPHER_AES_CCMP;
 		default:
 			break;
-- 
1.7.0.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/4] mwifiex: add 11n support for AP mode
  2012-06-12  1:14 [PATCH 1/4] mwifiex: set channel via start_ap handler for AP interface Bing Zhao
  2012-06-12  1:14 ` [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP Bing Zhao
@ 2012-06-12  1:14 ` Bing Zhao
  2012-06-12 11:54   ` Johannes Berg
  2012-06-12  1:14 ` [PATCH 4/4] mwifiex: separate uAP WPA/WPA2 parsing from other BSS parameters Bing Zhao
  2 siblings, 1 reply; 10+ messages in thread
From: Bing Zhao @ 2012-06-12  1:14 UTC (permalink / raw)
  To: linux-wireless
  Cc: John W. Linville, Avinash Patil, Yogesh Powar, Kiran Divekar,
	Amitkumar Karwar, Stone Piao, Ying Luo, Frank Huang, Bing Zhao

From: Avinash Patil <patila@marvell.com>

Parse HT IE from cfg80211 and set HT capabilities accordingly
to FW. If HT IE is missing, 11n would be disabled in FW.

Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Kiran Divekar <dkiran@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
 drivers/net/wireless/mwifiex/cfg80211.c |    2 +
 drivers/net/wireless/mwifiex/fw.h       |    6 ++++
 drivers/net/wireless/mwifiex/ioctl.h    |    1 +
 drivers/net/wireless/mwifiex/main.h     |    3 ++
 drivers/net/wireless/mwifiex/uap_cmd.c  |   48 +++++++++++++++++++++++++++++++
 5 files changed, 60 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 7b4eaf4..5af3f97 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -978,6 +978,8 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
 		return -1;
 	}
 
+	mwifiex_set_ht_params(priv, bss_cfg, params);
+
 	if (mwifiex_send_cmd_sync(priv, HostCmd_CMD_UAP_BSS_STOP,
 				  HostCmd_ACT_GEN_SET, 0, NULL)) {
 		wiphy_err(wiphy, "Failed to stop the BSS\n");
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
index 561452a..9686f6f 100644
--- a/drivers/net/wireless/mwifiex/fw.h
+++ b/drivers/net/wireless/mwifiex/fw.h
@@ -162,6 +162,12 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
 
 #define ISSUPP_11NENABLED(FwCapInfo) (FwCapInfo & BIT(11))
 
+#define MWIFIEX_DEF_HT_CAP	(IEEE80211_HT_CAP_DSSSCCK40 | \
+				 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT) | \
+				 IEEE80211_HT_CAP_SM_PS)
+
+#define MWIFIEX_DEF_AMPDU	IEEE80211_HT_AMPDU_PARM_FACTOR
+
 /* dev_cap bitmap
  * BIT
  * 0-16		reserved
diff --git a/drivers/net/wireless/mwifiex/ioctl.h b/drivers/net/wireless/mwifiex/ioctl.h
index e6be6ee..8c8e47c 100644
--- a/drivers/net/wireless/mwifiex/ioctl.h
+++ b/drivers/net/wireless/mwifiex/ioctl.h
@@ -90,6 +90,7 @@ struct mwifiex_uap_bss_param {
 	u16 key_mgmt;
 	u16 key_mgmt_operation;
 	struct wpa_param wpa_cfg;
+	struct ieee80211_ht_cap ht_cap;
 };
 
 enum {
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 512481e..0b3b5aa 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -840,6 +840,9 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
 int mwifiex_set_secure_params(struct mwifiex_private *priv,
 			      struct mwifiex_uap_bss_param *bss_config,
 			      struct cfg80211_ap_settings *params);
+void mwifiex_set_ht_params(struct mwifiex_private *priv,
+			   struct mwifiex_uap_bss_param *bss_cfg,
+			   struct cfg80211_ap_settings *params);
 
 /*
  * This function checks if the queuing is RA based or not.
diff --git a/drivers/net/wireless/mwifiex/uap_cmd.c b/drivers/net/wireless/mwifiex/uap_cmd.c
index 38a49a1..b01a0c7 100644
--- a/drivers/net/wireless/mwifiex/uap_cmd.c
+++ b/drivers/net/wireless/mwifiex/uap_cmd.c
@@ -127,6 +127,33 @@ int mwifiex_set_secure_params(struct mwifiex_private *priv,
 	return 0;
 }
 
+/* This function updates 11n related parameters from IE and sets them into
+ * bss_config structure.
+ */
+void
+mwifiex_set_ht_params(struct mwifiex_private *priv,
+		      struct mwifiex_uap_bss_param *bss_cfg,
+		      struct cfg80211_ap_settings *params)
+{
+	const u8 *ht_ie;
+
+	if (!ISSUPP_11NENABLED(priv->adapter->fw_cap_info))
+		return;
+
+	ht_ie = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, params->beacon.tail,
+				 params->beacon.tail_len);
+	if (ht_ie) {
+		memcpy(&bss_cfg->ht_cap, ht_ie + 2,
+		       sizeof(struct ieee80211_ht_cap));
+	} else {
+		memset(&bss_cfg->ht_cap , 0, sizeof(struct ieee80211_ht_cap));
+		bss_cfg->ht_cap.cap_info = MWIFIEX_DEF_HT_CAP;
+		bss_cfg->ht_cap.ampdu_params_info = MWIFIEX_DEF_AMPDU;
+	}
+
+	return;
+}
+
 /* This function initializes some of mwifiex_uap_bss_param variables.
  * This helps FW in ignoring invalid values. These values may or may not
  * be get updated to valid ones at later stage.
@@ -163,6 +190,7 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
 	struct host_cmd_tlv_auth_type *auth_type;
 	struct host_cmd_tlv_passphrase *passphrase;
 	struct host_cmd_tlv_akmp *tlv_akmp;
+	struct mwifiex_ie_types_htcap *htcap;
 	struct mwifiex_uap_bss_param *bss_cfg = cmd_buf;
 	u16 cmd_size = *param_size;
 
@@ -339,6 +367,26 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
 		tlv += sizeof(struct host_cmd_tlv_encrypt_protocol);
 	}
 
+	if (bss_cfg->ht_cap.cap_info) {
+		htcap = (struct mwifiex_ie_types_htcap *)tlv;
+		htcap->header.type = cpu_to_le16(WLAN_EID_HT_CAPABILITY);
+		htcap->header.len =
+				cpu_to_le16(sizeof(struct ieee80211_ht_cap));
+		htcap->ht_cap.cap_info = cpu_to_le16(bss_cfg->ht_cap.cap_info);
+		htcap->ht_cap.ampdu_params_info =
+					     bss_cfg->ht_cap.ampdu_params_info;
+		memcpy(&htcap->ht_cap.mcs, &bss_cfg->ht_cap.mcs,
+		       sizeof(struct ieee80211_mcs_info));
+		htcap->ht_cap.extended_ht_cap_info =
+			cpu_to_le16(bss_cfg->ht_cap.extended_ht_cap_info);
+		htcap->ht_cap.tx_BF_cap_info =
+				cpu_to_le32(bss_cfg->ht_cap.tx_BF_cap_info);
+		htcap->ht_cap.antenna_selection_info =
+					bss_cfg->ht_cap.antenna_selection_info;
+		cmd_size += sizeof(struct mwifiex_ie_types_htcap);
+		tlv += sizeof(struct mwifiex_ie_types_htcap);
+	}
+
 	*param_size = cmd_size;
 
 	return 0;
-- 
1.7.0.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/4] mwifiex: separate uAP WPA/WPA2 parsing from other BSS parameters
  2012-06-12  1:14 [PATCH 1/4] mwifiex: set channel via start_ap handler for AP interface Bing Zhao
  2012-06-12  1:14 ` [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP Bing Zhao
  2012-06-12  1:14 ` [PATCH 3/4] mwifiex: add 11n support for AP mode Bing Zhao
@ 2012-06-12  1:14 ` Bing Zhao
  2 siblings, 0 replies; 10+ messages in thread
From: Bing Zhao @ 2012-06-12  1:14 UTC (permalink / raw)
  To: linux-wireless
  Cc: John W. Linville, Avinash Patil, Yogesh Powar, Kiran Divekar,
	Amitkumar Karwar, Stone Piao, Ying Luo, Frank Huang, Bing Zhao

From: Avinash Patil <patila@marvell.com>

To enhance readability, create a separate function for parsing
WPA/WPA2 related parameters from cfg80211_ap_settings.
There is no functional change in this patch.

Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
 drivers/net/wireless/mwifiex/uap_cmd.c |  145 +++++++++++++++++---------------
 1 files changed, 78 insertions(+), 67 deletions(-)

diff --git a/drivers/net/wireless/mwifiex/uap_cmd.c b/drivers/net/wireless/mwifiex/uap_cmd.c
index b01a0c7..8910874 100644
--- a/drivers/net/wireless/mwifiex/uap_cmd.c
+++ b/drivers/net/wireless/mwifiex/uap_cmd.c
@@ -171,6 +171,82 @@ void mwifiex_set_sys_config_invalid_data(struct mwifiex_uap_bss_param *config)
 }
 
 /* This function parses BSS related parameters from structure
+ * and prepares TLVs specific to WPA/WPA2 security.
+ * These TLVs are appended to command buffer.
+ */
+static void
+mwifiex_uap_bss_wpa(u8 **tlv_buf, void *cmd_buf, u16 *param_size)
+{
+	struct host_cmd_tlv_pwk_cipher *pwk_cipher;
+	struct host_cmd_tlv_gwk_cipher *gwk_cipher;
+	struct host_cmd_tlv_passphrase *passphrase;
+	struct host_cmd_tlv_akmp *tlv_akmp;
+	struct mwifiex_uap_bss_param *bss_cfg = cmd_buf;
+	u16 cmd_size = *param_size;
+	u8 *tlv = *tlv_buf;
+
+	tlv_akmp = (struct host_cmd_tlv_akmp *)tlv;
+	tlv_akmp->tlv.type = cpu_to_le16(TLV_TYPE_UAP_AKMP);
+	tlv_akmp->tlv.len = cpu_to_le16(sizeof(struct host_cmd_tlv_akmp) -
+					sizeof(struct host_cmd_tlv));
+	tlv_akmp->key_mgmt_operation = cpu_to_le16(bss_cfg->key_mgmt_operation);
+	tlv_akmp->key_mgmt = cpu_to_le16(bss_cfg->key_mgmt);
+	cmd_size += sizeof(struct host_cmd_tlv_akmp);
+	tlv += sizeof(struct host_cmd_tlv_akmp);
+
+	if (bss_cfg->wpa_cfg.pairwise_cipher_wpa & VALID_CIPHER_BITMAP) {
+		pwk_cipher = (struct host_cmd_tlv_pwk_cipher *)tlv;
+		pwk_cipher->tlv.type = cpu_to_le16(TLV_TYPE_PWK_CIPHER);
+		pwk_cipher->tlv.len =
+			cpu_to_le16(sizeof(struct host_cmd_tlv_pwk_cipher) -
+				    sizeof(struct host_cmd_tlv));
+		pwk_cipher->proto = cpu_to_le16(PROTOCOL_WPA);
+		pwk_cipher->cipher = bss_cfg->wpa_cfg.pairwise_cipher_wpa;
+		cmd_size += sizeof(struct host_cmd_tlv_pwk_cipher);
+		tlv += sizeof(struct host_cmd_tlv_pwk_cipher);
+	}
+
+	if (bss_cfg->wpa_cfg.pairwise_cipher_wpa2 & VALID_CIPHER_BITMAP) {
+		pwk_cipher = (struct host_cmd_tlv_pwk_cipher *)tlv;
+		pwk_cipher->tlv.type = cpu_to_le16(TLV_TYPE_PWK_CIPHER);
+		pwk_cipher->tlv.len =
+			cpu_to_le16(sizeof(struct host_cmd_tlv_pwk_cipher) -
+				    sizeof(struct host_cmd_tlv));
+		pwk_cipher->proto = cpu_to_le16(PROTOCOL_WPA2);
+		pwk_cipher->cipher = bss_cfg->wpa_cfg.pairwise_cipher_wpa2;
+		cmd_size += sizeof(struct host_cmd_tlv_pwk_cipher);
+		tlv += sizeof(struct host_cmd_tlv_pwk_cipher);
+	}
+
+	if (bss_cfg->wpa_cfg.group_cipher & VALID_CIPHER_BITMAP) {
+		gwk_cipher = (struct host_cmd_tlv_gwk_cipher *)tlv;
+		gwk_cipher->tlv.type = cpu_to_le16(TLV_TYPE_GWK_CIPHER);
+		gwk_cipher->tlv.len =
+			cpu_to_le16(sizeof(struct host_cmd_tlv_gwk_cipher) -
+				    sizeof(struct host_cmd_tlv));
+		gwk_cipher->cipher = bss_cfg->wpa_cfg.group_cipher;
+		cmd_size += sizeof(struct host_cmd_tlv_gwk_cipher);
+		tlv += sizeof(struct host_cmd_tlv_gwk_cipher);
+	}
+
+	if (bss_cfg->wpa_cfg.length) {
+		passphrase = (struct host_cmd_tlv_passphrase *)tlv;
+		passphrase->tlv.type = cpu_to_le16(TLV_TYPE_UAP_WPA_PASSPHRASE);
+		passphrase->tlv.len = cpu_to_le16(bss_cfg->wpa_cfg.length);
+		memcpy(passphrase->passphrase, bss_cfg->wpa_cfg.passphrase,
+		       bss_cfg->wpa_cfg.length);
+		cmd_size += sizeof(struct host_cmd_tlv) +
+			    bss_cfg->wpa_cfg.length;
+		tlv += sizeof(struct host_cmd_tlv) + bss_cfg->wpa_cfg.length;
+	}
+
+	*param_size = cmd_size;
+	*tlv_buf = tlv;
+
+	return;
+}
+
+/* This function parses BSS related parameters from structure
  * and prepares TLVs. These TLVs are appended to command buffer.
 */
 static int
@@ -184,12 +260,8 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
 	struct host_cmd_tlv_frag_threshold *frag_threshold;
 	struct host_cmd_tlv_rts_threshold *rts_threshold;
 	struct host_cmd_tlv_retry_limit *retry_limit;
-	struct host_cmd_tlv_pwk_cipher *pwk_cipher;
-	struct host_cmd_tlv_gwk_cipher *gwk_cipher;
 	struct host_cmd_tlv_encrypt_protocol *encrypt_protocol;
 	struct host_cmd_tlv_auth_type *auth_type;
-	struct host_cmd_tlv_passphrase *passphrase;
-	struct host_cmd_tlv_akmp *tlv_akmp;
 	struct mwifiex_ie_types_htcap *htcap;
 	struct mwifiex_uap_bss_param *bss_cfg = cmd_buf;
 	u16 cmd_size = *param_size;
@@ -280,70 +352,9 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
 	}
 	if ((bss_cfg->protocol & PROTOCOL_WPA) ||
 	    (bss_cfg->protocol & PROTOCOL_WPA2) ||
-	    (bss_cfg->protocol & PROTOCOL_EAP)) {
-		tlv_akmp = (struct host_cmd_tlv_akmp *)tlv;
-		tlv_akmp->tlv.type = cpu_to_le16(TLV_TYPE_UAP_AKMP);
-		tlv_akmp->tlv.len =
-		    cpu_to_le16(sizeof(struct host_cmd_tlv_akmp) -
-				sizeof(struct host_cmd_tlv));
-		tlv_akmp->key_mgmt_operation =
-			cpu_to_le16(bss_cfg->key_mgmt_operation);
-		tlv_akmp->key_mgmt = cpu_to_le16(bss_cfg->key_mgmt);
-		cmd_size += sizeof(struct host_cmd_tlv_akmp);
-		tlv += sizeof(struct host_cmd_tlv_akmp);
-
-		if (bss_cfg->wpa_cfg.pairwise_cipher_wpa &
-				VALID_CIPHER_BITMAP) {
-			pwk_cipher = (struct host_cmd_tlv_pwk_cipher *)tlv;
-			pwk_cipher->tlv.type =
-				cpu_to_le16(TLV_TYPE_PWK_CIPHER);
-			pwk_cipher->tlv.len = cpu_to_le16(
-				sizeof(struct host_cmd_tlv_pwk_cipher) -
-				sizeof(struct host_cmd_tlv));
-			pwk_cipher->proto = cpu_to_le16(PROTOCOL_WPA);
-			pwk_cipher->cipher =
-				bss_cfg->wpa_cfg.pairwise_cipher_wpa;
-			cmd_size += sizeof(struct host_cmd_tlv_pwk_cipher);
-			tlv += sizeof(struct host_cmd_tlv_pwk_cipher);
-		}
-		if (bss_cfg->wpa_cfg.pairwise_cipher_wpa2 &
-				VALID_CIPHER_BITMAP) {
-			pwk_cipher = (struct host_cmd_tlv_pwk_cipher *)tlv;
-			pwk_cipher->tlv.type = cpu_to_le16(TLV_TYPE_PWK_CIPHER);
-			pwk_cipher->tlv.len = cpu_to_le16(
-				sizeof(struct host_cmd_tlv_pwk_cipher) -
-				sizeof(struct host_cmd_tlv));
-			pwk_cipher->proto = cpu_to_le16(PROTOCOL_WPA2);
-			pwk_cipher->cipher =
-				bss_cfg->wpa_cfg.pairwise_cipher_wpa2;
-			cmd_size += sizeof(struct host_cmd_tlv_pwk_cipher);
-			tlv += sizeof(struct host_cmd_tlv_pwk_cipher);
-		}
-		if (bss_cfg->wpa_cfg.group_cipher & VALID_CIPHER_BITMAP) {
-			gwk_cipher = (struct host_cmd_tlv_gwk_cipher *)tlv;
-			gwk_cipher->tlv.type = cpu_to_le16(TLV_TYPE_GWK_CIPHER);
-			gwk_cipher->tlv.len = cpu_to_le16(
-				sizeof(struct host_cmd_tlv_gwk_cipher) -
-				sizeof(struct host_cmd_tlv));
-			gwk_cipher->cipher = bss_cfg->wpa_cfg.group_cipher;
-			cmd_size += sizeof(struct host_cmd_tlv_gwk_cipher);
-			tlv += sizeof(struct host_cmd_tlv_gwk_cipher);
-		}
-		if (bss_cfg->wpa_cfg.length) {
-			passphrase = (struct host_cmd_tlv_passphrase *)tlv;
-			passphrase->tlv.type =
-				cpu_to_le16(TLV_TYPE_UAP_WPA_PASSPHRASE);
-			passphrase->tlv.len =
-				cpu_to_le16(bss_cfg->wpa_cfg.length);
-			memcpy(passphrase->passphrase,
-			       bss_cfg->wpa_cfg.passphrase,
-			       bss_cfg->wpa_cfg.length);
-			cmd_size += sizeof(struct host_cmd_tlv) +
-				    bss_cfg->wpa_cfg.length;
-			tlv += sizeof(struct host_cmd_tlv) +
-			       bss_cfg->wpa_cfg.length;
-		}
-	}
+	    (bss_cfg->protocol & PROTOCOL_EAP))
+		mwifiex_uap_bss_wpa(&tlv, cmd_buf, &cmd_size);
+
 	if ((bss_cfg->auth_mode <= WLAN_AUTH_SHARED_KEY) ||
 	    (bss_cfg->auth_mode == MWIFIEX_AUTH_MODE_AUTO)) {
 		auth_type = (struct host_cmd_tlv_auth_type *)tlv;
-- 
1.7.0.2


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] mwifiex: add 11n support for AP mode
  2012-06-12  1:14 ` [PATCH 3/4] mwifiex: add 11n support for AP mode Bing Zhao
@ 2012-06-12 11:54   ` Johannes Berg
  2012-06-12 18:44     ` Bing Zhao
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Berg @ 2012-06-12 11:54 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, John W. Linville, Avinash Patil, Yogesh Powar,
	Kiran Divekar, Amitkumar Karwar, Stone Piao, Ying Luo,
	Frank Huang, Jouni Malinen

On Mon, 2012-06-11 at 18:14 -0700, Bing Zhao wrote:
> From: Avinash Patil <patila@marvell.com>
> 
> Parse HT IE from cfg80211 and set HT capabilities accordingly
> to FW. If HT IE is missing, 11n would be disabled in FW.

No objections, but it might be worthwhile to extend the APIs to not have
to parse this?

johannes


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP
  2012-06-12  1:14 ` [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP Bing Zhao
@ 2012-06-12 11:54   ` Johannes Berg
  2012-06-12 12:03     ` Avinash Patil
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Berg @ 2012-06-12 11:54 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, John W. Linville, Avinash Patil, Yogesh Powar,
	Kiran Divekar, Amitkumar Karwar, Stone Piao, Ying Luo,
	Frank Huang

On Mon, 2012-06-11 at 18:14 -0700, Bing Zhao wrote:
> From: Avinash Patil <patila@marvell.com>
> 
> Add support for parsing WPA IE from beacon parameter of
> cfg80211_ap_settings and set it to FW.
> 
> WPA/WPA2 mixed mode is supported with this patch.

There's the crypto settings thing -- does that not supported mixed mode?

johannes


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP
  2012-06-12 11:54   ` Johannes Berg
@ 2012-06-12 12:03     ` Avinash Patil
  0 siblings, 0 replies; 10+ messages in thread
From: Avinash Patil @ 2012-06-12 12:03 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Bing Zhao, linux-wireless, John W. Linville, Avinash Patil,
	Yogesh Powar, Kiran Divekar, Amitkumar Karwar, Stone Piao,
	Ying Luo, Frank Huang

Hi Johannes,

Of course we do use crypto_settings to set WPA/WPA2 mixed mode. IE
parsing is only used for the purpose of setting WPA IE in
beacons/probe responses/assoc responses. Please see changes in
uap_cmd.c where we are using crypto settings for setting mixed mode.

Best Regards,
Avinash

On Tue, Jun 12, 2012 at 5:24 PM, Johannes Berg
<johannes@sipsolutions.net> wrote:
> On Mon, 2012-06-11 at 18:14 -0700, Bing Zhao wrote:
>> From: Avinash Patil <patila@marvell.com>
>>
>> Add support for parsing WPA IE from beacon parameter of
>> cfg80211_ap_settings and set it to FW.
>>
>> WPA/WPA2 mixed mode is supported with this patch.
>
> There's the crypto settings thing -- does that not supported mixed mode?
>
> johannes
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 3/4] mwifiex: add 11n support for AP mode
  2012-06-12 11:54   ` Johannes Berg
@ 2012-06-12 18:44     ` Bing Zhao
  2012-06-12 19:11       ` Johannes Berg
  0 siblings, 1 reply; 10+ messages in thread
From: Bing Zhao @ 2012-06-12 18:44 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, John W. Linville, Avinash Patil, Yogesh Powar,
	Kiran Divekar, Amitkumar Karwar, stone Piao, Ying Luo,
	Frank Huang, Jouni Malinen

SGkgSm9oYW5uZXMsDQoNClRoYW5rcyBmb3IgeW91ciBjb21tZW50Lg0KDQo+ID4gUGFyc2UgSFQg
SUUgZnJvbSBjZmc4MDIxMSBhbmQgc2V0IEhUIGNhcGFiaWxpdGllcyBhY2NvcmRpbmdseQ0KPiA+
IHRvIEZXLiBJZiBIVCBJRSBpcyBtaXNzaW5nLCAxMW4gd291bGQgYmUgZGlzYWJsZWQgaW4gRlcu
DQo+IA0KPiBObyBvYmplY3Rpb25zLCBidXQgaXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byBleHRl
bmQgdGhlIEFQSXMgdG8gbm90IGhhdmUNCj4gdG8gcGFyc2UgdGhpcz8NCg0KSWYgSSB1bmRlcnN0
YW5kIGl0IGNvcnJlY3RseSwgd2UgY2FuIHByb2JhYmx5IGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6
DQoNCjEpIGFkZCBuZXcgdmFyaWFibGVzICJjb25zdCB1OCAqaHRfY2FwIiBhbmQgInNpemVfdCBo
dF9jYXBfbGVuIiB0byBzdHJ1Y3QgY2ZnODAyMTFfYXBfc2V0dGluZ3MNCjIpIHBhcnNlIFdMQU5f
RUlEX0hUX0NBUEFCSUxJVFkgaW4gbmw4MDIxMV9zdGFydF9hcCgpIGFuZCB1cGRhdGUgaHRfY2Fw
L2h0X2NhcF9sZW4gYWNjb3JkaW5nbHkNCjMpIGRyaXZlcnMgKG13aWZpZXgsIGV0Yy4pIG1ha2Ug
dXNlIG9mIGh0X2NhcC9odF9jYXBfbGVuIGRpcmVjdGx5IGluIHN0YXJ0X2FwKCkgaGFuZGxlcg0K
DQpSZWdhcmRsZXNzIHdlIGhhdmUgdG8gcGFyc2UgSFRfQ0FQIElFIGZyb20gYmVhY29uLnRhaWws
IGVpdGhlciBpbiBkcml2ZXIgc3RhcnRfdXAgaGFuZGxlciwgb3IgaW5zaWRlIG9mIGNmZzgwMjEx
L25sODAyMTEuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBhYm92ZSBjaGFuZ2UgaXMgT0sgZm9yIHlv
dS4NCg0KVGhhbmtzLA0KQmluZw0KDQo=

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 3/4] mwifiex: add 11n support for AP mode
  2012-06-12 18:44     ` Bing Zhao
@ 2012-06-12 19:11       ` Johannes Berg
  2012-06-12 21:18         ` Bing Zhao
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Berg @ 2012-06-12 19:11 UTC (permalink / raw)
  To: Bing Zhao
  Cc: linux-wireless, John W. Linville, Avinash Patil, Yogesh Powar,
	Kiran Divekar, Amitkumar Karwar, stone Piao, Ying Luo,
	Frank Huang, Jouni Malinen

On Tue, 2012-06-12 at 11:44 -0700, Bing Zhao wrote:
> Hi Johannes,
> 
> Thanks for your comment.
> 
> > > Parse HT IE from cfg80211 and set HT capabilities accordingly
> > > to FW. If HT IE is missing, 11n would be disabled in FW.
> > 
> > No objections, but it might be worthwhile to extend the APIs to not
> have
> > to parse this?
> 
> If I understand it correctly, we can probably do something like this:
> 
> 1) add new variables "const u8 *ht_cap" and "size_t ht_cap_len" to
> struct cfg80211_ap_settings
> 2) parse WLAN_EID_HT_CAPABILITY in nl80211_start_ap() and update
> ht_cap/ht_cap_len accordingly
> 3) drivers (mwifiex, etc.) make use of ht_cap/ht_cap_len directly in
> start_ap() handler
> 
> Regardless we have to parse HT_CAP IE from beacon.tail, either in
> driver start_up handler, or inside of cfg80211/nl80211. Please let me
> know if above change is OK for you.

I don't think I'd bother doing the above change. I was thinking that the
supplicant/hostapd would give it in separate attributes, but I guess it
doesn't.

johannes


^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 3/4] mwifiex: add 11n support for AP mode
  2012-06-12 19:11       ` Johannes Berg
@ 2012-06-12 21:18         ` Bing Zhao
  0 siblings, 0 replies; 10+ messages in thread
From: Bing Zhao @ 2012-06-12 21:18 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, John W. Linville, Avinash Patil, Yogesh Powar,
	Kiran Divekar, Amitkumar Karwar, stone Piao, Ying Luo,
	Frank Huang, Jouni Malinen

SGkgSm9oYW5uZXMsDQoNCj4gPiA+ID4gUGFyc2UgSFQgSUUgZnJvbSBjZmc4MDIxMSBhbmQgc2V0
IEhUIGNhcGFiaWxpdGllcyBhY2NvcmRpbmdseQ0KPiA+ID4gPiB0byBGVy4gSWYgSFQgSUUgaXMg
bWlzc2luZywgMTFuIHdvdWxkIGJlIGRpc2FibGVkIGluIEZXLg0KPiA+ID4NCj4gPiA+IE5vIG9i
amVjdGlvbnMsIGJ1dCBpdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIGV4dGVuZCB0aGUgQVBJcyB0
byBub3QNCj4gPiBoYXZlDQo+ID4gPiB0byBwYXJzZSB0aGlzPw0KPiA+DQo+ID4gSWYgSSB1bmRl
cnN0YW5kIGl0IGNvcnJlY3RseSwgd2UgY2FuIHByb2JhYmx5IGRvIHNvbWV0aGluZyBsaWtlIHRo
aXM6DQo+ID4NCj4gPiAxKSBhZGQgbmV3IHZhcmlhYmxlcyAiY29uc3QgdTggKmh0X2NhcCIgYW5k
ICJzaXplX3QgaHRfY2FwX2xlbiIgdG8NCj4gPiBzdHJ1Y3QgY2ZnODAyMTFfYXBfc2V0dGluZ3MN
Cj4gPiAyKSBwYXJzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZIGluIG5sODAyMTFfc3RhcnRfYXAo
KSBhbmQgdXBkYXRlDQo+ID4gaHRfY2FwL2h0X2NhcF9sZW4gYWNjb3JkaW5nbHkNCj4gPiAzKSBk
cml2ZXJzIChtd2lmaWV4LCBldGMuKSBtYWtlIHVzZSBvZiBodF9jYXAvaHRfY2FwX2xlbiBkaXJl
Y3RseSBpbg0KPiA+IHN0YXJ0X2FwKCkgaGFuZGxlcg0KPiA+DQo+ID4gUmVnYXJkbGVzcyB3ZSBo
YXZlIHRvIHBhcnNlIEhUX0NBUCBJRSBmcm9tIGJlYWNvbi50YWlsLCBlaXRoZXIgaW4NCj4gPiBk
cml2ZXIgc3RhcnRfdXAgaGFuZGxlciwgb3IgaW5zaWRlIG9mIGNmZzgwMjExL25sODAyMTEuIFBs
ZWFzZSBsZXQgbWUNCj4gPiBrbm93IGlmIGFib3ZlIGNoYW5nZSBpcyBPSyBmb3IgeW91Lg0KPiAN
Cj4gSSBkb24ndCB0aGluayBJJ2QgYm90aGVyIGRvaW5nIHRoZSBhYm92ZSBjaGFuZ2UuIEkgd2Fz
IHRoaW5raW5nIHRoYXQgdGhlDQo+IHN1cHBsaWNhbnQvaG9zdGFwZCB3b3VsZCBnaXZlIGl0IGlu
IHNlcGFyYXRlIGF0dHJpYnV0ZXMsIGJ1dCBJIGd1ZXNzIGl0DQo+IGRvZXNuJ3QuDQoNCk9LLiBJ
IHdpbGwgc3RpY2sgdG8gb3JpZ2luYWwgYXBwcm9hY2ggdGhlbi4NCg0KQnkgdGhlIHdheSwgSSB3
aWxsIHJlc3VibWl0IHRoaXMgcGF0Y2ggdG8gYWRkcmVzcyBzb21lIHNwYXJzZSB3YXJuaW5ncy4N
Cg0KVGhhbmtzLA0KQmluZw0KDQo=

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-06-12 21:22 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-12  1:14 [PATCH 1/4] mwifiex: set channel via start_ap handler for AP interface Bing Zhao
2012-06-12  1:14 ` [PATCH 2/4] mwifiex: parse WPA IE and support WPA/WPA2 mixed mode for uAP Bing Zhao
2012-06-12 11:54   ` Johannes Berg
2012-06-12 12:03     ` Avinash Patil
2012-06-12  1:14 ` [PATCH 3/4] mwifiex: add 11n support for AP mode Bing Zhao
2012-06-12 11:54   ` Johannes Berg
2012-06-12 18:44     ` Bing Zhao
2012-06-12 19:11       ` Johannes Berg
2012-06-12 21:18         ` Bing Zhao
2012-06-12  1:14 ` [PATCH 4/4] mwifiex: separate uAP WPA/WPA2 parsing from other BSS parameters Bing Zhao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.