]> git.karo-electronics.de Git - linux-beck.git/commitdiff
wl18xx: move to new firmware (wl18xx-fw-3.bin)
authorEliad Peller <eliad@wizery.com>
Mon, 10 Feb 2014 11:47:25 +0000 (13:47 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 13 Feb 2014 20:20:15 +0000 (15:20 -0500)
Bump the min wl18xx fw version to 8.8.0.0.13

This fw is not backward compatible with older
firmware (due to api changes), so use bump
the firmware name as well.

Some modifications were done to the driver-fw api
in order to support multiple APs.

Additionally, some of the consts (such as max stations,
max links and max RX BA sessions) were changed.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ti/wl18xx/main.c
drivers/net/wireless/ti/wl18xx/wl18xx.h
drivers/net/wireless/ti/wlcore/acx.c
drivers/net/wireless/ti/wlcore/acx.h
drivers/net/wireless/ti/wlcore/cmd.c
drivers/net/wireless/ti/wlcore/cmd.h
drivers/net/wireless/ti/wlcore/main.c
drivers/net/wireless/ti/wlcore/tx.c
drivers/net/wireless/ti/wlcore/wlcore_i.h

index 966a866d76f0c4029e007951a146a98ac3e3d065..de5b4fa5d1666b9a5af57b8312da487a037ebdf4 100644 (file)
@@ -648,7 +648,7 @@ static const struct wl18xx_clk_cfg wl18xx_clk_table[NUM_CLOCK_CONFIGS] = {
 };
 
 /* TODO: maybe move to a new header file? */
-#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-2.bin"
+#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-3.bin"
 
 static int wl18xx_identify_chip(struct wl1271 *wl)
 {
index 9785bf87c6668342a5ccca4cc9b9fcb2593f0772..eb7cfe8170104ab5eb273c84f2c49209a0d9e1a3 100644 (file)
 
 /* minimum FW required for driver */
 #define WL18XX_CHIP_VER                8
-#define WL18XX_IFTYPE_VER      5
+#define WL18XX_IFTYPE_VER      8
 #define WL18XX_MAJOR_VER       WLCORE_FW_VER_IGNORE
 #define WL18XX_SUBTYPE_VER     WLCORE_FW_VER_IGNORE
-#define WL18XX_MINOR_VER       39
+#define WL18XX_MINOR_VER       13
 
 #define WL18XX_CMD_MAX_SIZE          740
 
 
 #define WL18XX_NUM_MAC_ADDRESSES 3
 
-#define WL18XX_RX_BA_MAX_SESSIONS 5
+#define WL18XX_RX_BA_MAX_SESSIONS 13
 
-#define WL18XX_MAX_AP_STATIONS 8
-#define WL18XX_MAX_LINKS 12
+#define WL18XX_MAX_AP_STATIONS 10
+#define WL18XX_MAX_LINKS 16
 
 struct wl18xx_priv {
        /* buffer for sending commands to FW */
index ec83675a244697537afd791613cfec9e87d13caa..71b244b7ab7f721b87570751eb83724148b11217 100644 (file)
@@ -1591,7 +1591,8 @@ out:
        return ret;
 }
 
-int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
+int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
+                                   struct wl12xx_vif *wlvif, u8 *addr)
 {
        struct wl1271_acx_inconnection_sta *acx = NULL;
        int ret;
@@ -1603,6 +1604,7 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
                return -ENOMEM;
 
        memcpy(acx->addr, addr, ETH_ALEN);
+       acx->role_id = wlvif->role_id;
 
        ret = wl1271_cmd_configure(wl, ACX_UPDATE_INCONNECTION_STA_LIST,
                                   acx, sizeof(*acx));
index 6dcfad9b04729a44d60044d41bb1ac0a9ac042cb..954d57ec98f45cc358c0753dab590205322a8178 100644 (file)
@@ -824,7 +824,8 @@ struct wl1271_acx_inconnection_sta {
        struct acx_header header;
 
        u8 addr[ETH_ALEN];
-       u8 padding1[2];
+       u8 role_id;
+       u8 padding;
 } __packed;
 
 /*
@@ -1118,7 +1119,8 @@ int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
                               bool enable);
 int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
 int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
-int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr);
+int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
+                                   struct wl12xx_vif *wlvif, u8 *addr);
 int wl1271_acx_fm_coex(struct wl1271 *wl);
 int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
 int wl12xx_acx_config_hangover(struct wl1271 *wl);
index ab5ca32dd3d1698ba06235ff4ac71094aac3a2a0..3463a67d1c0d1713a0033bd58f2bd8f3a92d8470 100644 (file)
@@ -1532,6 +1532,7 @@ int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
        cmd->sp_len = sta->max_sp;
        cmd->wmm = sta->wme ? 1 : 0;
        cmd->session_id = wl->session_ids[hlid];
+       cmd->role_id = wlvif->role_id;
 
        for (i = 0; i < NUM_ACCESS_CATEGORIES_COPY; i++)
                if (sta->wme && (sta->uapsd_queues & BIT(i)))
@@ -1568,7 +1569,8 @@ out:
        return ret;
 }
 
-int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
+int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
+                          u8 hlid)
 {
        struct wl12xx_cmd_remove_peer *cmd;
        int ret;
@@ -1586,6 +1588,7 @@ int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
        /* We never send a deauth, mac80211 is in charge of this */
        cmd->reason_opcode = 0;
        cmd->send_deauth_flag = 0;
+       cmd->role_id = wlvif->role_id;
 
        ret = wl1271_cmd_send(wl, CMD_REMOVE_PEER, cmd, sizeof(*cmd), 0);
        if (ret < 0) {
index 323d4a856e4ba80d37f52fadf0832ad09066996e..9cb3f44bc76cd19654011f03b8f3b6afec91b0c4 100644 (file)
@@ -88,7 +88,8 @@ int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id,
 int wl12xx_croc(struct wl1271 *wl, u8 role_id);
 int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
                        struct ieee80211_sta *sta, u8 hlid);
-int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid);
+int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
+                          u8 hlid);
 void wlcore_set_pending_regdomain_ch(struct wl1271 *wl, u16 channel,
                                     enum ieee80211_band band);
 int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl);
