new_flags = 0;
 
-       if (*total_flags & FIF_PROMISC_IN_BSS) {
-               new_flags |= FIF_PROMISC_IN_BSS;
-               priv->nar |= ADM8211_NAR_PR;
-               priv->nar &= ~ADM8211_NAR_MM;
-               mc_filter[1] = mc_filter[0] = ~0;
-       } else if (*total_flags & FIF_ALLMULTI || multicast == ~(0ULL)) {
+       if (*total_flags & FIF_ALLMULTI || multicast == ~(0ULL)) {
                new_flags |= FIF_ALLMULTI;
                priv->nar &= ~ADM8211_NAR_PR;
                priv->nar |= ADM8211_NAR_MM;
 
        int mac80211_registered;
 };
 
-#define AT76_SUPPORTED_FILTERS FIF_PROMISC_IN_BSS
+#define AT76_SUPPORTED_FILTERS 0
 
 #define SCAN_POLL_INTERVAL     (HZ / 4)
 
 
 
 }
 
-#define AR5523_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
-                                 FIF_ALLMULTI | \
+#define AR5523_SUPPORTED_FILTERS (FIF_ALLMULTI | \
                                  FIF_FCSFAIL | \
                                  FIF_OTHER_BSS)
 
 
        lockdep_assert_held(&ar->conf_mutex);
 
        should_start = ar->monitor ||
