Skip to content

Commit

Permalink
wlcore: Add RX_BA_WIN_SIZE_CHANGE_EVENT event
Browse files Browse the repository at this point in the history
commit e7ee74b upstream.

This event is used by the Firmware to limit the RX BA win size
for a specific link.

The event handler updates the new size in the mac's sta->sta struct.

BA sessions opened for that link will use the new restricted
win_size. This limitation remains until a new update is received or
until the link is closed.

Signed-off-by: Maxim Altshul <maxim.altshul@ti.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
[AmitP: Minor refactoring for linux-4.4.y]
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Maxim Altshul authored and Greg Kroah-Hartman committed May 20, 2017
1 parent 4b86b46 commit d439226
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
28 changes: 28 additions & 0 deletions drivers/net/wireless/ti/wl18xx/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,5 +206,33 @@ int wl18xx_process_mailbox_events(struct wl1271 *wl)
mbox->sc_pwd_len,
mbox->sc_pwd);

if (vector & RX_BA_WIN_SIZE_CHANGE_EVENT_ID) {
struct wl12xx_vif *wlvif;
struct ieee80211_vif *vif;
struct ieee80211_sta *sta;
u8 link_id = mbox->rx_ba_link_id;
u8 win_size = mbox->rx_ba_win_size;
const u8 *addr;

wlvif = wl->links[link_id].wlvif;
vif = wl12xx_wlvif_to_vif(wlvif);

/* Update RX aggregation window size and call
* MAC routine to stop active RX aggregations for this link
*/
if (wlvif->bss_type != BSS_TYPE_AP_BSS)
addr = vif->bss_conf.bssid;
else
addr = wl->links[link_id].addr;

sta = ieee80211_find_sta(vif, addr);
if (sta) {
sta->max_rx_aggregation_subframes = win_size;
ieee80211_stop_rx_ba_session(vif,
wl->links[link_id].ba_bitmap,
addr);
}
}

return 0;
}
1 change: 1 addition & 0 deletions drivers/net/wireless/ti/wl18xx/event.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ enum {
REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID = BIT(18),
DFS_CHANNELS_CONFIG_COMPLETE_EVENT = BIT(19),
PERIODIC_SCAN_REPORT_EVENT_ID = BIT(20),
RX_BA_WIN_SIZE_CHANGE_EVENT_ID = BIT(21),
SMART_CONFIG_SYNC_EVENT_ID = BIT(22),
SMART_CONFIG_DECODE_EVENT_ID = BIT(23),
TIME_SYNC_EVENT_ID = BIT(24),
Expand Down
3 changes: 2 additions & 1 deletion drivers/net/wireless/ti/wl18xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1029,7 +1029,8 @@ static int wl18xx_boot(struct wl1271 *wl)
DFS_CHANNELS_CONFIG_COMPLETE_EVENT |
SMART_CONFIG_SYNC_EVENT_ID |
SMART_CONFIG_DECODE_EVENT_ID |
TIME_SYNC_EVENT_ID;
TIME_SYNC_EVENT_ID |
RX_BA_WIN_SIZE_CHANGE_EVENT_ID;

wl->ap_event_mask = MAX_TX_FAILURE_EVENT_ID;

Expand Down

0 comments on commit d439226

Please sign in to comment.