wlcore: Pass win_size taken from ieee80211_sta to FW
authorMaxim Altshul <maxim.altshul@ti.com>
Sun, 21 Aug 2016 11:24:24 +0000 (14:24 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 17 Nov 2016 06:38:04 +0000 (08:38 +0200)
When starting a new BA session, we must pass the win_size to the FW.

To do this we take max_rx_aggregation_subframes (BA RX win size)
which is stored in ieee80211_sta structure (e.g per link and not per HW)

We will use the value stored per link when passing the win_size to
firmware through the ACX_BA_SESSION_RX_SETUP command.

Signed-off-by: Maxim Altshul <maxim.altshul@ti.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ti/wlcore/acx.c
drivers/net/wireless/ti/wlcore/acx.h
drivers/net/wireless/ti/wlcore/main.c

index 26cc23f3224148bd8a4909f242dfaffdd3c1c108..a4859993db3c600bb2cd4cadf2e30794da19f338 100644 (file)
@@ -1419,7 +1419,8 @@ out:
 
 /* setup BA session receiver setting in the FW. */
 int wl12xx_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index,
-                                      u16 ssn, bool enable, u8 peer_hlid)
+                                      u16 ssn, bool enable, u8 peer_hlid,
+                                      u8 win_size)
 {
        struct wl1271_acx_ba_receiver_setup *acx;
        int ret;
@@ -1435,7 +1436,7 @@ int wl12xx_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index,
        acx->hlid = peer_hlid;
        acx->tid = tid_index;
        acx->enable = enable;
-       acx->win_size = wl->conf.ht.rx_ba_win_size;
+       acx->win_size = win_size;
        acx->ssn = ssn;
 
        ret = wlcore_cmd_configure_failsafe(wl, ACX_BA_SESSION_RX_SETUP, acx,
index 6321ed47289158f11af77fcc218518cdd70ff868..f46d7fdf9a0008bf1cae968fa8ab36ac09da00d5 100644 (file)
@@ -1113,7 +1113,8 @@ int wl1271_acx_set_ht_information(struct wl1271 *wl,
 int wl12xx_acx_set_ba_initiator_policy(struct wl1271 *wl,
                                       struct wl12xx_vif *wlvif);
 int wl12xx_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index,
-                                      u16 ssn, bool enable, u8 peer_hlid);
+                                      u16 ssn, bool enable, u8 peer_hlid,
+                                      u8 win_size);
 int wl12xx_acx_tsf_info(struct wl1271 *wl, struct wl12xx_vif *wlvif,
                        u64 *mactime);
 int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
index 471521a0db7b6634e0f2c36ef8a168116c336f4f..5438975c7ff2a6a310680f6497b280d44772bd74 100644 (file)
@@ -5285,7 +5285,9 @@ static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
                }
 
                ret = wl12xx_acx_set_ba_receiver_session(wl, tid, *ssn, true,
-                                                        hlid);
+                               hlid,
+                               params->buf_size);
+
                if (!ret) {
                        *ba_bitmap |= BIT(tid);
                        wl->ba_rx_session_count++;
@@ -5306,7 +5308,7 @@ static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
                }
 
                ret = wl12xx_acx_set_ba_receiver_session(wl, tid, 0, false,
-                                                        hlid);
+                                                        hlid, 0);
                if (!ret) {
                        *ba_bitmap &= ~BIT(tid);
                        wl->ba_rx_session_count--;