-                      ar->filter_flags & FIF_PROMISC_IN_BSS ||
                       test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
 
        ath10k_dbg(ar, ATH10K_DBG_MAC,
  * FIXME: Has to be verified.
  */
 #define SUPPORTED_FILTERS                      \
-       (FIF_PROMISC_IN_BSS |                   \
-       FIF_ALLMULTI |                          \
+       (FIF_ALLMULTI |                         \
        FIF_CONTROL |                           \
        FIF_PSPOLL |                            \
        FIF_OTHER_BSS |                         \
 
 
        DECLARE_BITMAP(status, 4);
 #define ATH_STAT_INVALID       0               /* disable hardware accesses */
-#define ATH_STAT_PROMISC       1
 #define ATH_STAT_LEDSOFT       2               /* enable LED gpio status */
 #define ATH_STAT_STARTED       3               /* opened & irqs enabled */
 #define ATH_STAT_RESET         4               /* hw reset */
 
                       unsigned int *new_flags, u64 multicast)
 {
 #define SUPPORTED_FIF_FLAGS \
-       (FIF_PROMISC_IN_BSS |  FIF_ALLMULTI | FIF_FCSFAIL | \
+       (FIF_ALLMULTI | FIF_FCSFAIL | \
        FIF_PLCPFAIL | FIF_CONTROL | FIF_OTHER_BSS | \
        FIF_BCN_PRBRESP_PROMISC)
 
                (AR5K_RX_FILTER_UCAST | AR5K_RX_FILTER_BCAST |
                AR5K_RX_FILTER_MCAST);
 
-       if (changed_flags & (FIF_PROMISC_IN_BSS | FIF_OTHER_BSS)) {
-               if (*new_flags & FIF_PROMISC_IN_BSS)
-                       __set_bit(ATH_STAT_PROMISC, ah->status);
-               else
-                       __clear_bit(ATH_STAT_PROMISC, ah->status);
-       }
-
-       if (test_bit(ATH_STAT_PROMISC, ah->status))
-               rfilt |= AR5K_RX_FILTER_PROM;
-
        /* Note, AR5K_RX_FILTER_MCAST is already enabled */
        if (*new_flags & FIF_ALLMULTI) {
                mfilt[0] =  ~0;
        if ((*new_flags & FIF_BCN_PRBRESP_PROMISC) || (ah->nvifs > 1))
                rfilt |= AR5K_RX_FILTER_BEACON;
 
-       /* FIF_CONTROL doc says that if FIF_PROMISC_IN_BSS is not
-        * set we should only pass on control frames for this
+       /* FIF_CONTROL doc says we should only pass on control frames for this
         * station. This needs testing. I believe right now this
         * enables *all* control frames, which is OK.. but
         * but we should see if we can improve on granularity */
 
 }
 
 #define SUPPORTED_FILTERS                      \
-       (FIF_PROMISC_IN_BSS |                   \
-       FIF_ALLMULTI |                          \
+       (FIF_ALLMULTI |                         \
        FIF_CONTROL |                           \
        FIF_PSPOLL |                            \
        FIF_OTHER_BSS |                         \
 
        if (priv->rxfilter & FIF_PROBE_REQ)
                rfilt |= ATH9K_RX_FILTER_PROBEREQ;
 
-       /*
-        * Set promiscuous mode when FIF_PROMISC_IN_BSS is enabled for station
-        * mode interface or when in monitor mode. AP mode does not need this
-        * since it receives all in-BSS frames anyway.
-        */
-       if (((ah->opmode != NL80211_IFTYPE_AP) &&
-            (priv->rxfilter & FIF_PROMISC_IN_BSS)) ||
-           ah->is_monitoring)
+       if (ah->is_monitoring)
                rfilt |= ATH9K_RX_FILTER_PROM;
 
        if (priv->rxfilter & FIF_CONTROL)
 
 }
 
 #define SUPPORTED_FILTERS                      \
-       (FIF_PROMISC_IN_BSS |                   \
-       FIF_ALLMULTI |                          \
+       (FIF_ALLMULTI |                         \
        FIF_CONTROL |                           \
        FIF_PSPOLL |                            \
        FIF_OTHER_BSS |                         \
 
        if (sc->cur_chan->rxfilter & FIF_PROBE_REQ)
                rfilt |= ATH9K_RX_FILTER_PROBEREQ;
 
-       /*
-        * Set promiscuous mode when FIF_PROMISC_IN_BSS is enabled for station
-        * mode interface or when in monitor mode. AP mode does not need this
-        * since it receives all in-BSS frames anyway.
-        */
        if (sc->sc_ah->is_monitoring)
                rfilt |= ATH9K_RX_FILTER_PROM;
 
 
        if (SUPP(CARL9170FW_RX_FILTER)) {
                ar->fw.rx_filter = true;
                ar->rx_filter_caps = FIF_FCSFAIL | FIF_PLCPFAIL |
-                       FIF_CONTROL | FIF_PSPOLL | FIF_OTHER_BSS |
-                       FIF_PROMISC_IN_BSS;
+                       FIF_CONTROL | FIF_PSPOLL | FIF_OTHER_BSS;
        }
 
        if (SUPP(CARL9170FW_HW_COUNTERS))
 
        if (multicast != ar->cur_mc_hash)
                WARN_ON(carl9170_update_multicast(ar, multicast));
 
-       if (changed_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS)) {
-               ar->sniffer_enabled = !!(*new_flags &
-                       (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS));
+       if (changed_flags & FIF_OTHER_BSS) {
+               ar->sniffer_enabled = !!(*new_flags & FIF_OTHER_BSS);
 
                WARN_ON(carl9170_set_operating_mode(ar));
        }
                if (!(*new_flags & FIF_PSPOLL))
                        rx_filter |= CARL9170_RX_FILTER_CTL_PSPOLL;
 
-               if (!(*new_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS))) {
+               if (!(*new_flags & FIF_OTHER_BSS)) {
                        rx_filter |= CARL9170_RX_FILTER_OTHER_RA;
                        rx_filter |= CARL9170_RX_FILTER_DECRY_FAIL;
                }
 
                ctl |= B43_MACCTL_KEEP_BAD;
        if (wl->filter_flags & FIF_PLCPFAIL)
                ctl |= B43_MACCTL_KEEP_BADPLCP;
-       if (wl->filter_flags & FIF_PROMISC_IN_BSS)
-               ctl |= B43_MACCTL_PROMISC;
        if (wl->filter_flags & FIF_BCN_PRBRESP_PROMISC)
                ctl |= B43_MACCTL_BEACPROMISC;
 
                goto out_unlock;
        }
 
-       *fflags &= FIF_PROMISC_IN_BSS |
-                 FIF_ALLMULTI |
+       *fflags &= FIF_ALLMULTI |
                  FIF_FCSFAIL |
                  FIF_PLCPFAIL |
                  FIF_CONTROL |
                  FIF_OTHER_BSS |
                  FIF_BCN_PRBRESP_PROMISC;
 
-       changed &= FIF_PROMISC_IN_BSS |
-                  FIF_ALLMULTI |
+       changed &= FIF_ALLMULTI |
                   FIF_FCSFAIL |
                   FIF_PLCPFAIL |
                   FIF_CONTROL |
 
                ctl |= B43legacy_MACCTL_KEEP_BAD;
        if (wl->filter_flags & FIF_PLCPFAIL)
                ctl |= B43legacy_MACCTL_KEEP_BADPLCP;
-       if (wl->filter_flags & FIF_PROMISC_IN_BSS)
-               ctl |= B43legacy_MACCTL_PROMISC;
        if (wl->filter_flags & FIF_BCN_PRBRESP_PROMISC)
                ctl |= B43legacy_MACCTL_BEACPROMISC;
 
        }
 
        spin_lock_irqsave(&wl->irq_lock, flags);
-       *fflags &= FIF_PROMISC_IN_BSS |
-                 FIF_ALLMULTI |
+       *fflags &= FIF_ALLMULTI |
                  FIF_FCSFAIL |
                  FIF_PLCPFAIL |
                  FIF_CONTROL |
                  FIF_OTHER_BSS |
                  FIF_BCN_PRBRESP_PROMISC;
 
-       changed &= FIF_PROMISC_IN_BSS |
-                  FIF_ALLMULTI |
+       changed &= FIF_ALLMULTI |
                   FIF_FCSFAIL |
                   FIF_PLCPFAIL |
                   FIF_CONTROL |
 
 #define BRCMS_FLUSH_TIMEOUT    500 /* msec */
 
 /* Flags we support */
-#define MAC_FILTERS (FIF_PROMISC_IN_BSS | \
-       FIF_ALLMULTI | \
+#define MAC_FILTERS (FIF_ALLMULTI | \
        FIF_FCSFAIL | \
        FIF_CONTROL | \
        FIF_OTHER_BSS | \
        changed_flags &= MAC_FILTERS;
        *total_flags &= MAC_FILTERS;
 
-       if (changed_flags & FIF_PROMISC_IN_BSS)
-               brcms_dbg_info(core, "FIF_PROMISC_IN_BSS\n");
        if (changed_flags & FIF_ALLMULTI)
                brcms_dbg_info(core, "FIF_ALLMULTI\n");
        if (changed_flags & FIF_FCSFAIL)
 
 
        wlc->filter_flags = filter_flags;
 
-       if (filter_flags & (FIF_PROMISC_IN_BSS | FIF_OTHER_BSS))
+       if (filter_flags & FIF_OTHER_BSS)
                promisc_bits |= MCTL_PROMISC;
 
        if (filter_flags & FIF_BCN_PRBRESP_PROMISC)
 
 {
        struct cw1200_common *priv = dev->priv;
        bool listening = !!(*total_flags &
-                           (FIF_PROMISC_IN_BSS |
-                            FIF_OTHER_BSS |
+                           (FIF_OTHER_BSS |
                             FIF_BCN_PRBRESP_PROMISC |
                             FIF_PROBE_REQ));
 
-       *total_flags &= FIF_PROMISC_IN_BSS |
-                       FIF_OTHER_BSS |
+       *total_flags &= FIF_OTHER_BSS |
                        FIF_FCSFAIL |
                        FIF_BCN_PRBRESP_PROMISC |
                        FIF_PROBE_REQ;
        down(&priv->scan.lock);
        mutex_lock(&priv->conf_mutex);
 
-       priv->rx_filter.promiscuous = (*total_flags & FIF_PROMISC_IN_BSS)
-                       ? 1 : 0;
+       priv->rx_filter.promiscuous = 0;
        priv->rx_filter.bssid = (*total_flags & (FIF_OTHER_BSS |
                        FIF_PROBE_REQ)) ? 1 : 0;
        priv->rx_filter.fcs = (*total_flags & FIF_FCSFAIL) ? 1 : 0;
        priv->disable_beacon_filter = !(*total_flags &
                                        (FIF_BCN_PRBRESP_PROMISC |
-                                        FIF_PROMISC_IN_BSS |
                                         FIF_PROBE_REQ));
        if (priv->listening != listening) {
                priv->listening = listening;
 
        D_MAC80211("Enter: changed: 0x%x, total: 0x%x\n", changed_flags,
                   *total_flags);
 
-       CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
+       CHK(FIF_OTHER_BSS, RXON_FILTER_PROMISC_MSK);
        CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK);
        CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
 
         * filters into the device.
         */
        *total_flags &=
-           FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
+           FIF_OTHER_BSS | FIF_ALLMULTI |
            FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
 }
 
 
        D_MAC80211("Enter: changed: 0x%x, total: 0x%x\n", changed_flags,
                   *total_flags);
 
-       CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
+       CHK(FIF_OTHER_BSS, RXON_FILTER_PROMISC_MSK);
        /* Setting _just_ RXON_FILTER_CTL2HOST_MSK causes FH errors */
        CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK | RXON_FILTER_PROMISC_MSK);
        CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
         * filters into the device.
         */
        *total_flags &=
-           FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
+           FIF_OTHER_BSS | FIF_ALLMULTI |
            FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
 }
 
 
        IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n",
                        changed_flags, *total_flags);
 
-       CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK);
+       CHK(FIF_OTHER_BSS, RXON_FILTER_PROMISC_MSK);
        /* Setting _just_ RXON_FILTER_CTL2HOST_MSK causes FH errors */
        CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK | RXON_FILTER_PROMISC_MSK);
        CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK);
         * since we currently do not support programming multicast
         * filters into the device.
         */
