From 2959df11889901b6fd3af2b61bba8b50d8e775af Mon Sep 17 00:00:00 2001 From: Helmut Schaa Date: Sun, 11 Jul 2010 12:27:58 +0200 Subject: [PATCH] --- yaml --- r: 203547 b: refs/heads/master c: 07896fe2f4df3802a224a2ee1aad1c7345d2513c h: refs/heads/master i: 203545: 57c97a2ee600b2a59b108ffe898d9d4e9ab912d2 203543: 94d40bfd1d8ad18d2c7a925af647f896e7d96bb0 v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/rt2x00/rt2x00dev.c | 32 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e376e251547f..52cf0d6dbb53 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4dee32f51b0beba25a70e8011652858c6e55f792 +refs/heads/master: 07896fe2f4df3802a224a2ee1aad1c7345d2513c diff --git a/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c b/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c index e2557257565c..ae0adff0b832 100644 --- a/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c @@ -178,6 +178,28 @@ static void rt2x00lib_intf_scheduled(struct work_struct *work) /* * Interrupt context handlers. */ +static void rt2x00lib_bc_buffer_iter(void *data, u8 *mac, + struct ieee80211_vif *vif) +{ + struct rt2x00_dev *rt2x00dev = data; + struct sk_buff *skb; + + /* + * Only AP mode interfaces do broad- and multicast buffering + */ + if (vif->type != NL80211_IFTYPE_AP) + return; + + /* + * Send out buffered broad- and multicast frames + */ + skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif); + while (skb) { + rt2x00mac_tx(rt2x00dev->hw, skb); + skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif); + } +} + static void rt2x00lib_beacondone_iter(void *data, u8 *mac, struct ieee80211_vif *vif) { @@ -197,9 +219,15 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev) if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) return; + /* send buffered bc/mc frames out for every bssid */ ieee80211_iterate_active_interfaces(rt2x00dev->hw, - rt2x00lib_beacondone_iter, - rt2x00dev); + rt2x00lib_bc_buffer_iter, + rt2x00dev); + + /* fetch next beacon */ + ieee80211_iterate_active_interfaces(rt2x00dev->hw, + rt2x00lib_beacondone_iter, + rt2x00dev); } EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);