linux-wireless.vger.kernel.org archive mirror
 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@vger.kernel.org, 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@vger.kernel.org, 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@vger.kernel.org, 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).