From: Jérôme Pouiller <jerome.pouiller@xxxxxxxxxx> The struct wfx_grp_addr_table is only instantiated on one place. There is no justifiation for this struct. Moreover, it is not consistent with other fields related to filtering (filter_bssid, etc...). Signed-off-by: Jérôme Pouiller <jerome.pouiller@xxxxxxxxxx> --- drivers/staging/wfx/sta.c | 28 +++++++++++++--------------- drivers/staging/wfx/sta.h | 6 ------ drivers/staging/wfx/wfx.h | 4 +++- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c index 3a105d485237..70342bdd9d96 100644 --- a/drivers/staging/wfx/sta.c +++ b/drivers/staging/wfx/sta.c @@ -149,17 +149,16 @@ void wfx_update_filtering(struct wfx_vif *wvif) hif_set_data_filtering(wvif, false, true); return; - if (!wvif->mcast_filter.enable) { + if (!wvif->filter_mcast) { hif_set_data_filtering(wvif, false, true); return; } - for (i = 0; i < wvif->mcast_filter.num_addresses; i++) - hif_set_mac_addr_condition(wvif, i, - wvif->mcast_filter.address_list[i]); + for (i = 0; i < wvif->filter_mcast_count; i++) + hif_set_mac_addr_condition(wvif, i, wvif->filter_mcast_addr[i]); hif_set_uc_mc_bc_condition(wvif, 0, HIF_FILTER_UNICAST | HIF_FILTER_BROADCAST); hif_set_config_data_filter(wvif, true, 0, BIT(1), - BIT(wvif->mcast_filter.num_addresses) - 1); + BIT(wvif->filter_mcast_count) - 1); hif_set_data_filtering(wvif, true, true); } @@ -173,18 +172,17 @@ u64 wfx_prepare_multicast(struct ieee80211_hw *hw, int count = netdev_hw_addr_list_count(mc_list); while ((wvif = wvif_iterate(wdev, wvif)) != NULL) { - memset(&wvif->mcast_filter, 0x00, sizeof(wvif->mcast_filter)); - if (!count || - count > ARRAY_SIZE(wvif->mcast_filter.address_list)) + if (count > ARRAY_SIZE(wvif->filter_mcast_addr)) { + wvif->filter_mcast_count = 0; continue; + } + wvif->filter_mcast_count = count; i = 0; netdev_hw_addr_list_for_each(ha, mc_list) { - ether_addr_copy(wvif->mcast_filter.address_list[i], - ha->addr); + ether_addr_copy(wvif->filter_mcast_addr[i], ha->addr); i++; } - wvif->mcast_filter.num_addresses = count; } return 0; @@ -220,12 +218,12 @@ void wfx_configure_filter(struct ieee80211_hw *hw, wvif->filter_beacon = true; if (*total_flags & FIF_ALLMULTI) { - wvif->mcast_filter.enable = false; - } else if (!wvif->mcast_filter.num_addresses) { + wvif->filter_mcast = false; + } else if (!wvif->filter_mcast_count) { dev_dbg(wdev->dev, "disabling unconfigured multicast filter"); - wvif->mcast_filter.enable = false; + wvif->filter_mcast = false; } else { - wvif->mcast_filter.enable = true; + wvif->filter_mcast = true; } wfx_update_filtering(wvif); diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h index a90eaf5043a8..31097057563a 100644 --- a/drivers/staging/wfx/sta.h +++ b/drivers/staging/wfx/sta.h @@ -28,12 +28,6 @@ struct wfx_hif_event { struct hif_ind_event evt; }; -struct wfx_grp_addr_table { - bool enable; - int num_addresses; - u8 address_list[8][ETH_ALEN]; -}; - struct wfx_sta_priv { int link_id; int vif_id; diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h index 3941462097a4..53184fe2da4b 100644 --- a/drivers/staging/wfx/wfx.h +++ b/drivers/staging/wfx/wfx.h @@ -77,7 +77,6 @@ struct wfx_vif { u32 link_id_map; bool after_dtim_tx_allowed; - struct wfx_grp_addr_table mcast_filter; s8 wep_default_key_id; struct sk_buff *wep_pending_skb; @@ -88,6 +87,9 @@ struct wfx_vif { struct work_struct update_tim_work; + int filter_mcast_count; + u8 filter_mcast_addr[8][ETH_ALEN]; + bool filter_mcast; bool filter_bssid; bool filter_prbreq; bool filter_beacon; -- 2.25.1