@@ -594,6 +595,8 @@ struct wl12xx_cmd_add_peer {
        u8 sp_len;
        u8 wmm;
        u8 session_id;
+       u8 role_id;
+       u8 padding[3];
 } __packed;
 
 struct wl12xx_cmd_remove_peer {
@@ -602,7 +605,7 @@ struct wl12xx_cmd_remove_peer {
        u8 hlid;
        u8 reason_opcode;
        u8 send_deauth_flag;
-       u8 padding1;
+       u8 role_id;
 } __packed;
 
 /*
index d16fb7e0eb98cd23d98dc03ceb65e049f249c9c5..73bf251aeaa40a4e181113310e36961a85919bc6 100644 (file)
@@ -4765,7 +4765,7 @@ static int wl12xx_sta_remove(struct wl1271 *wl,
        if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
                return -EINVAL;
 
-       ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid);
+       ret = wl12xx_cmd_remove_peer(wl, wlvif, wl_sta->hlid);
        if (ret < 0)
                return ret;
 
index 06ab5c6d6befb6c5eedc4aa62bf1fbab3937665d..9f7921d98036fb93698c6b2aabbed7f5bf9ebfba 100644 (file)
@@ -101,7 +101,7 @@ static void wl1271_tx_ap_update_inconnection_sta(struct wl1271 *wl,
         * authentication response. this way it won't get de-authed by FW
         * when transmitting too soon.
         */
-       wl1271_acx_set_inconnection_sta(wl, hdr->addr1);
+       wl1271_acx_set_inconnection_sta(wl, wlvif, hdr->addr1);
 
        /*
         * ROC for 1 second on the AP channel for completing the connection.
index a53a37f2b45a5fe8e2def2b3bffe45011a07f157..756e890bc5ee2be0a5f68ef3e37de397ccc8dd52 100644 (file)
@@ -65,7 +65,7 @@
  * max number of links allowed by all HWs.
  * this is NOT the actual max links supported by the current hw.
  */
-#define WLCORE_MAX_LINKS 12
+#define WLCORE_MAX_LINKS 16
 
 /* the driver supports the 2.4Ghz and 5Ghz bands */
 #define WLCORE_NUM_BANDS           2