-       *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
+       *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI |
                        FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
 }
 
 
        return mc_count;
 }
 
-#define SUPPORTED_FIF_FLAGS  (FIF_PROMISC_IN_BSS | FIF_ALLMULTI)
+#define SUPPORTED_FIF_FLAGS  FIF_ALLMULTI
 static void lbtf_op_configure_filter(struct ieee80211_hw *hw,
                        unsigned int changed_flags,
                        unsigned int *new_flags,
                return;
        }
 
-       if (*new_flags & (FIF_PROMISC_IN_BSS))
-               priv->mac_control |= CMD_ACT_MAC_PROMISCUOUS_ENABLE;
-       else
-               priv->mac_control &= ~CMD_ACT_MAC_PROMISCUOUS_ENABLE;
+       priv->mac_control &= ~CMD_ACT_MAC_PROMISCUOUS_ENABLE;
        if (*new_flags & (FIF_ALLMULTI) ||
            multicast > MRVDRV_MAX_MULTICAST_LIST_SIZE) {
                priv->mac_control |= CMD_ACT_MAC_ALL_MULTICAST_ENABLE;
 
        wiphy_debug(hw->wiphy, "%s\n", __func__);
 
        data->rx_filter = 0;
-       if (*total_flags & FIF_PROMISC_IN_BSS)
-               data->rx_filter |= FIF_PROMISC_IN_BSS;
        if (*total_flags & FIF_ALLMULTI)
                data->rx_filter |= FIF_ALLMULTI;
 
 
                priv->sniffer_enabled = true;
        }
 
