aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEliad Peller <eliad@wizery.com>2014-02-10 06:47:25 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-02-13 15:20:15 -0500
commit028e7243ac411c3aba7a754bcc775c2fbb0b3e5c (patch)
treec81ab471824c942c230c6195c7e59682f0dea496
parentabf0b24912640c4fa94b0a2f22ee9d51c8521b16 (diff)
wl18xx: move to new firmware (wl18xx-fw-3.bin)
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>
-rw-r--r--drivers/net/wireless/ti/wl18xx/main.c2
-rw-r--r--drivers/net/wireless/ti/wl18xx/wl18xx.h10
-rw-r--r--drivers/net/wireless/ti/wlcore/acx.c4
-rw-r--r--drivers/net/wireless/ti/wlcore/acx.h6
-rw-r--r--drivers/net/wireless/ti/wlcore/cmd.c5
-rw-r--r--drivers/net/wireless/ti/wlcore/cmd.h7
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c2
-rw-r--r--drivers/net/wireless/ti/wlcore/tx.c2
-rw-r--r--drivers/net/wireless/ti/wlcore/wlcore_i.h2
9 files changed, 25 insertions, 15 deletions
diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c
index 966a866d76f0..de5b4fa5d166 100644
--- a/drivers/net/wireless/ti/wl18xx/main.c
+++ b/drivers/net/wireless/ti/wl18xx/main.c
@@ -648,7 +648,7 @@ static const struct wl18xx_clk_cfg wl18xx_clk_table[NUM_CLOCK_CONFIGS] = {
648}; 648};
649 649
650/* TODO: maybe move to a new header file? */ 650/* TODO: maybe move to a new header file? */
651#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-2.bin" 651#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-3.bin"
652 652
653static int wl18xx_identify_chip(struct wl1271 *wl) 653static int wl18xx_identify_chip(struct wl1271 *wl)
654{ 654{
diff --git a/drivers/net/wireless/ti/wl18xx/wl18xx.h b/drivers/net/wireless/ti/wl18xx/wl18xx.h
index 9785bf87c666..eb7cfe817010 100644
--- a/drivers/net/wireless/ti/wl18xx/wl18xx.h
+++ b/drivers/net/wireless/ti/wl18xx/wl18xx.h
@@ -26,10 +26,10 @@
26 26
27/* minimum FW required for driver */ 27/* minimum FW required for driver */
28#define WL18XX_CHIP_VER 8 28#define WL18XX_CHIP_VER 8
29#define WL18XX_IFTYPE_VER 5 29#define WL18XX_IFTYPE_VER 8
30#define WL18XX_MAJOR_VER WLCORE_FW_VER_IGNORE 30#define WL18XX_MAJOR_VER WLCORE_FW_VER_IGNORE
31#define WL18XX_SUBTYPE_VER WLCORE_FW_VER_IGNORE 31#define WL18XX_SUBTYPE_VER WLCORE_FW_VER_IGNORE
32#define WL18XX_MINOR_VER 39 32#define WL18XX_MINOR_VER 13
33 33
34#define WL18XX_CMD_MAX_SIZE 740 34#define WL18XX_CMD_MAX_SIZE 740
35 35
@@ -40,10 +40,10 @@
40 40
41#define WL18XX_NUM_MAC_ADDRESSES 3 41#define WL18XX_NUM_MAC_ADDRESSES 3
42 42
43#define WL18XX_RX_BA_MAX_SESSIONS 5 43#define WL18XX_RX_BA_MAX_SESSIONS 13
44 44
45#define WL18XX_MAX_AP_STATIONS 8 45#define WL18XX_MAX_AP_STATIONS 10
46#define WL18XX_MAX_LINKS 12 46#define WL18XX_MAX_LINKS 16
47 47
48struct wl18xx_priv { 48struct wl18xx_priv {
49 /* buffer for sending commands to FW */ 49 /* buffer for sending commands to FW */
diff --git a/drivers/net/wireless/ti/wlcore/acx.c b/drivers/net/wireless/ti/wlcore/acx.c
index ec83675a2446..71b244b7ab7f 100644
--- a/drivers/net/wireless/ti/wlcore/acx.c
+++ b/drivers/net/wireless/ti/wlcore/acx.c
@@ -1591,7 +1591,8 @@ out:
1591 return ret; 1591 return ret;
1592} 1592}
1593 1593
1594int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr) 1594int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
1595 struct wl12xx_vif *wlvif, u8 *addr)
1595{ 1596{
1596 struct wl1271_acx_inconnection_sta *acx = NULL; 1597 struct wl1271_acx_inconnection_sta *acx = NULL;
1597 int ret; 1598 int ret;
@@ -1603,6 +1604,7 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
1603 return -ENOMEM; 1604 return -ENOMEM;
1604 1605
1605 memcpy(acx->addr, addr, ETH_ALEN); 1606 memcpy(acx->addr, addr, ETH_ALEN);
1607 acx->role_id = wlvif->role_id;
1606 1608
1607 ret = wl1271_cmd_configure(wl, ACX_UPDATE_INCONNECTION_STA_LIST, 1609 ret = wl1271_cmd_configure(wl, ACX_UPDATE_INCONNECTION_STA_LIST,
1608 acx, sizeof(*acx)); 1610 acx, sizeof(*acx));
diff --git a/drivers/net/wireless/ti/wlcore/acx.h b/drivers/net/wireless/ti/wlcore/acx.h
index 6dcfad9b0472..954d57ec98f4 100644
--- a/drivers/net/wireless/ti/wlcore/acx.h
+++ b/drivers/net/wireless/ti/wlcore/acx.h
@@ -824,7 +824,8 @@ struct wl1271_acx_inconnection_sta {
824 struct acx_header header; 824 struct acx_header header;
825 825
826 u8 addr[ETH_ALEN]; 826 u8 addr[ETH_ALEN];
827 u8 padding1[2]; 827 u8 role_id;
828 u8 padding;
828} __packed; 829} __packed;
829 830
830/* 831/*
@@ -1118,7 +1119,8 @@ int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
1118 bool enable); 1119 bool enable);
1119int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif); 1120int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
1120int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif); 1121int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
1121int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr); 1122int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
1123 struct wl12xx_vif *wlvif, u8 *addr);
1122int wl1271_acx_fm_coex(struct wl1271 *wl); 1124int wl1271_acx_fm_coex(struct wl1271 *wl);
1123int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl); 1125int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
1124int wl12xx_acx_config_hangover(struct wl1271 *wl); 1126int wl12xx_acx_config_hangover(struct wl1271 *wl);
diff --git a/drivers/net/wireless/ti/wlcore/cmd.c b/drivers/net/wireless/ti/wlcore/cmd.c
index ab5ca32dd3d1..3463a67d1c0d 100644
--- a/drivers/net/wireless/ti/wlcore/cmd.c
+++ b/drivers/net/wireless/ti/wlcore/cmd.c
@@ -1532,6 +1532,7 @@ int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
1532 cmd->sp_len = sta->max_sp; 1532 cmd->sp_len = sta->max_sp;
1533 cmd->wmm = sta->wme ? 1 : 0; 1533 cmd->wmm = sta->wme ? 1 : 0;
1534 cmd->session_id = wl->session_ids[hlid]; 1534 cmd->session_id = wl->session_ids[hlid];
1535 cmd->role_id = wlvif->role_id;
1535 1536
1536 for (i = 0; i < NUM_ACCESS_CATEGORIES_COPY; i++) 1537 for (i = 0; i < NUM_ACCESS_CATEGORIES_COPY; i++)
1537 if (sta->wme && (sta->uapsd_queues & BIT(i))) 1538 if (sta->wme && (sta->uapsd_queues & BIT(i)))
@@ -1568,7 +1569,8 @@ out:
1568 return ret; 1569 return ret;
1569} 1570}
1570 1571
1571int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid) 1572int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
1573 u8 hlid)
1572{ 1574{
1573 struct wl12xx_cmd_remove_peer *cmd; 1575 struct wl12xx_cmd_remove_peer *cmd;
1574 int ret; 1576 int ret;
@@ -1586,6 +1588,7 @@ int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
1586 /* We never send a deauth, mac80211 is in charge of this */ 1588 /* We never send a deauth, mac80211 is in charge of this */
1587 cmd->reason_opcode = 0; 1589 cmd->reason_opcode = 0;
1588 cmd->send_deauth_flag = 0; 1590 cmd->send_deauth_flag = 0;
1591 cmd->role_id = wlvif->role_id;
1589 1592
1590 ret = wl1271_cmd_send(wl, CMD_REMOVE_PEER, cmd, sizeof(*cmd), 0); 1593 ret = wl1271_cmd_send(wl, CMD_REMOVE_PEER, cmd, sizeof(*cmd), 0);
1591 if (ret < 0) { 1594 if (ret < 0) {
diff --git a/drivers/net/wireless/ti/wlcore/cmd.h b/drivers/net/wireless/ti/wlcore/cmd.h
index 323d4a856e4b..9cb3f44bc76c 100644
--- a/drivers/net/wireless/ti/wlcore/cmd.h
+++ b/drivers/net/wireless/ti/wlcore/cmd.h
@@ -88,7 +88,8 @@ int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id,
88int wl12xx_croc(struct wl1271 *wl, u8 role_id); 88int wl12xx_croc(struct wl1271 *wl, u8 role_id);
89int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif, 89int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
90 struct ieee80211_sta *sta, u8 hlid); 90 struct ieee80211_sta *sta, u8 hlid);
91int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid); 91int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
92 u8 hlid);
92void wlcore_set_pending_regdomain_ch(struct wl1271 *wl, u16 channel, 93void wlcore_set_pending_regdomain_ch(struct wl1271 *wl, u16 channel,
93 enum ieee80211_band band); 94 enum ieee80211_band band);
94int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl); 95int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl);
@@ -594,6 +595,8 @@ struct wl12xx_cmd_add_peer {
594 u8 sp_len; 595 u8 sp_len;
595 u8 wmm; 596 u8 wmm;
596 u8 session_id; 597 u8 session_id;
598 u8 role_id;
599 u8 padding[3];
597} __packed; 600} __packed;
598 601
599struct wl12xx_cmd_remove_peer { 602struct wl12xx_cmd_remove_peer {
@@ -602,7 +605,7 @@ struct wl12xx_cmd_remove_peer {
602 u8 hlid; 605 u8 hlid;
603 u8 reason_opcode; 606 u8 reason_opcode;
604 u8 send_deauth_flag; 607 u8 send_deauth_flag;
605 u8 padding1; 608 u8 role_id;
606} __packed; 609} __packed;
607 610
608/* 611/*
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index d16fb7e0eb98..73bf251aeaa4 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -4765,7 +4765,7 @@ static int wl12xx_sta_remove(struct wl1271 *wl,
4765 if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map))) 4765 if (WARN_ON(!test_bit(id, wlvif->ap.sta_hlid_map)))
4766 return -EINVAL; 4766 return -EINVAL;
4767 4767
4768 ret = wl12xx_cmd_remove_peer(wl, wl_sta->hlid); 4768 ret = wl12xx_cmd_remove_peer(wl, wlvif, wl_sta->hlid);
4769 if (ret < 0) 4769 if (ret < 0)
4770 return ret; 4770 return ret;
4771 4771
diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
index 06ab5c6d6bef..9f7921d98036 100644
--- a/drivers/net/wireless/ti/wlcore/tx.c
+++ b/drivers/net/wireless/ti/wlcore/tx.c
@@ -101,7 +101,7 @@ static void wl1271_tx_ap_update_inconnection_sta(struct wl1271 *wl,
101 * authentication response. this way it won't get de-authed by FW 101 * authentication response. this way it won't get de-authed by FW
102 * when transmitting too soon. 102 * when transmitting too soon.
103 */ 103 */
104 wl1271_acx_set_inconnection_sta(wl, hdr->addr1); 104 wl1271_acx_set_inconnection_sta(wl, wlvif, hdr->addr1);
105 105
106 /* 106 /*
107 * ROC for 1 second on the AP channel for completing the connection. 107 * ROC for 1 second on the AP channel for completing the connection.
diff --git a/drivers/net/wireless/ti/wlcore/wlcore_i.h b/drivers/net/wireless/ti/wlcore/wlcore_i.h
index a53a37f2b45a..756e890bc5ee 100644
--- a/drivers/net/wireless/ti/wlcore/wlcore_i.h
+++ b/drivers/net/wireless/ti/wlcore/wlcore_i.h
@@ -65,7 +65,7 @@
65 * max number of links allowed by all HWs. 65 * max number of links allowed by all HWs.
66 * this is NOT the actual max links supported by the current hw. 66 * this is NOT the actual max links supported by the current hw.
67 */ 67 */
68#define WLCORE_MAX_LINKS 12 68#define WLCORE_MAX_LINKS 16
69 69
70/* the driver supports the 2.4Ghz and 5Ghz bands */ 70/* the driver supports the 2.4Ghz and 5Ghz bands */
71#define WLCORE_NUM_BANDS 2 71#define WLCORE_NUM_BANDS 2