aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/event.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/wl12xx/event.c')
-rw-r--r--drivers/net/wireless/wl12xx/event.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/drivers/net/wireless/wl12xx/event.c b/drivers/net/wireless/wl12xx/event.c
index 94bbd00ec31..a16dee58a66 100644
--- a/drivers/net/wireless/wl12xx/event.c
+++ b/drivers/net/wireless/wl12xx/event.c
@@ -133,10 +133,13 @@ static int wl1271_event_ps_report(struct wl1271 *wl,
133 if (ret < 0) 133 if (ret < 0)
134 break; 134 break;
135 135
136 /* enable beacon early termination */ 136 /*
137 ret = wl1271_acx_bet_enable(wl, true); 137 * BET has only a minor effect in 5GHz and masks
138 if (ret < 0) 138 * channel switch IEs, so we only enable BET on 2.4GHz
139 break; 139 */
140 if (wl->band == IEEE80211_BAND_2GHZ)
141 /* enable beacon early termination */
142 ret = wl1271_acx_bet_enable(wl, true);
140 143
141 if (wl->ps_compl) { 144 if (wl->ps_compl) {
142 complete(wl->ps_compl); 145 complete(wl->ps_compl);
@@ -183,6 +186,21 @@ static void wl1271_stop_ba_event(struct wl1271 *wl, u8 ba_allowed)
183 ieee80211_stop_rx_ba_session(wl->vif, wl->ba_rx_bitmap, wl->bssid); 186 ieee80211_stop_rx_ba_session(wl->vif, wl->ba_rx_bitmap, wl->bssid);
184} 187}
185 188
189static void wl12xx_event_soft_gemini_sense(struct wl1271 *wl,
190 u8 enable)
191{
192 if (enable) {
193 /* disable dynamic PS when requested by the firmware */
194 ieee80211_disable_dyn_ps(wl->vif);
195 set_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags);
196 } else {
197 ieee80211_enable_dyn_ps(wl->vif);
198 clear_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags);
199 wl1271_recalc_rx_streaming(wl);
200 }
201
202}
203
186static void wl1271_event_mbox_dump(struct event_mailbox *mbox) 204static void wl1271_event_mbox_dump(struct event_mailbox *mbox)
187{ 205{
188 wl1271_debug(DEBUG_EVENT, "MBOX DUMP:"); 206 wl1271_debug(DEBUG_EVENT, "MBOX DUMP:");
@@ -226,14 +244,10 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
226 } 244 }
227 } 245 }
228 246
229 /* disable dynamic PS when requested by the firmware */
230 if (vector & SOFT_GEMINI_SENSE_EVENT_ID && 247 if (vector & SOFT_GEMINI_SENSE_EVENT_ID &&
231 wl->bss_type == BSS_TYPE_STA_BSS) { 248 wl->bss_type == BSS_TYPE_STA_BSS)
232 if (mbox->soft_gemini_sense_info) 249 wl12xx_event_soft_gemini_sense(wl,
233 ieee80211_disable_dyn_ps(wl->vif); 250 mbox->soft_gemini_sense_info);
234 else
235 ieee80211_enable_dyn_ps(wl->vif);
236 }
237 251
238 /* 252 /*
239 * The BSS_LOSE_EVENT_ID is only needed while psm (and hence beacon 253 * The BSS_LOSE_EVENT_ID is only needed while psm (and hence beacon