| From 42c7372a111630dab200c2f959424f5ec3bf79a4 Mon Sep 17 00:00:00 2001 |
| From: Maxim Altshul <maxim.altshul@ti.com> |
| Date: Sun, 21 Aug 2016 14:24:24 +0300 |
| Subject: [PATCH] wlcore: Pass win_size taken from ieee80211_sta to FW |
| |
| commit 42c7372a111630dab200c2f959424f5ec3bf79a4 upstream. |
| |
| 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> |
| |
| diff --git a/drivers/net/wireless/ti/wlcore/acx.c b/drivers/net/wireless/ti/wlcore/acx.c |
| index 26cc23f32241..a4859993db3c 100644 |
| --- a/drivers/net/wireless/ti/wlcore/acx.c |
| +++ b/drivers/net/wireless/ti/wlcore/acx.c |
| @@ -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, |
| diff --git a/drivers/net/wireless/ti/wlcore/acx.h b/drivers/net/wireless/ti/wlcore/acx.h |
| index 6321ed472891..f46d7fdf9a00 100644 |
| --- a/drivers/net/wireless/ti/wlcore/acx.h |
| +++ b/drivers/net/wireless/ti/wlcore/acx.h |
| @@ -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, |
| diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c |
| index 471521a0db7b..5438975c7ff2 100644 |
| --- a/drivers/net/wireless/ti/wlcore/main.c |
| +++ b/drivers/net/wireless/ti/wlcore/main.c |
| @@ -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--; |
| -- |
| 2.12.0 |
| |