diff options
Diffstat (limited to 'package/mac80211/patches/872-brcmsmac-deactivate-ucode-sending-probe-responses.patch')
-rw-r--r-- | package/mac80211/patches/872-brcmsmac-deactivate-ucode-sending-probe-responses.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/package/mac80211/patches/872-brcmsmac-deactivate-ucode-sending-probe-responses.patch b/package/mac80211/patches/872-brcmsmac-deactivate-ucode-sending-probe-responses.patch new file mode 100644 index 0000000000..9c150b1547 --- /dev/null +++ b/package/mac80211/patches/872-brcmsmac-deactivate-ucode-sending-probe-responses.patch @@ -0,0 +1,59 @@ +--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +@@ -554,6 +554,12 @@ brcms_ops_bss_info_changed(struct ieee80 + /* Beaconing should be enabled/disabled (beaconing modes) */ + brcms_err(core, "%s: Beacon enabled: %s\n", __func__, + info->enable_beacon ? "true" : "false"); ++ if (info->enable_beacon && ++ hw->wiphy->flags & WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD) { ++ brcms_c_enable_probe_resp(wl->wlc, true); ++ } else { ++ brcms_c_enable_probe_resp(wl->wlc, false); ++ } + } + + if (changed & BSS_CHANGED_CQM) { +@@ -1048,7 +1054,12 @@ static int ieee_hw_init(struct ieee80211 + hw->channel_change_time = 7 * 1000; + hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); + +- hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD; ++ /* ++ * deactivate sending probe responses by ucude, because this will ++ * cause problems when WPS is used. ++ * ++ * hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD; ++ */ + + hw->rate_control_algorithm = "minstrel_ht"; + +--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c ++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c +@@ -7484,6 +7484,17 @@ void brcms_c_set_new_probe_resp(struct b + brcms_c_update_probe_resp(wlc, false); + } + ++void brcms_c_enable_probe_resp(struct brcms_c_info *wlc, bool enable) ++{ ++ /* ++ * prevent ucode from sending probe responses by setting the timeout ++ * to 1, it can not send it in that time frame. ++ */ ++ wlc->prb_resp_timeout = enable ? BRCMS_PRB_RESP_TIMEOUT : 1; ++ brcms_b_write_shm(wlc->hw, M_PRS_MAXTIME, wlc->prb_resp_timeout); ++ /* TODO: if (enable) => also deactivate receiving of probe request */ ++} ++ + /* Write ssid into shared memory */ + static void + brcms_c_shm_ssid_upd(struct brcms_c_info *wlc, struct brcms_bss_cfg *cfg) +--- a/drivers/net/wireless/brcm80211/brcmsmac/pub.h ++++ b/drivers/net/wireless/brcm80211/brcmsmac/pub.h +@@ -338,6 +338,7 @@ extern void brcms_c_set_new_beacon(struc + u16 dtim_period); + extern void brcms_c_set_new_probe_resp(struct brcms_c_info *wlc, + struct sk_buff *probe_resp); ++extern void brcms_c_enable_probe_resp(struct brcms_c_info *wlc, bool enable); + extern void brcms_c_set_ssid(struct brcms_c_info *wlc, u8 *ssid, + size_t ssid_len); + |