diff options
Diffstat (limited to 'drivers/net/wireless/wl12xx/event.c')
-rw-r--r-- | drivers/net/wireless/wl12xx/event.c | 36 |
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 | ||
189 | static 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 | |||
186 | static void wl1271_event_mbox_dump(struct event_mailbox *mbox) | 204 | static 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 |