|
@@ -168,6 +168,21 @@ static void wl1271_event_rssi_trigger(struct wl1271 *wl,
|
|
|
wl->last_rssi_event = event;
|
|
|
}
|
|
|
|
|
|
+static void wl1271_stop_ba_event(struct wl1271 *wl, u8 ba_allowed)
|
|
|
+{
|
|
|
+ /* Convert the value to bool */
|
|
|
+ wl->ba_allowed = !!ba_allowed;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Return in case:
|
|
|
+ * there are not BA open or the event indication is to allowed BA
|
|
|
+ */
|
|
|
+ if ((!wl->ba_rx_bitmap) || (wl->ba_allowed))
|
|
|
+ return;
|
|
|
+
|
|
|
+ ieee80211_stop_rx_ba_session(wl->vif, wl->ba_rx_bitmap, wl->bssid);
|
|
|
+}
|
|
|
+
|
|
|
static void wl1271_event_mbox_dump(struct event_mailbox *mbox)
|
|
|
{
|
|
|
wl1271_debug(DEBUG_EVENT, "MBOX DUMP:");
|
|
@@ -252,6 +267,14 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
|
|
|
wl1271_event_rssi_trigger(wl, mbox);
|
|
|
}
|
|
|
|
|
|
+ if ((vector & BA_SESSION_RX_CONSTRAINT_EVENT_ID) && !is_ap) {
|
|
|
+ wl1271_debug(DEBUG_EVENT, "BA_SESSION_RX_CONSTRAINT_EVENT_ID. "
|
|
|
+ "ba_allowed = 0x%x", mbox->ba_allowed);
|
|
|
+
|
|
|
+ if (wl->vif)
|
|
|
+ wl1271_stop_ba_event(wl, mbox->ba_allowed);
|
|
|
+ }
|
|
|
+
|
|
|
if ((vector & DUMMY_PACKET_EVENT_ID) && !is_ap) {
|
|
|
wl1271_debug(DEBUG_EVENT, "DUMMY_PACKET_ID_EVENT_ID");
|
|
|
if (wl->vif)
|