44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||
|
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||
|
@@ -523,6 +523,12 @@ brcms_ops_bss_info_changed(struct ieee80
|
||
|
brcms_c_set_addrmatch(wl->wlc, RCM_BSSID_OFFSET, info->bssid);
|
||
|
spin_unlock_bh(&wl->lock);
|
||
|
}
|
||
|
+ if (changed & BSS_CHANGED_SSID) {
|
||
|
+ /* BSSID changed, for whatever reason (IBSS and managed mode) */
|
||
|
+ spin_lock_bh(&wl->lock);
|
||
|
+ brcms_c_set_ssid(wl->wlc, info->ssid, info->ssid_len);
|
||
|
+ spin_unlock_bh(&wl->lock);
|
||
|
+ }
|
||
|
if (changed & BSS_CHANGED_BEACON) {
|
||
|
/* Beacon data changed, retrieve new beacon (beaconing modes) */
|
||
|
struct sk_buff *beacon;
|
||
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
|
||
|
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
|
||
|
@@ -3785,6 +3785,15 @@ static void brcms_c_set_bssid(struct brc
|
||
|
brcms_c_set_addrmatch(bsscfg->wlc, RCM_BSSID_OFFSET, bsscfg->BSSID);
|
||
|
}
|
||
|
|
||
|
+void brcms_c_set_ssid(struct brcms_c_info *wlc, u8 *ssid, size_t ssid_len)
|
||
|
+{
|
||
|
+ u8 len = min_t(u8, sizeof(wlc->bsscfg->SSID), ssid_len);
|
||
|
+ memset(wlc->bsscfg->SSID, 0, sizeof(wlc->bsscfg->SSID));
|
||
|
+
|
||
|
+ memcpy(wlc->bsscfg->SSID, ssid, len);
|
||
|
+ wlc->bsscfg->SSID_len = len;
|
||
|
+}
|
||
|
+
|
||
|
static void brcms_b_set_shortslot(struct brcms_hardware *wlc_hw, bool shortslot)
|
||
|
{
|
||
|
wlc_hw->shortslot = shortslot;
|
||
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/pub.h
|
||
|
+++ b/drivers/net/wireless/brcm80211/brcmsmac/pub.h
|
||
|
@@ -336,5 +336,7 @@ extern void brcms_c_update_beacon(struct
|
||
|
extern void brcms_c_set_new_beacon(struct brcms_c_info *wlc,
|
||
|
struct sk_buff *beacon, u16 tim_offset,
|
||
|
u16 dtim_period);
|
||
|
+extern void brcms_c_set_ssid(struct brcms_c_info *wlc, u8 *ssid,
|
||
|
+ size_t ssid_len);
|
||
|
|
||
|
#endif /* _BRCM_PUB_H_ */
|