Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 79383
b: refs/heads/master
c: 3c4f208
h: refs/heads/master
i:
  79381: d400c08
  79379: fe205ba
  79375: 4e4ebe2
v: v3
  • Loading branch information
Ivo van Doorn authored and David S. Miller committed Jan 28, 2008
1 parent 9c78b07 commit 30bacaa
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 38 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e37ea2135be080dd25f1a2644c9132c109fa77d1
refs/heads/master: 3c4f2085e5d82639004406795653e1e4dd6720e0
8 changes: 2 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt2400pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1422,7 +1422,6 @@ static void rt2400pci_configure_filter(struct ieee80211_hw *hw,
struct dev_addr_list *mc_list)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct interface *intf = &rt2x00dev->interface;
u32 reg;

/*
Expand All @@ -1441,21 +1440,18 @@ static void rt2400pci_configure_filter(struct ieee80211_hw *hw,
* Apply some rules to the filters:
* - Some filters imply different filters to be set.
* - Some things we can't filter out at all.
* - Some filters are set based on interface type.
*/
*total_flags |= FIF_ALLMULTI;
if (*total_flags & FIF_OTHER_BSS ||
*total_flags & FIF_PROMISC_IN_BSS)
*total_flags |= FIF_PROMISC_IN_BSS | FIF_OTHER_BSS;
if (is_interface_type(intf, IEEE80211_IF_TYPE_AP))
*total_flags |= FIF_PROMISC_IN_BSS;

/*
* Check if there is any work left for us.
*/
if (intf->filter == *total_flags)
if (rt2x00dev->packet_filter == *total_flags)
return;
intf->filter = *total_flags;
rt2x00dev->packet_filter = *total_flags;

/*
* Start configuration steps.
Expand Down
8 changes: 2 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt2500pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1751,7 +1751,6 @@ static void rt2500pci_configure_filter(struct ieee80211_hw *hw,
struct dev_addr_list *mc_list)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct interface *intf = &rt2x00dev->interface;
u32 reg;

/*
Expand All @@ -1770,22 +1769,19 @@ static void rt2500pci_configure_filter(struct ieee80211_hw *hw,
* Apply some rules to the filters:
* - Some filters imply different filters to be set.
* - Some things we can't filter out at all.
* - Some filters are set based on interface type.
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
if (*total_flags & FIF_OTHER_BSS ||
*total_flags & FIF_PROMISC_IN_BSS)
*total_flags |= FIF_PROMISC_IN_BSS | FIF_OTHER_BSS;
if (is_interface_type(intf, IEEE80211_IF_TYPE_AP))
*total_flags |= FIF_PROMISC_IN_BSS;

/*
* Check if there is any work left for us.
*/
if (intf->filter == *total_flags)
if (rt2x00dev->packet_filter == *total_flags)
return;
intf->filter = *total_flags;
rt2x00dev->packet_filter = *total_flags;

/*
* Start configuration steps.
Expand Down
8 changes: 2 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt2500usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1611,7 +1611,6 @@ static void rt2500usb_configure_filter(struct ieee80211_hw *hw,
struct dev_addr_list *mc_list)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct interface *intf = &rt2x00dev->interface;
u16 reg;

/*
Expand All @@ -1630,22 +1629,19 @@ static void rt2500usb_configure_filter(struct ieee80211_hw *hw,
* Apply some rules to the filters:
* - Some filters imply different filters to be set.
* - Some things we can't filter out at all.
* - Some filters are set based on interface type.
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
if (*total_flags & FIF_OTHER_BSS ||
*total_flags & FIF_PROMISC_IN_BSS)
*total_flags |= FIF_PROMISC_IN_BSS | FIF_OTHER_BSS;
if (is_interface_type(intf, IEEE80211_IF_TYPE_AP))
*total_flags |= FIF_PROMISC_IN_BSS;

/*
* Check if there is any work left for us.
*/
if (intf->filter == *total_flags)
if (rt2x00dev->packet_filter == *total_flags)
return;
intf->filter = *total_flags;
rt2x00dev->packet_filter = *total_flags;

