return 0;
 }
 
-void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
+static void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
 {
        struct mt7921_sta *msta;
        u16 fc, tid;
        if (!test_and_set_bit(tid, &msta->ampdu_state))
                ieee80211_start_tx_ba_session(sta, tid, 0);
 }
-EXPORT_SYMBOL_GPL(mt7921_tx_check_aggr);
 
 void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data)
 {
 out:
        rcu_read_unlock();
 }
-EXPORT_SYMBOL_GPL(mt7921_mac_add_txs);
+
+void mt7921_txwi_free(struct mt7921_dev *dev, struct mt76_txwi_cache *t,
+                     struct ieee80211_sta *sta, bool clear_status,
+                     struct list_head *free_list)
+{
+       struct mt76_dev *mdev = &dev->mt76;
+       __le32 *txwi;
+       u16 wcid_idx;
+
+       mt76_connac_txp_skb_unmap(mdev, t);
+       if (!t->skb)
+               goto out;
+
+       txwi = (__le32 *)mt76_get_txwi_ptr(mdev, t);
+       if (sta) {
+               struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
+
+               if (likely(t->skb->protocol != cpu_to_be16(ETH_P_PAE)))
+                       mt7921_tx_check_aggr(sta, txwi);
+
+               wcid_idx = wcid->idx;
+       } else {
+               wcid_idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
+       }
+
+       __mt76_tx_complete_skb(mdev, wcid_idx, t->skb, free_list);
+out:
+       t->skb = NULL;
+       mt76_put_txwi(mdev, t);
+}
+EXPORT_SYMBOL_GPL(mt7921_txwi_free);
+
+static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len)
+{
+       struct mt76_connac_tx_free *free = data;
+       __le32 *tx_info = (__le32 *)(data + sizeof(*free));
+       struct mt76_dev *mdev = &dev->mt76;
+       struct mt76_txwi_cache *txwi;
+       struct ieee80211_sta *sta = NULL;
+       struct sk_buff *skb, *tmp;
+       void *end = data + len;
+       LIST_HEAD(free_list);
+       bool wake = false;
+       u8 i, count;
+
+       /* clean DMA queues and unmap buffers first */
+       mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
+       mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
+
+       count = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_CNT);
+       if (WARN_ON_ONCE((void *)&tx_info[count] > end))
+               return;
+
+       for (i = 0; i < count; i++) {
+               u32 msdu, info = le32_to_cpu(tx_info[i]);
+               u8 stat;
+
+               /* 1'b1: new wcid pair.
+                * 1'b0: msdu_id with the same 'wcid pair' as above.
+                */
+               if (info & MT_TX_FREE_PAIR) {
+                       struct mt7921_sta *msta;
+                       struct mt76_wcid *wcid;
+                       u16 idx;
+
+                       count++;
+                       idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
+                       wcid = rcu_dereference(dev->mt76.wcid[idx]);
+                       sta = wcid_to_sta(wcid);
+                       if (!sta)
+                               continue;
+
+                       msta = container_of(wcid, struct mt7921_sta, wcid);
+                       spin_lock_bh(&dev->sta_poll_lock);
+                       if (list_empty(&msta->poll_list))
+                               list_add_tail(&msta->poll_list, &dev->sta_poll_list);
+                       spin_unlock_bh(&dev->sta_poll_lock);
+                       continue;
+               }
+
+               msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
+               stat = FIELD_GET(MT_TX_FREE_STATUS, info);
+
+               txwi = mt76_token_release(mdev, msdu, &wake);
+               if (!txwi)
+                       continue;
+
+               mt7921_txwi_free(dev, txwi, sta, stat, &free_list);
+       }
+
+       if (wake)
+               mt76_set_tx_blocked(&dev->mt76, false);
+
+       list_for_each_entry_safe(skb, tmp, &free_list, list) {
+               skb_list_del_init(skb);
+               napi_consume_skb(skb, 1);
+       }
+
+       rcu_read_lock();
+       mt7921_mac_sta_poll(dev);
+       rcu_read_unlock();
+
+       mt76_worker_schedule(&dev->mt76.tx_worker);
+}
 
 bool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len)
 {
        type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
 
        switch (type) {
+       case PKT_TYPE_TXRX_NOTIFY:
+               /* PKT_TYPE_TXRX_NOTIFY can be received only by mmio devices */
+               mt7921_mac_tx_free(dev, data, len); /* mmio */
+               return false;
        case PKT_TYPE_TXS:
                for (rxd += 2; rxd + 8 <= end; rxd += 8)
                        mt7921_mac_add_txs(dev, rxd);
                type = PKT_TYPE_NORMAL_MCU;
 
        switch (type) {
+       case PKT_TYPE_TXRX_NOTIFY:
+               /* PKT_TYPE_TXRX_NOTIFY can be received only by mmio devices */
+               mt7921_mac_tx_free(dev, skb->data, skb->len);
+               napi_consume_skb(skb, 1);
+               break;
        case PKT_TYPE_RX_EVENT:
                mt7921_mcu_rx_event(dev, skb);
                break;
 
                        void *data, int len);
 int mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
                         struct netlink_callback *cb, void *data, int len);
-void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi);
+void mt7921_txwi_free(struct mt7921_dev *dev, struct mt76_txwi_cache *t,
+                     struct ieee80211_sta *sta, bool clear_status,
+                     struct list_head *free_list);
 void mt7921_mac_sta_poll(struct mt7921_dev *dev);
 int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
                              struct sk_buff *skb, int seq);
 
