aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2009-10-08 14:56:34 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-10-27 16:47:54 -0400
commitb771eee583343782c8b44d2b78cf53c29d0f3303 (patch)
tree46f851a5ebe61d838bb38153f5926deffc69f59f
parent344152361e6d14ade61d7f43678db7418cb445db (diff)
wl1271: Enable beacon filtering with the stack
Enable beacon filtering with the mac80211 stack. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/wl12xx/wl1271.h2
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_event.c14
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_main.c12
3 files changed, 22 insertions, 6 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271.h b/drivers/net/wireless/wl12xx/wl1271.h
index 34a52b33bf5d..96a581316941 100644
--- a/drivers/net/wireless/wl12xx/wl1271.h
+++ b/drivers/net/wireless/wl12xx/wl1271.h
@@ -420,6 +420,8 @@ struct wl1271 {
420 420
421 struct wl1271_fw_status *fw_status; 421 struct wl1271_fw_status *fw_status;
422 struct wl1271_tx_hw_res_if *tx_res_if; 422 struct wl1271_tx_hw_res_if *tx_res_if;
423
424 struct ieee80211_vif *vif;
423}; 425};
424 426
425int wl1271_plt_start(struct wl1271 *wl); 427int wl1271_plt_start(struct wl1271 *wl);
diff --git a/drivers/net/wireless/wl12xx/wl1271_event.c b/drivers/net/wireless/wl12xx/wl1271_event.c
index 87055f7996bc..f32927650af4 100644
--- a/drivers/net/wireless/wl12xx/wl1271_event.c
+++ b/drivers/net/wireless/wl12xx/wl1271_event.c
@@ -70,14 +70,16 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
70 return ret; 70 return ret;
71 } 71 }
72 72
73 if (vector & BSS_LOSE_EVENT_ID) { 73 /*
74 * The BSS_LOSE_EVENT_ID is only needed while psm (and hence beacon
75 * filtering) is enabled. Without PSM, the stack will receive all
76 * beacons and can detect beacon loss by itself.
77 */
78 if (vector & BSS_LOSE_EVENT_ID && wl->psm) {
74 wl1271_debug(DEBUG_EVENT, "BSS_LOSE_EVENT"); 79 wl1271_debug(DEBUG_EVENT, "BSS_LOSE_EVENT");
75 80
76 if (wl->psm_requested && wl->psm) { 81 /* indicate to the stack, that beacons have been lost */
77 ret = wl1271_ps_set_mode(wl, STATION_ACTIVE_MODE); 82 ieee80211_beacon_loss(wl->vif);
78 if (ret < 0)
79 return ret;
80 }
81 } 83 }
82 84
83 return 0; 85 return 0;
diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
index d22de23f0bce..e6f9e9b57037 100644
--- a/drivers/net/wireless/wl12xx/wl1271_main.c
+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
@@ -665,6 +665,12 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
665 conf->type, conf->mac_addr); 665 conf->type, conf->mac_addr);
666 666
667 mutex_lock(&wl->mutex); 667 mutex_lock(&wl->mutex);
668 if (wl->vif) {
669 ret = -EBUSY;
670 goto out;
671 }
672
673 wl->vif = conf->vif;
668 674
669 switch (conf->type) { 675 switch (conf->type) {
670 case NL80211_IFTYPE_STATION: 676 case NL80211_IFTYPE_STATION:
@@ -688,7 +694,12 @@ out:
688static void wl1271_op_remove_interface(struct ieee80211_hw *hw, 694static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
689 struct ieee80211_if_init_conf *conf) 695 struct ieee80211_if_init_conf *conf)
690{ 696{
697 struct wl1271 *wl = hw->priv;
698
699 mutex_lock(&wl->mutex);
691 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface"); 700 wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");
701 wl->vif = NULL;
702 mutex_unlock(&wl->mutex);
692} 703}
693 704
694#if 0 705#if 0
@@ -1382,6 +1393,7 @@ static int __devinit wl1271_probe(struct spi_device *spi)
1382 wl->dtim_period = WL1271_DEFAULT_DTIM_PERIOD; 1393 wl->dtim_period = WL1271_DEFAULT_DTIM_PERIOD;
1383 wl->basic_rate_set = WL1271_DEFAULT_BASIC_RATE_SET; 1394 wl->basic_rate_set = WL1271_DEFAULT_BASIC_RATE_SET;
1384 wl->band = IEEE80211_BAND_2GHZ; 1395 wl->band = IEEE80211_BAND_2GHZ;
1396 wl->vif = NULL;
1385 1397
1386 for (i = 0; i < ACX_TX_DESCRIPTORS; i++) 1398 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
1387 wl->tx_frames[i] = NULL; 1399 wl->tx_frames[i] = NULL;