u8     reserved2[3];
 } __packed;
 
-enum hif_mac_addr_type {
-       HIF_MAC_ADDR_A1 = 0x0,
-       HIF_MAC_ADDR_A2 = 0x1,
-       HIF_MAC_ADDR_A3 = 0x2
-};
-
-struct hif_mib_mac_addr_data_frame_condition {
-       u8     condition_idx;
-       u8     address_type;
-       u8     mac_address[ETH_ALEN];
-} __packed;
-
-#define HIF_FILTER_UNICAST   0x1
-#define HIF_FILTER_MULTICAST 0x2
-#define HIF_FILTER_BROADCAST 0x4
-
-struct hif_mib_uc_mc_bc_data_frame_condition {
-       u8     condition_idx;
-       u8     allowed_frames;
-       u8     reserved[2];
-} __packed;
-
-struct hif_mib_config_data_filter {
-       u8     filter_idx;
-       u8     enable;
-       u8     reserved1[2];
-       u8     eth_type_cond;
-       u8     port_cond;
-       u8     magic_cond;
-       u8     mac_cond;
-       u8     ipv4_cond;
-       u8     ipv6_cond;
-       u8     uc_mc_bc_cond;
-       u8     reserved2;
-} __packed;
-
 struct hif_mib_set_data_filtering {
        u8     invert_matching:1;
        u8     reserved1:7;
 
        return ret;
 }
 
-int hif_set_mac_addr_condition(struct wfx_vif *wvif,
-                              int idx, const u8 *mac_addr)
-{
-       struct hif_mib_mac_addr_data_frame_condition val = {
-               .condition_idx = idx,
-               .address_type = HIF_MAC_ADDR_A1,
-       };
-
-       ether_addr_copy(val.mac_address, mac_addr);
-       return hif_write_mib(wvif->wdev, wvif->id,
-                            HIF_MIB_ID_MAC_ADDR_DATAFRAME_CONDITION,
-                            &val, sizeof(val));
-}
-
-int hif_set_uc_mc_bc_condition(struct wfx_vif *wvif, int idx, u8 allowed_frames)
-{
-       struct hif_mib_uc_mc_bc_data_frame_condition val = {
-               .condition_idx = idx,
-               .allowed_frames = allowed_frames,
-       };
-
-       return hif_write_mib(wvif->wdev, wvif->id,
-                            HIF_MIB_ID_UC_MC_BC_DATAFRAME_CONDITION,
-                            &val, sizeof(val));
-}
-
-int hif_set_config_data_filter(struct wfx_vif *wvif, bool enable, int idx,
-                              int mac_filters, int frames_types_filters)
-{
-       struct hif_mib_config_data_filter val = {
-               .enable = enable,
-               .filter_idx = idx,
-               .mac_cond = mac_filters,
-               .uc_mc_bc_cond = frames_types_filters,
-       };
-
-       return hif_write_mib(wvif->wdev, wvif->id,
-                            HIF_MIB_ID_CONFIG_DATA_FILTER, &val, sizeof(val));
-}
-
 int hif_set_data_filtering(struct wfx_vif *wvif, bool enable, bool invert)
 {
        struct hif_mib_set_data_filtering val = {
 
                             bool greenfield, bool short_preamble);
 int hif_set_tx_rate_retry_policy(struct wfx_vif *wvif,
                                 int policy_index, u8 *rates);
-int hif_set_mac_addr_condition(struct wfx_vif *wvif,
-                              int idx, const u8 *mac_addr);
-int hif_set_uc_mc_bc_condition(struct wfx_vif *wvif,
-                              int idx, u8 allowed_frames);
-int hif_set_config_data_filter(struct wfx_vif *wvif, bool enable, int idx,
-                              int mac_filters, int frames_types_filters);
 int hif_set_data_filtering(struct wfx_vif *wvif, bool enable, bool invert);
 int hif_keep_alive_period(struct wfx_vif *wvif, int period);
 int hif_set_arp_ipv4_filter(struct wfx_vif *wvif, int idx, __be32 *addr);
 
        .set_rts_threshold      = wfx_set_rts_threshold,
        .set_default_unicast_key = wfx_set_default_unicast_key,
        .bss_info_changed       = wfx_bss_info_changed,
-       .prepare_multicast      = wfx_prepare_multicast,
        .configure_filter       = wfx_configure_filter,
        .ampdu_action           = wfx_ampdu_action,
        .flush                  = wfx_flush,
 
        }
 }
 
-static void wfx_filter_mcast(struct wfx_vif *wvif, bool filter_mcast)
-{
-       int i;
-
-       // Temporary workaround for filters
-       hif_set_data_filtering(wvif, false, true);
-       return;
-
-       if (!filter_mcast) {
-               hif_set_data_filtering(wvif, false, true);
-               return;
-       }
-       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->filter_mcast_count) - 1);
-       hif_set_data_filtering(wvif, true, true);
-}
-
-u64 wfx_prepare_multicast(struct ieee80211_hw *hw,
-                         struct netdev_hw_addr_list *mc_list)
-{
-       int i;
-       struct netdev_hw_addr *ha;
-       struct wfx_vif *wvif = NULL;
-       struct wfx_dev *wdev = hw->priv;
-       int count = netdev_hw_addr_list_count(mc_list);
-
-       while ((wvif = wvif_iterate(wdev, wvif)) != NULL) {
-               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->filter_mcast_addr[i], ha->addr);
-                       i++;
-               }
-       }
-
-       return 0;
-}
-
 void wfx_configure_filter(struct ieee80211_hw *hw, unsigned int changed_flags,
                          unsigned int *total_flags, u64 unused)
 {
        struct wfx_vif *wvif = NULL;
        struct wfx_dev *wdev = hw->priv;
-       bool filter_bssid, filter_prbreq, filter_beacon, filter_mcast;
+       bool filter_bssid, filter_prbreq, filter_beacon;
 
        // Notes:
        //   - Probe responses (FIF_BCN_PRBRESP_PROMISC) are never filtered
                        filter_beacon = true;
                wfx_filter_beacon(wvif, filter_beacon);
 
-               if (*total_flags & FIF_ALLMULTI) {
-                       filter_mcast = false;
-               } else if (!wvif->filter_mcast_count) {
-                       dev_dbg(wdev->dev, "disabling unconfigured multicast filter");
-                       filter_mcast = false;
-               } else {
-                       filter_mcast = true;
-               }
-               wfx_filter_mcast(wvif, filter_mcast);
+               hif_set_data_filtering(wvif, false, true);
 
                if (*total_flags & FIF_OTHER_BSS)
                        filter_bssid = false;
 
 int wfx_set_rts_threshold(struct ieee80211_hw *hw, u32 value);
 void wfx_set_default_unicast_key(struct ieee80211_hw *hw,
                                 struct ieee80211_vif *vif, int idx);
-u64 wfx_prepare_multicast(struct ieee80211_hw *hw,
-                         struct netdev_hw_addr_list *mc_list);
 void wfx_configure_filter(struct ieee80211_hw *hw, unsigned int changed_flags,
                          unsigned int *total_flags, u64 unused);
 
 
 
        struct work_struct      update_tim_work;
 
-       int                     filter_mcast_count;
-       u8                      filter_mcast_addr[8][ETH_ALEN];
-
        unsigned long           uapsd_mask;
 
        /* avoid some operations in parallel with scan */