mwifiex: 11n specific configuration for transmit
authorAmitkumar Karwar <akarwar@marvell.com>
Sat, 9 Jul 2011 03:40:30 +0000 (20:40 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 11 Jul 2011 19:02:10 +0000 (15:02 -0400)
Currently device is not able to transmit in 40MHz in spite of
enabling 40MHz support in HTCapInfo IE in assoc req, because
11n specific FW capabilities for transmission are not initialized.
This patch adds code to initilize these capabilities.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Kiran Divekar <dkiran@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/fw.h
drivers/net/wireless/mwifiex/sta_cmd.c

index afdd145dff0b61c6f1c36d7acb506c2aee15e430..4fee0993b186a9c44696617e16b7fcb50d0714d5 100644 (file)
@@ -157,6 +157,17 @@ enum MWIFIEX_802_11_WEP_STATUS {
 #define ISSUPP_RXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(26))
 #define ISSUPP_GREENFIELD(Dot11nDevCap) (Dot11nDevCap & BIT(29))
 
+/* httxcfg bitmap
+ * 0           reserved
+ * 1           20/40 Mhz enable(1)/disable(0)
+ * 2-3         reserved
+ * 4           green field enable(1)/disable(0)
+ * 5           short GI in 20 Mhz enable(1)/disable(0)
+ * 6           short GI in 40 Mhz enable(1)/disable(0)
+ * 7-15                reserved
+ */
+#define MWIFIEX_FW_DEF_HTTXCFG (BIT(1) | BIT(4) | BIT(5) | BIT(6))
+
 #define GET_RXMCSSUPP(DevMCSSupported) (DevMCSSupported & 0x0f)
 #define SETHT_MCS32(x) (x[4] |= 1)
 
index 49b9c1309f7a8865a60d95e858eb8e4b8d45346e..c54ee287b8785a85fbfbc91ef05c0736dcde9af0 100644 (file)
@@ -1113,6 +1113,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta)
        struct mwifiex_ds_11n_amsdu_aggr_ctrl amsdu_aggr_ctrl;
        struct mwifiex_ds_auto_ds auto_ds;
        enum state_11d_t state_11d;
+       struct mwifiex_ds_11n_tx_cfg tx_cfg;
 
        if (first_sta) {
 
@@ -1198,8 +1199,15 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta)
        if (ret)
                dev_err(priv->adapter->dev, "11D: failed to enable 11D\n");
 
+       /* Send cmd to FW to configure 11n specific configuration
+        * (Short GI, Channel BW, Green field support etc.) for transmit
+        */
+       tx_cfg.tx_htcap = MWIFIEX_FW_DEF_HTTXCFG;
+       ret = mwifiex_send_cmd_async(priv, HostCmd_CMD_11N_CFG,
+                                    HostCmd_ACT_GEN_SET, 0, &tx_cfg);
+
        /* set last_init_cmd */
-       priv->adapter->last_init_cmd = HostCmd_CMD_802_11_SNMP_MIB;
+       priv->adapter->last_init_cmd = HostCmd_CMD_11N_CFG;
        ret = -EINPROGRESS;
 
        return ret;