-       *total_flags &= FIF_PROMISC_IN_BSS | FIF_ALLMULTI |
+       *total_flags &= FIF_ALLMULTI |
                        FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL |
                        FIF_OTHER_BSS;
 
 
                 * "TRANSPARENT and PROMISCUOUS are mutually exclusive"
                 * STSW45X0C LMAC API - page 12
                 */
-               if (((priv->filter_flags & FIF_PROMISC_IN_BSS) ||
-                    (priv->filter_flags & FIF_OTHER_BSS)) &&
+               if (priv->filter_flags & FIF_OTHER_BSS &&
                    (mode != P54_FILTER_TYPE_PROMISCUOUS))
                        mode |= P54_FILTER_TYPE_TRANSPARENT;
        } else {
 
 {
        struct p54_common *priv = dev->priv;
 
-       *total_flags &= FIF_PROMISC_IN_BSS |
-                       FIF_ALLMULTI |
-                       FIF_OTHER_BSS;
+       *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS;
 
        priv->filter_flags = *total_flags;
 
-       if (changed_flags & (FIF_PROMISC_IN_BSS | FIF_OTHER_BSS))
+       if (changed_flags & FIF_OTHER_BSS)
                p54_setup_mac(priv);
 
        if (changed_flags & FIF_ALLMULTI || multicast)
 
                           !(filter_flags & FIF_PLCPFAIL));
        rt2x00_set_field32(®, RXCSR0_DROP_CONTROL,
                           !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
+       rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME, 1);
        rt2x00_set_field32(®, RXCSR0_DROP_TODS,
-                          !(filter_flags & FIF_PROMISC_IN_BSS) &&
                           !rt2x00dev->intf_ap_count);
        rt2x00_set_field32(®, RXCSR0_DROP_VERSION_ERROR, 1);
        rt2x00mmio_register_write(rt2x00dev, RXCSR0, reg);
 
                           !(filter_flags & FIF_PLCPFAIL));
        rt2x00_set_field32(®, RXCSR0_DROP_CONTROL,
                           !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
+       rt2x00_set_field32(®, RXCSR0_DROP_NOT_TO_ME, 1);
        rt2x00_set_field32(®, RXCSR0_DROP_TODS,
-                          !(filter_flags & FIF_PROMISC_IN_BSS) &&
                           !rt2x00dev->intf_ap_count);
        rt2x00_set_field32(®, RXCSR0_DROP_VERSION_ERROR, 1);
        rt2x00_set_field32(®, RXCSR0_DROP_MCAST,
 
                           !(filter_flags & FIF_PLCPFAIL));
        rt2x00_set_field16(®, TXRX_CSR2_DROP_CONTROL,
                           !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field16(®, TXRX_CSR2_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
+       rt2x00_set_field16(®, TXRX_CSR2_DROP_NOT_TO_ME, 1);
        rt2x00_set_field16(®, TXRX_CSR2_DROP_TODS,
-                          !(filter_flags & FIF_PROMISC_IN_BSS) &&
                           !rt2x00dev->intf_ap_count);
        rt2x00_set_field16(®, TXRX_CSR2_DROP_VERSION_ERROR, 1);
        rt2x00_set_field16(®, TXRX_CSR2_DROP_MULTICAST,
 
                           !(filter_flags & FIF_FCSFAIL));
        rt2x00_set_field32(®, RX_FILTER_CFG_DROP_PHY_ERROR,
                           !(filter_flags & FIF_PLCPFAIL));
-       rt2x00_set_field32(®, RX_FILTER_CFG_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
+       rt2x00_set_field32(®, RX_FILTER_CFG_DROP_NOT_TO_ME, 1);
        rt2x00_set_field32(®, RX_FILTER_CFG_DROP_NOT_MY_BSSD, 0);
        rt2x00_set_field32(®, RX_FILTER_CFG_DROP_VER_ERROR, 1);
        rt2x00_set_field32(®, RX_FILTER_CFG_DROP_MULTICAST,
 
            FIF_PLCPFAIL |
            FIF_CONTROL |
            FIF_PSPOLL |
-           FIF_OTHER_BSS |
-           FIF_PROMISC_IN_BSS;
+           FIF_OTHER_BSS;
 
        /*
         * Apply some rules to the filters:
         * - Multicast filter seems to kill broadcast traffic so never use it.
         */
        *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 the device has a single filter for all control frames,
 
                           !(filter_flags & FIF_PLCPFAIL));
        rt2x00_set_field32(®, TXRX_CSR0_DROP_CONTROL,
                           !(filter_flags & (FIF_CONTROL | FIF_PSPOLL)));
-       rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
+       rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME, 1);
        rt2x00_set_field32(®, TXRX_CSR0_DROP_TO_DS,
-                          !(filter_flags & FIF_PROMISC_IN_BSS) &&
                           !rt2x00dev->intf_ap_count);
        rt2x00_set_field32(®, TXRX_CSR0_DROP_VERSION_ERROR, 1);
        rt2x00_set_field32(®, TXRX_CSR0_DROP_MULTICAST,
 
                           !(filter_flags & FIF_PLCPFAIL));
        rt2x00_set_field32(®, TXRX_CSR0_DROP_CONTROL,
                           !(filter_flags & (FIF_CONTROL | FIF_PSPOLL)));
-       rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
+       rt2x00_set_field32(®, TXRX_CSR0_DROP_NOT_TO_ME, 1);
        rt2x00_set_field32(®, TXRX_CSR0_DROP_TO_DS,
-                          !(filter_flags & FIF_PROMISC_IN_BSS) &&
                           !rt2x00dev->intf_ap_count);
        rt2x00_set_field32(®, TXRX_CSR0_DROP_VERSION_ERROR, 1);
        rt2x00_set_field32(®, TXRX_CSR0_DROP_MULTICAST,
 
 #define __RTL_CORE_H__
 
 #define RTL_SUPPORTED_FILTERS          \
-       (FIF_PROMISC_IN_BSS | \
-       FIF_ALLMULTI | FIF_CONTROL | \
+       (FIF_ALLMULTI | FIF_CONTROL | \
        FIF_OTHER_BSS | \
        FIF_FCSFAIL | \
        FIF_BCN_PRBRESP_PROMISC)
 
        return (u64)(unsigned long)fp;
 }
 
-#define WL1251_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
-                                 FIF_ALLMULTI | \
+#define WL1251_SUPPORTED_FILTERS (FIF_ALLMULTI | \
                                  FIF_FCSFAIL | \
                                  FIF_BCN_PRBRESP_PROMISC | \
                                  FIF_CONTROL | \
        wl->rx_config = WL1251_DEFAULT_RX_CONFIG;
        wl->rx_filter = WL1251_DEFAULT_RX_FILTER;
 
-       if (*total & FIF_PROMISC_IN_BSS) {
-               wl->rx_config |= CFG_BSSID_FILTER_EN;
-               wl->rx_config |= CFG_RX_ALL_GOOD;
-       }
        if (*total & FIF_ALLMULTI)
                /*
                 * CFG_MC_FILTER_EN in rx_config needs to be 0 to receive
        if (ret < 0)
                goto out;
 
-       if (*total & FIF_ALLMULTI || *total & FIF_PROMISC_IN_BSS)
+       if (*total & FIF_ALLMULTI)
                ret = wl1251_acx_group_address_tbl(wl, false, NULL, 0);
        else if (fp)
                ret = wl1251_acx_group_address_tbl(wl, fp->enabled,
 
        return (u64)(unsigned long)fp;
 }
 
-#define WL1271_SUPPORTED_FILTERS (FIF_PROMISC_IN_BSS | \
-                                 FIF_ALLMULTI | \
+#define WL1271_SUPPORTED_FILTERS (FIF_ALLMULTI | \
                                  FIF_FCSFAIL | \
                                  FIF_BCN_PRBRESP_PROMISC | \
                                  FIF_CONTROL | \
 
 }
 
 #define SUPPORTED_FIF_FLAGS \
-       (FIF_PROMISC_IN_BSS | FIF_ALLMULTI | FIF_FCSFAIL | FIF_CONTROL | \
+       (FIF_ALLMULTI | FIF_FCSFAIL | FIF_CONTROL | \
        FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC)
 static void zd_op_configure_filter(struct ieee80211_hw *hw,
                        unsigned int changed_flags,
         * we will have some issue with IPv6 which uses multicast for link
         * layer address resolution.
         */
-       if (*new_flags & (FIF_PROMISC_IN_BSS | FIF_ALLMULTI))
+       if (*new_flags & FIF_ALLMULTI)
                zd_mc_add_all(&hash);
 
        spin_lock_irqsave(&mac->lock, flags);
 
        struct vnt_private *priv = hw->priv;
        u8 rx_mode = 0;
 
-       *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_PROMISC_IN_BSS |
-               FIF_BCN_PRBRESP_PROMISC;
+       *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC;
 
        VNSvInPortB(priv->PortOffset + MAC_REG_RCR, &rx_mode);
 
        dev_dbg(&priv->pcid->dev, "rx mode in = %x\n", rx_mode);
 
-       if (changed_flags & FIF_PROMISC_IN_BSS) {
-               /* unconditionally log net taps */
-               if (*total_flags & FIF_PROMISC_IN_BSS)
-                       rx_mode |= RCR_UNICAST;
-               else
-                       rx_mode &= ~RCR_UNICAST;
-       }
-
        if (changed_flags & FIF_ALLMULTI) {
                if (*total_flags & FIF_ALLMULTI) {
                        unsigned long flags;
 
        u8 rx_mode = 0;
        int rc;
 
-       *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_PROMISC_IN_BSS |
-               FIF_BCN_PRBRESP_PROMISC;
+       *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC;
 
        rc = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_RCR,
                MESSAGE_REQUEST_MACREG, sizeof(u8), &rx_mode);
 
        dev_dbg(&priv->usb->dev, "rx mode in = %x\n", rx_mode);
 
-       if (changed_flags & FIF_PROMISC_IN_BSS) {
-               /* unconditionally log net taps */
-               if (*total_flags & FIF_PROMISC_IN_BSS)
-                       rx_mode |= RCR_UNICAST;
-               else
-                       rx_mode &= ~RCR_UNICAST;
-       }
-
        if (changed_flags & FIF_ALLMULTI) {
                if (*total_flags & FIF_ALLMULTI) {
                        if (priv->mc_list_count > 2)
 
  * stack. It is always safe to pass more frames than requested,
  * but this has negative impact on power consumption.
  *
- * @FIF_PROMISC_IN_BSS: promiscuous mode within your BSS,
- *     think of the BSS as your network segment and then this corresponds
- *     to the regular ethernet device promiscuous mode.
- *
  * @FIF_ALLMULTI: pass all multicast frames, this is used if requested
  *     by the user or if the hardware is not capable of filtering by
  *     multicast address.
  *     mac80211 needs to do and the amount of CPU wakeups, so you should
  *     honour this flag if possible.
  *
- * @FIF_CONTROL: pass control frames (except for PS Poll), if PROMISC_IN_BSS
- *     is not set then only those addressed to this station.
+ * @FIF_CONTROL: pass control frames (except for PS Poll) addressed to this
+ *     station
  *
  * @FIF_OTHER_BSS: pass frames destined to other BSSes
  *
  * @FIF_PROBE_REQ: pass probe request frames
  */
 enum ieee80211_filter_flags {
-       FIF_PROMISC_IN_BSS      = 1<<0,
        FIF_ALLMULTI            = 1<<1,
        FIF_FCSFAIL             = 1<<2,
        FIF_PLCPFAIL            = 1<<3,
 
  * enum ieee80211_sub_if_data_flags - virtual interface flags
  *
  * @IEEE80211_SDATA_ALLMULTI: interface wants all multicast packets
- * @IEEE80211_SDATA_PROMISC: interface is promisc
  * @IEEE80211_SDATA_OPERATING_GMODE: operating in G-only mode
  * @IEEE80211_SDATA_DONT_BRIDGE_PACKETS: bridge packets between
  *     associated stations and deliver multicast frames both
  */
 enum ieee80211_sub_if_data_flags {
        IEEE80211_SDATA_ALLMULTI                = BIT(0),
-       IEEE80211_SDATA_PROMISC                 = BIT(1),
        IEEE80211_SDATA_OPERATING_GMODE         = BIT(2),
        IEEE80211_SDATA_DONT_BRIDGE_PACKETS     = BIT(3),
        IEEE80211_SDATA_DISCONNECT_RESUME       = BIT(4),
 
        atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
 
-       /* number of interfaces with corresponding IFF_ flags */
-       atomic_t iff_allmultis, iff_promiscs;
+       /* number of interfaces with allmulti RX */
+       atomic_t iff_allmultis;
 
        struct rate_control_ref *rate_ctrl;
 
 
        if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
                atomic_inc(&local->iff_allmultis);
 
-       if (sdata->flags & IEEE80211_SDATA_PROMISC)
-               atomic_inc(&local->iff_promiscs);
-
        if (coming_up)
                local->open_count++;
 
        WARN_ON_ONCE((sdata->vif.type != NL80211_IFTYPE_WDS && flushed > 0) ||
                     (sdata->vif.type == NL80211_IFTYPE_WDS && flushed != 1));
 
-       /* don't count this interface for promisc/allmulti while it is down */
+       /* don't count this interface for allmulti while it is down */
        if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
                atomic_dec(&local->iff_allmultis);
 
-       if (sdata->flags & IEEE80211_SDATA_PROMISC)
-               atomic_dec(&local->iff_promiscs);
-
        if (sdata->vif.type == NL80211_IFTYPE_AP) {
                local->fif_pspoll--;
                local->fif_probe_req--;
 {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        struct ieee80211_local *local = sdata->local;
-       int allmulti, promisc, sdata_allmulti, sdata_promisc;
+       int allmulti, sdata_allmulti;
 
        allmulti = !!(dev->flags & IFF_ALLMULTI);
-       promisc = !!(dev->flags & IFF_PROMISC);
        sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI);
-       sdata_promisc = !!(sdata->flags & IEEE80211_SDATA_PROMISC);
 
        if (allmulti != sdata_allmulti) {
                if (dev->flags & IFF_ALLMULTI)
                sdata->flags ^= IEEE80211_SDATA_ALLMULTI;
        }
 
-       if (promisc != sdata_promisc) {
-               if (dev->flags & IFF_PROMISC)
-                       atomic_inc(&local->iff_promiscs);
-               else
-                       atomic_dec(&local->iff_promiscs);
-               sdata->flags ^= IEEE80211_SDATA_PROMISC;
-       }
        spin_lock_bh(&local->filter_lock);
        __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
        spin_unlock_bh(&local->filter_lock);
 
        unsigned int changed_flags;
        unsigned int new_flags = 0;
 
-       if (atomic_read(&local->iff_promiscs))
-               new_flags |= FIF_PROMISC_IN_BSS;
-
        if (atomic_read(&local->iff_allmultis))
                new_flags |= FIF_ALLMULTI;
 
 
        IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
        ieee80211_add_pending_skb(local, fwd_skb);
  out:
-       if (is_multicast_ether_addr(hdr->addr1) ||
-           sdata->dev->flags & IFF_PROMISC)
+       if (is_multicast_ether_addr(hdr->addr1))
                return RX_CONTINUE;
-       else
-               return RX_DROP_MONITOR;
+       return RX_DROP_MONITOR;
 }
 #endif
 
                if (!bssid && !sdata->u.mgd.use_4addr)
                        return false;
                if (!multicast &&
-                   !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
-                       if (!(sdata->dev->flags & IFF_PROMISC) ||
-                           sdata->u.mgd.use_4addr)
-                               return false;
-                       status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
-               }
+                   !ether_addr_equal(sdata->vif.addr, hdr->addr1))
+                       return false;
                break;
        case NL80211_IFTYPE_ADHOC:
                if (!bssid)
                        return false;
                } else if (!multicast &&
                           !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
-                       if (!(sdata->dev->flags & IFF_PROMISC))
-                               return false;
-                       status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
+                       return false;
                } else if (!rx->sta) {
                        int rate_idx;
                        if (status->flag & (RX_FLAG_HT | RX_FLAG_VHT))
                } else if (!multicast &&
                           !ether_addr_equal(sdata->dev->dev_addr,
                                             hdr->addr1)) {
-                       /* if we are in promisc mode we also accept
-                        * packets not destined for us
-                        */
-                       if (!(sdata->dev->flags & IFF_PROMISC))
-                               return false;
-                       rx->flags &= ~IEEE80211_RX_RA_MATCH;
+                       return false;
                } else if (!rx->sta) {
                        int rate_idx;
                        if (status->flag & RX_FLAG_HT)
                break;
        case NL80211_IFTYPE_MESH_POINT:
                if (!multicast &&
-                   !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
-                       if (!(sdata->dev->flags & IFF_PROMISC))
-                               return false;
-
-                       status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
-               }
+                   !ether_addr_equal(sdata->vif.addr, hdr->addr1))
+                       return false;
                break;
        case NL80211_IFTYPE_AP_VLAN:
        case NL80211_IFTYPE_AP: