* - Some filters are set based on interface type.
*/
*total_flags |= FIF_ALLMULTI;
- if (changed_flags & FIF_OTHER_BSS ||
- changed_flags & FIF_PROMISC_IN_BSS)
+ 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;
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
- if (changed_flags & FIF_OTHER_BSS ||
- changed_flags & FIF_PROMISC_IN_BSS)
+ 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;
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
- if (changed_flags & FIF_OTHER_BSS ||
- changed_flags & FIF_PROMISC_IN_BSS)
+ 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;
*/
void (*config_mac_addr) (struct rt2x00_dev *rt2x00dev, __le32 *mac);
void (*config_bssid) (struct rt2x00_dev *rt2x00dev, __le32 *bssid);
- void (*config_packet_filter) (struct rt2x00_dev *rt2x00dev,
- const unsigned int filter);
void (*config_type) (struct rt2x00_dev *rt2x00dev, const int type);
void (*config) (struct rt2x00_dev *rt2x00dev, const unsigned int flags,
struct ieee80211_conf *conf);
{
struct rt2x00_dev *rt2x00dev =
container_of(work, struct rt2x00_dev, filter_work);
+ unsigned int filter = rt2x00dev->interface.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->ops->hw->configure_filter(rt2x00dev->hw,
- rt2x00dev->interface.filter,
- &rt2x00dev->interface.filter,
- 0, NULL);
+ filter, &filter, 0, NULL);
}
/*
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
- if (changed_flags & FIF_OTHER_BSS ||
- changed_flags & FIF_PROMISC_IN_BSS)
+ 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;
*/
if (mc_count)
*total_flags |= FIF_ALLMULTI;
- if (changed_flags & FIF_OTHER_BSS ||
- changed_flags & FIF_PROMISC_IN_BSS)
+ 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;