diff options
author | Juuso Oikarinen <juuso.oikarinen@nokia.com> | 2009-11-17 11:48:23 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-11-18 17:09:19 -0500 |
commit | 287f6f9672635f4e948c0aa96754a2ce448ebdb2 (patch) | |
tree | ab3f27db81a931c023f18d103665e012c0deb25a | |
parent | 474c48c9f2118e637477b3b1c70003cb5cbda983 (diff) |
wl1251: Enable beacon filtering with the stack
Enable beacon filtering with the mac80211 stack.
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1251.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1251_event.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1251_main.c | 12 |
3 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1251.h b/drivers/net/wireless/wl12xx/wl1251.h index 998e4b6252bd..fc2871c5a25b 100644 --- a/drivers/net/wireless/wl12xx/wl1251.h +++ b/drivers/net/wireless/wl12xx/wl1251.h | |||
@@ -374,6 +374,8 @@ struct wl1251 { | |||
374 | u8 buffer_busyword[WL1251_BUSY_WORD_LEN]; | 374 | u8 buffer_busyword[WL1251_BUSY_WORD_LEN]; |
375 | struct wl1251_rx_descriptor *rx_descriptor; | 375 | struct wl1251_rx_descriptor *rx_descriptor; |
376 | 376 | ||
377 | struct ieee80211_vif *vif; | ||
378 | |||
377 | u32 chip_id; | 379 | u32 chip_id; |
378 | char fw_ver[21]; | 380 | char fw_ver[21]; |
379 | }; | 381 | }; |
diff --git a/drivers/net/wireless/wl12xx/wl1251_event.c b/drivers/net/wireless/wl12xx/wl1251_event.c index 00076c4a8a21..18c301ddcd74 100644 --- a/drivers/net/wireless/wl12xx/wl1251_event.c +++ b/drivers/net/wireless/wl12xx/wl1251_event.c | |||
@@ -79,6 +79,13 @@ static int wl1251_event_process(struct wl1251 *wl, struct event_mailbox *mbox) | |||
79 | } | 79 | } |
80 | } | 80 | } |
81 | 81 | ||
82 | if (vector & SYNCHRONIZATION_TIMEOUT_EVENT_ID && wl->psm) { | ||
83 | wl1251_debug(DEBUG_EVENT, "SYNCHRONIZATION_TIMEOUT_EVENT"); | ||
84 | |||
85 | /* indicate to the stack, that beacons have been lost */ | ||
86 | ieee80211_beacon_loss(wl->vif); | ||
87 | } | ||
88 | |||
82 | return 0; | 89 | return 0; |
83 | } | 90 | } |
84 | 91 | ||
diff --git a/drivers/net/wireless/wl12xx/wl1251_main.c b/drivers/net/wireless/wl12xx/wl1251_main.c index d03a07e1be7c..601c43070296 100644 --- a/drivers/net/wireless/wl12xx/wl1251_main.c +++ b/drivers/net/wireless/wl12xx/wl1251_main.c | |||
@@ -509,6 +509,12 @@ static int wl1251_op_add_interface(struct ieee80211_hw *hw, | |||
509 | conf->type, conf->mac_addr); | 509 | conf->type, conf->mac_addr); |
510 | 510 | ||
511 | mutex_lock(&wl->mutex); | 511 | mutex_lock(&wl->mutex); |
512 | if (wl->vif) { | ||
513 | ret = -EBUSY; | ||
514 | goto out; | ||
515 | } | ||
516 | |||
517 | wl->vif = conf->vif; | ||
512 | 518 | ||
513 | switch (conf->type) { | 519 | switch (conf->type) { |
514 | case NL80211_IFTYPE_STATION: | 520 | case NL80211_IFTYPE_STATION: |
@@ -538,7 +544,12 @@ out: | |||
538 | static void wl1251_op_remove_interface(struct ieee80211_hw *hw, | 544 | static void wl1251_op_remove_interface(struct ieee80211_hw *hw, |
539 | struct ieee80211_if_init_conf *conf) | 545 | struct ieee80211_if_init_conf *conf) |
540 | { | 546 | { |
547 | struct wl1251 *wl = hw->priv; | ||
548 | |||
549 | mutex_lock(&wl->mutex); | ||
541 | wl1251_debug(DEBUG_MAC80211, "mac80211 remove interface"); | 550 | wl1251_debug(DEBUG_MAC80211, "mac80211 remove interface"); |
551 | wl->vif = NULL; | ||
552 | mutex_unlock(&wl->mutex); | ||
542 | } | 553 | } |
543 | 554 | ||
544 | static int wl1251_build_null_data(struct wl1251 *wl) | 555 | static int wl1251_build_null_data(struct wl1251 *wl) |
@@ -1372,6 +1383,7 @@ struct ieee80211_hw *wl1251_alloc_hw(void) | |||
1372 | wl->power_level = WL1251_DEFAULT_POWER_LEVEL; | 1383 | wl->power_level = WL1251_DEFAULT_POWER_LEVEL; |
1373 | wl->beacon_int = WL1251_DEFAULT_BEACON_INT; | 1384 | wl->beacon_int = WL1251_DEFAULT_BEACON_INT; |
1374 | wl->dtim_period = WL1251_DEFAULT_DTIM_PERIOD; | 1385 | wl->dtim_period = WL1251_DEFAULT_DTIM_PERIOD; |
1386 | wl->vif = NULL; | ||
1375 | 1387 | ||
1376 | for (i = 0; i < FW_TX_CMPLT_BLOCK_SIZE; i++) | 1388 | for (i = 0; i < FW_TX_CMPLT_BLOCK_SIZE; i++) |
1377 | wl->tx_frames[i] = NULL; | 1389 | wl->tx_frames[i] = NULL; |