-bool mt7921e_rx_check(struct mt76_dev *mdev, void *data, int len);
-void mt7921e_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-                         struct sk_buff *skb);
 int mt7921e_driver_own(struct mt7921_dev *dev);
 int mt7921e_mac_reset(struct mt7921_dev *dev);
 int mt7921e_mcu_init(struct mt7921_dev *dev);
 
                .token_size = MT7921_TOKEN_SIZE,
                .tx_prepare_skb = mt7921e_tx_prepare_skb,
                .tx_complete_skb = mt76_connac_tx_complete_skb,
-               .rx_check = mt7921e_rx_check,
-               .rx_skb = mt7921e_queue_rx_skb,
+               .rx_check = mt7921_rx_check,
+               .rx_skb = mt7921_queue_rx_skb,
                .rx_poll_complete = mt7921_rx_poll_complete,
                .sta_ps = mt7921_sta_ps,
                .sta_add = mt7921_mac_sta_add,
 
        return 0;
 }
 
-static void
-mt7921_txwi_free(struct mt7921_dev *dev, struct mt76_txwi_cache *t,
-                struct ieee80211_sta *sta, bool clear_status,
-                struct list_head *free_list)
-{
-       struct mt76_dev *mdev = &dev->mt76;
-       __le32 *txwi;
-       u16 wcid_idx;
-
-       mt76_connac_txp_skb_unmap(mdev, t);
-       if (!t->skb)
-               goto out;
-
-       txwi = (__le32 *)mt76_get_txwi_ptr(mdev, t);
-       if (sta) {
-               struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-
-               if (likely(t->skb->protocol != cpu_to_be16(ETH_P_PAE)))
-                       mt7921_tx_check_aggr(sta, txwi);
-
-               wcid_idx = wcid->idx;
-       } else {
-               wcid_idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
-       }
-
-       __mt76_tx_complete_skb(mdev, wcid_idx, t->skb, free_list);
-
-out:
-       t->skb = NULL;
-       mt76_put_txwi(mdev, t);
-}
-
-static void
-mt7921e_mac_tx_free(struct mt7921_dev *dev, void *data, int len)
-{
-       struct mt76_connac_tx_free *free = data;
-       __le32 *tx_info = (__le32 *)(data + sizeof(*free));
-       struct mt76_dev *mdev = &dev->mt76;
-       struct mt76_txwi_cache *txwi;
-       struct ieee80211_sta *sta = NULL;
-       struct sk_buff *skb, *tmp;
-       void *end = data + len;
-       LIST_HEAD(free_list);
-       bool wake = false;
-       u8 i, count;
-
-       /* clean DMA queues and unmap buffers first */
-       mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
-       mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
-
-       count = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_CNT);
-       if (WARN_ON_ONCE((void *)&tx_info[count] > end))
-               return;
-
-       for (i = 0; i < count; i++) {
-               u32 msdu, info = le32_to_cpu(tx_info[i]);
-               u8 stat;
-
-               /* 1'b1: new wcid pair.
-                * 1'b0: msdu_id with the same 'wcid pair' as above.
-                */
-               if (info & MT_TX_FREE_PAIR) {
-                       struct mt7921_sta *msta;
-                       struct mt76_wcid *wcid;
-                       u16 idx;
-
-                       count++;
-                       idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
-                       wcid = rcu_dereference(dev->mt76.wcid[idx]);
-                       sta = wcid_to_sta(wcid);
-                       if (!sta)
-                               continue;
-
-                       msta = container_of(wcid, struct mt7921_sta, wcid);
-                       spin_lock_bh(&dev->sta_poll_lock);
-                       if (list_empty(&msta->poll_list))
-                               list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-                       spin_unlock_bh(&dev->sta_poll_lock);
-                       continue;
-               }
-
-               msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
-               stat = FIELD_GET(MT_TX_FREE_STATUS, info);
-
-               txwi = mt76_token_release(mdev, msdu, &wake);
-               if (!txwi)
-                       continue;
-
-               mt7921_txwi_free(dev, txwi, sta, stat, &free_list);
-       }
-
-       if (wake)
-               mt76_set_tx_blocked(&dev->mt76, false);
-
-       list_for_each_entry_safe(skb, tmp, &free_list, list) {
-               skb_list_del_init(skb);
-               napi_consume_skb(skb, 1);
-       }
-
-       rcu_read_lock();
-       mt7921_mac_sta_poll(dev);
-       rcu_read_unlock();
-
-       mt76_worker_schedule(&dev->mt76.tx_worker);
-}
-
-bool mt7921e_rx_check(struct mt76_dev *mdev, void *data, int len)
-{
-       struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-       __le32 *rxd = (__le32 *)data;
-       __le32 *end = (__le32 *)&rxd[len / 4];
-       enum rx_pkt_type type;
-
-       type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-       switch (type) {
-       case PKT_TYPE_TXRX_NOTIFY:
-               mt7921e_mac_tx_free(dev, data, len);
-               return false;
-       case PKT_TYPE_TXS:
-               for (rxd += 2; rxd + 8 <= end; rxd += 8)
-                       mt7921_mac_add_txs(dev, rxd);
-               return false;
-       default:
-               return true;
-       }
-}
-
-void mt7921e_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-                         struct sk_buff *skb)
-{
-       struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-       __le32 *rxd = (__le32 *)skb->data;
-       enum rx_pkt_type type;
-
-       type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-       switch (type) {
-       case PKT_TYPE_TXRX_NOTIFY:
-               mt7921e_mac_tx_free(dev, skb->data, skb->len);
-               napi_consume_skb(skb, 1);
-               break;
-       default:
-               mt7921_queue_rx_skb(mdev, q, skb);
-               break;
-       }
-}
-
 void mt7921_tx_token_put(struct mt7921_dev *dev)
 {
        struct mt76_txwi_cache *txwi;