/*
* When in atomic context, reschedule and let rt2x00lib
Expand Down
12 changes: 7 additions & 5 deletions trunk/drivers/net/wireless/rt2x00/rt2x00.h
Original file line number Diff line number Diff line change
Expand Up @@ -388,11 +388,6 @@ struct interface {
* BBSID of the AP to associate with.
*/
u8 bssid[ETH_ALEN];

/*
* Store the packet filter mode for the current interface.
*/
unsigned int filter;
};

static inline int is_interface_present(struct interface *intf)
Expand Down Expand Up @@ -675,6 +670,13 @@ struct rt2x00_dev {
*/
struct mutex usb_cache_mutex;

/*
* Current packet filter configuration for the device.
* This contains all currently active FIF_* flags send
* to us by mac80211 during configure_filter().
*/
unsigned int packet_filter;

/*
* Interface configuration.
*/
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/net/wireless/rt2x00/rt2x00dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,15 +417,15 @@ static void rt2x00lib_packetfilter_scheduled(struct work_struct *work)
{
struct rt2x00_dev *rt2x00dev =
container_of(work, struct rt2x00_dev, filter_work);
unsigned int filter = rt2x00dev->interface.filter;
unsigned int filter = rt2x00dev->packet_filter;

/*
* Since we had stored the filter inside interface.filter,
* we should now clear that field. Otherwise the driver will
* assume nothing has changed (*total_flags will be compared
* to interface.filter to determine if any action is required).
*/
rt2x00dev->interface.filter = 0;
rt2x00dev->packet_filter = 0;

rt2x00dev->ops->hw->configure_filter(rt2x00dev->hw,
filter, &filter, 0, NULL);
Expand Down
8 changes: 2 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt61pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -2310,7 +2310,6 @@ static void rt61pci_configure_filter(struct ieee80211_hw *hw,
struct dev_addr_list *mc_list)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct interface *intf = &rt2x00dev->interface;
u32 reg;

/*
Expand All @@ -2329,22 +2328,19 @@ static void rt61pci_configure_filter(struct ieee80211_hw *hw,
* Apply some rules to the filters:
* - Some filters imply different filters to be set.
* - Some things we can't filter out at all.
* - Some filters are set based on interface type.
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
if (*total_flags & FIF_OTHER_BSS ||
*total_flags & FIF_PROMISC_IN_BSS)
*total_flags |= FIF_PROMISC_IN_BSS | FIF_OTHER_BSS;
if (is_interface_type(intf, IEEE80211_IF_TYPE_AP))
*total_flags |= FIF_PROMISC_IN_BSS;

/*
* Check if there is any work left for us.
*/
if (intf->filter == *total_flags)
if (rt2x00dev->packet_filter == *total_flags)
return;
intf->filter = *total_flags;
rt2x00dev->packet_filter = *total_flags;

/*
* Start configuration steps.
Expand Down
8 changes: 2 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt73usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1846,7 +1846,6 @@ static void rt73usb_configure_filter(struct ieee80211_hw *hw,
struct dev_addr_list *mc_list)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct interface *intf = &rt2x00dev->interface;
u32 reg;

/*
Expand All @@ -1865,22 +1864,19 @@ static void rt73usb_configure_filter(struct ieee80211_hw *hw,
* Apply some rules to the filters:
* - Some filters imply different filters to be set.
* - Some things we can't filter out at all.
* - Some filters are set based on interface type.
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
if (*total_flags & FIF_OTHER_BSS ||
*total_flags & FIF_PROMISC_IN_BSS)
*total_flags |= FIF_PROMISC_IN_BSS | FIF_OTHER_BSS;
if (is_interface_type(intf, IEEE80211_IF_TYPE_AP))
*total_flags |= FIF_PROMISC_IN_BSS;

/*
* Check if there is any work left for us.
*/
if (intf->filter == *total_flags)
if (rt2x00dev->packet_filter == *total_flags)
return;
intf->filter = *total_flags;
rt2x00dev->packet_filter = *total_flags;

/*
* When in atomic context, reschedule and let rt2x00lib
Expand Down

0 comments on commit 30bacaa

Please sign in to comment.