diff options
| -rw-r--r-- | drivers/staging/brcm80211/sys/wl_mac80211.c | 12 | ||||
| -rw-r--r-- | drivers/staging/brcm80211/sys/wlc_mac80211.c | 13 | ||||
| -rw-r--r-- | drivers/staging/brcm80211/sys/wlc_pub.h | 2 |
3 files changed, 25 insertions, 2 deletions
diff --git a/drivers/staging/brcm80211/sys/wl_mac80211.c b/drivers/staging/brcm80211/sys/wl_mac80211.c index f1235884cc5d..cd8392badff0 100644 --- a/drivers/staging/brcm80211/sys/wl_mac80211.c +++ b/drivers/staging/brcm80211/sys/wl_mac80211.c | |||
| @@ -263,9 +263,7 @@ ieee_set_channel(struct ieee80211_hw *hw, struct ieee80211_channel *chan, | |||
| 263 | switch (type) { | 263 | switch (type) { |
| 264 | case NL80211_CHAN_HT20: | 264 | case NL80211_CHAN_HT20: |
| 265 | case NL80211_CHAN_NO_HT: | 265 | case NL80211_CHAN_NO_HT: |
| 266 | WL_LOCK(wl); | ||
| 267 | err = wlc_set(wl->wlc, WLC_SET_CHANNEL, chan->hw_value); | 266 | err = wlc_set(wl->wlc, WLC_SET_CHANNEL, chan->hw_value); |
| 268 | WL_UNLOCK(wl); | ||
| 269 | break; | 267 | break; |
| 270 | case NL80211_CHAN_HT40MINUS: | 268 | case NL80211_CHAN_HT40MINUS: |
| 271 | case NL80211_CHAN_HT40PLUS: | 269 | case NL80211_CHAN_HT40PLUS: |
| @@ -285,6 +283,7 @@ static int wl_ops_config(struct ieee80211_hw *hw, u32 changed) | |||
| 285 | int err = 0; | 283 | int err = 0; |
| 286 | int new_int; | 284 | int new_int; |
| 287 | 285 | ||
| 286 | WL_LOCK(wl); | ||
| 288 | if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) { | 287 | if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) { |
| 289 | WL_NONE("%s: Setting listen interval to %d\n", | 288 | WL_NONE("%s: Setting listen interval to %d\n", |
| 290 | __func__, conf->listen_interval); | 289 | __func__, conf->listen_interval); |
| @@ -341,6 +340,7 @@ static int wl_ops_config(struct ieee80211_hw *hw, u32 changed) | |||
| 341 | } | 340 | } |
| 342 | 341 | ||
| 343 | config_out: | 342 | config_out: |
| 343 | WL_UNLOCK(wl); | ||
| 344 | return err; | 344 | return err; |
| 345 | } | 345 | } |
| 346 | 346 | ||
| @@ -459,13 +459,21 @@ wl_ops_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, bool set) | |||
| 459 | 459 | ||
| 460 | static void wl_ops_sw_scan_start(struct ieee80211_hw *hw) | 460 | static void wl_ops_sw_scan_start(struct ieee80211_hw *hw) |
| 461 | { | 461 | { |
| 462 | struct wl_info *wl = hw->priv; | ||
| 462 | WL_NONE("Scan Start\n"); | 463 | WL_NONE("Scan Start\n"); |
| 464 | WL_LOCK(wl); | ||
| 465 | wlc_scan_start(wl->wlc); | ||
| 466 | WL_UNLOCK(wl); | ||
| 463 | return; | 467 | return; |
| 464 | } | 468 | } |
| 465 | 469 | ||
| 466 | static void wl_ops_sw_scan_complete(struct ieee80211_hw *hw) | 470 | static void wl_ops_sw_scan_complete(struct ieee80211_hw *hw) |
| 467 | { | 471 | { |
| 472 | struct wl_info *wl = hw->priv; | ||
| 468 | WL_NONE("Scan Complete\n"); | 473 | WL_NONE("Scan Complete\n"); |
| 474 | WL_LOCK(wl); | ||
| 475 | wlc_scan_stop(wl->wlc); | ||
| 476 | WL_UNLOCK(wl); | ||
| 469 | return; | 477 | return; |
| 470 | } | 478 | } |
| 471 | 479 | ||
diff --git a/drivers/staging/brcm80211/sys/wlc_mac80211.c b/drivers/staging/brcm80211/sys/wlc_mac80211.c index a1303863686c..e37e8058e2b8 100644 --- a/drivers/staging/brcm80211/sys/wlc_mac80211.c +++ b/drivers/staging/brcm80211/sys/wlc_mac80211.c | |||
| @@ -8461,3 +8461,16 @@ static void wlc_txq_free(struct wlc_info *wlc, struct osl_info *osh, | |||
| 8461 | 8461 | ||
| 8462 | kfree(qi); | 8462 | kfree(qi); |
| 8463 | } | 8463 | } |
| 8464 | |||
| 8465 | /* | ||
| 8466 | * Flag 'scan in progress' to withold dynamic phy calibration | ||
| 8467 | */ | ||
| 8468 | void wlc_scan_start(struct wlc_info *wlc) | ||
| 8469 | { | ||
| 8470 | wlc_phy_hold_upd(wlc->band->pi, PHY_HOLD_FOR_SCAN, true); | ||
| 8471 | } | ||
| 8472 | |||
| 8473 | void wlc_scan_stop(struct wlc_info *wlc) | ||
| 8474 | { | ||
| 8475 | wlc_phy_hold_upd(wlc->band->pi, PHY_HOLD_FOR_SCAN, false); | ||
| 8476 | } | ||
diff --git a/drivers/staging/brcm80211/sys/wlc_pub.h b/drivers/staging/brcm80211/sys/wlc_pub.h index 146a6904a39b..aff413001b70 100644 --- a/drivers/staging/brcm80211/sys/wlc_pub.h +++ b/drivers/staging/brcm80211/sys/wlc_pub.h | |||
| @@ -570,6 +570,8 @@ extern void wlc_enable_mac(struct wlc_info *wlc); | |||
| 570 | extern u16 wlc_rate_shm_offset(struct wlc_info *wlc, u8 rate); | 570 | extern u16 wlc_rate_shm_offset(struct wlc_info *wlc, u8 rate); |
| 571 | extern u32 wlc_get_rspec_history(struct wlc_bsscfg *cfg); | 571 | extern u32 wlc_get_rspec_history(struct wlc_bsscfg *cfg); |
| 572 | extern u32 wlc_get_current_highest_rate(struct wlc_bsscfg *cfg); | 572 | extern u32 wlc_get_current_highest_rate(struct wlc_bsscfg *cfg); |
| 573 | extern void wlc_scan_start(struct wlc_info *wlc); | ||
| 574 | extern void wlc_scan_stop(struct wlc_info *wlc); | ||
| 573 | 575 | ||
| 574 | static inline int wlc_iovar_getuint(struct wlc_info *wlc, const char *name, | 576 | static inline int wlc_iovar_getuint(struct wlc_info *wlc, const char *name, |
| 575 | uint *arg) | 577 | uint *arg) |
