MT_WCID_FLAG_PS,
 };
 
+#define MT76_N_WCIDS 128
+
 struct mt76_wcid {
        struct mt76_rx_tid __rcu *aggr[IEEE80211_NUM_TIDS];
 
 
        wait_queue_head_t tx_wait;
 
+       unsigned long wcid_mask[MT76_N_WCIDS / BITS_PER_LONG];
+
+       struct mt76_wcid global_wcid;
+       struct mt76_wcid __rcu *wcid[MT76_N_WCIDS];
+
        u8 macaddr[ETH_ALEN];
        u32 rev;
        unsigned long state;
 
        u32 *vals;
        int i, ret;
 
-       vals = kmalloc(sizeof(*vals) * N_WCIDS * 2, GFP_KERNEL);
+       vals = kmalloc(sizeof(*vals) * MT76_N_WCIDS * 2, GFP_KERNEL);
        if (!vals)
                return -ENOMEM;
 
-       for (i = 0; i < N_WCIDS; i++)  {
+       for (i = 0; i < MT76_N_WCIDS; i++)  {
                vals[i * 2] = 0xffffffff;
                vals[i * 2 + 1] = 0x00ffffff;
        }
 
        ret = mt76x0_burst_write_regs(dev, MT_WCID_ADDR_BASE,
-                                     vals, N_WCIDS * 2);
+                                     vals, MT76_N_WCIDS * 2);
        kfree(vals);
 
        return ret;
        u32 *vals;
        int i, ret;
 
-       vals = kmalloc(sizeof(*vals) * N_WCIDS * 2, GFP_KERNEL);
+       vals = kmalloc(sizeof(*vals) * MT76_N_WCIDS * 2, GFP_KERNEL);
        if (!vals)
                return -ENOMEM;
 
-       for (i = 0; i < N_WCIDS * 2; i++)
+       for (i = 0; i < MT76_N_WCIDS * 2; i++)
                vals[i] = 1;
 
        ret = mt76x0_burst_write_regs(dev, MT_WCID_ATTR_BASE,
-                                     vals, N_WCIDS * 2);
+                                     vals, MT76_N_WCIDS * 2);
        kfree(vals);
 
        return ret;
        /* Reserve WCID 0 for mcast - thanks to this APs WCID will go to
         * entry no. 1 like it does in the vendor driver.
         */
-       dev->wcid_mask[0] |= 1;
+       dev->mt76.wcid_mask[0] |= 1;
 
        /* init fake wcid for monitor interfaces */
-       dev->mon_wcid = devm_kmalloc(dev->mt76.dev, sizeof(*dev->mon_wcid),
-                                    GFP_KERNEL);
-       if (!dev->mon_wcid)
-               return -ENOMEM;
-       dev->mon_wcid->idx = 0xff;
-       dev->mon_wcid->hw_key_idx = -1;
+       dev->mt76.global_wcid.idx = 0xff;
+       dev->mt76.global_wcid.hw_key_idx = -1;
 
        SET_IEEE80211_DEV(hw, dev->mt76.dev);
 
 
        struct mt76x02_sta *msta = NULL;
 
        rcu_read_lock();
-       if (stat->wcid < ARRAY_SIZE(dev->wcid))
-               wcid = rcu_dereference(dev->wcid[stat->wcid]);
+       if (stat->wcid < ARRAY_SIZE(dev->mt76.wcid))
+               wcid = rcu_dereference(dev->mt76.wcid[stat->wcid]);
 
        if (wcid) {
                void *priv;
        int i;
 
        rcu_read_lock();
-       for (i = 0; i < ARRAY_SIZE(dev->wcid); i++) {
-               wcid = rcu_dereference(dev->wcid[i]);
+       for (i = 0; i < ARRAY_SIZE(dev->mt76.wcid); i++) {
+               wcid = rcu_dereference(dev->mt76.wcid[i]);
                if (!wcid)
                        continue;
 
 
 
        mutex_lock(&dev->mt76.mutex);
 
-       idx = mt76_wcid_alloc(dev->wcid_mask, ARRAY_SIZE(dev->wcid));
+       idx = mt76_wcid_alloc(dev->mt76.wcid_mask, ARRAY_SIZE(dev->mt76.wcid));
        if (idx < 0) {
                ret = -ENOSPC;
                goto out;
        mt76x02_mac_wcid_setup(&dev->mt76, idx, mvif->idx, sta->addr);
        mt76x02_mac_wcid_set_drop(&dev->mt76, idx, false);
        mt76_clear(dev, MT_WCID_DROP(idx), MT_WCID_DROP_MASK(idx));
-       rcu_assign_pointer(dev->wcid[idx], &msta->wcid);
+       rcu_assign_pointer(dev->mt76.wcid[idx], &msta->wcid);
        for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
                mt76x02_txq_init(&dev->mt76, sta->txq[i]);
        mt76x0_mac_set_ampdu_factor(dev);
        int i;
 
        mutex_lock(&dev->mt76.mutex);
-       rcu_assign_pointer(dev->wcid[idx], NULL);
+       rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
        mt76x02_mac_wcid_set_drop(&dev->mt76, idx, true);
-       mt76_wcid_free(dev->wcid_mask, idx);
+       mt76_wcid_free(dev->mt76.wcid_mask, idx);
        for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
                mt76_txq_remove(&dev->mt76, sta->txq[i]);
        mt76x02_mac_wcid_setup(&dev->mt76, idx, 0, NULL);
 
  * ...7e: group wcids
  *    7f: reserved
  */
-#define N_WCIDS                128
 #define GROUP_WCID(idx)        (254 - idx)
 
 struct mt76x0_eeprom_params;
        u8 in_ep[__MT_EP_IN_MAX];
        u16 in_max_packet;
 
-       unsigned long wcid_mask[DIV_ROUND_UP(N_WCIDS, BITS_PER_LONG)];
        unsigned long vif_mask;
 
        struct delayed_work cal_work;
        struct workqueue_struct *stat_wq;
        struct delayed_work stat_work;
 
-       struct mt76_wcid *mon_wcid;
-       struct mt76_wcid __rcu *wcid[N_WCIDS];
-
        spinlock_t mac_lock;
 
        const u16 *beacon_offsets;
 
        struct ieee80211_vif *vif = info->control.vif;
        struct ieee80211_sta *sta = control->sta;
        struct mt76x02_sta *msta = NULL;
-       struct mt76_wcid *wcid = dev->mon_wcid;
+       struct mt76_wcid *wcid = &dev->mt76.global_wcid;
        struct mt76_txwi *txwi;
        int pkt_len = skb->len;
        int hw_q = skb2q(skb);
 
        struct mutex mutex;
 
        const u16 *beacon_offsets;
-       unsigned long wcid_mask[128 / BITS_PER_LONG];
-
        int txpower_conf;
        int txpower_cur;
 
 
        u32 aggr_stats[32];
 
-       struct mt76_wcid global_wcid;
-       struct mt76_wcid __rcu *wcid[128];
-
        spinlock_t irq_lock;
        u32 irqmask;
 
 
 
        mutex_lock(&dev->mt76.mutex);
 
-       idx = mt76_wcid_alloc(dev->wcid_mask, ARRAY_SIZE(dev->wcid));
+       idx = mt76_wcid_alloc(dev->mt76.wcid_mask, ARRAY_SIZE(dev->mt76.wcid));
        if (idx < 0) {
                ret = -ENOSPC;
                goto out;
 
        ewma_signal_init(&msta->rssi);
 
-       rcu_assign_pointer(dev->wcid[idx], &msta->wcid);
+       rcu_assign_pointer(dev->mt76.wcid[idx], &msta->wcid);
 
 out:
        mutex_unlock(&dev->mt76.mutex);
        int i;
 
        mutex_lock(&dev->mt76.mutex);
-       rcu_assign_pointer(dev->wcid[idx], NULL);
+       rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
        for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
                mt76_txq_remove(&dev->mt76, sta->txq[i]);
        mt76x02_mac_wcid_set_drop(&dev->mt76, idx, true);
-       mt76_wcid_free(dev->wcid_mask, idx);
+       mt76_wcid_free(dev->mt76.wcid_mask, idx);
        mt76x02_mac_wcid_setup(&dev->mt76, idx, 0, NULL);
        mutex_unlock(&dev->mt76.mutex);
 
 
        dev->mt76.sband_5g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
 
        dev->chainmask = 0x202;
-       dev->global_wcid.idx = 255;
-       dev->global_wcid.hw_key_idx = -1;
+       dev->mt76.global_wcid.idx = 255;
+       dev->mt76.global_wcid.hw_key_idx = -1;
        dev->slottime = 9;
 
        /* init antenna configuration */
 
        struct mt76x02_sta *msta = NULL;
 
        rcu_read_lock();
-       if (stat->wcid < ARRAY_SIZE(dev->wcid))
-               wcid = rcu_dereference(dev->wcid[stat->wcid]);
+       if (stat->wcid < ARRAY_SIZE(dev->mt76.wcid))
+               wcid = rcu_dereference(dev->mt76.wcid[stat->wcid]);
 
        if (wcid) {
                void *priv;
 {
        struct mt76_wcid *wcid;
 
-       if (idx >= ARRAY_SIZE(dev->wcid))
+       if (idx >= ARRAY_SIZE(dev->mt76.wcid))
                return NULL;
 
-       wcid = rcu_dereference(dev->wcid[idx]);
+       wcid = rcu_dereference(dev->mt76.wcid[idx]);
        if (!wcid)
                return NULL;
 
 
        local_bh_disable();
        rcu_read_lock();
 
-       for (i = 0; i < ARRAY_SIZE(dev->wcid_mask); i++) {
-               unsigned long mask = dev->wcid_mask[i];
+       for (i = 0; i < ARRAY_SIZE(dev->mt76.wcid_mask); i++) {
+               unsigned long mask = dev->mt76.wcid_mask[i];
 
                if (!mask)
                        continue;
                        if (!(mask & 1))
                                continue;
 
-                       wcid = rcu_dereference(dev->wcid[j]);
+                       wcid = rcu_dereference(dev->mt76.wcid[j]);
                        if (!wcid)
                                continue;
 
 
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        struct mt76x2_dev *dev = hw->priv;
        struct ieee80211_vif *vif = info->control.vif;
-       struct mt76_wcid *wcid = &dev->global_wcid;
+       struct mt76_wcid *wcid = &dev->mt76.global_wcid;
 
        if (control->sta) {
                struct mt76x02_sta *msta;