mt76x0-common-y := \
        init.o main.o trace.o eeprom.o phy.o \
-       mac.o debugfs.o tx.o
+       mac.o debugfs.o
 mt76x0u-y := usb.o usb_mcu.o
 mt76x0e-y := pci.o pci_mcu.o
 
 
 void mt76x0_mac_config_tsf(struct mt76x02_dev *dev, bool enable, int interval);
 void mt76x0_mac_set_ampdu_factor(struct mt76x02_dev *dev);
 
-/* TX */
-void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
-               struct sk_buff *skb);
-
 #endif
 
 }
 
 static const struct ieee80211_ops mt76x0e_ops = {
-       .tx = mt76x0_tx,
+       .tx = mt76x02_tx,
        .start = mt76x0e_start,
        .stop = mt76x0e_stop,
        .config = mt76x0_config,
 
+++ /dev/null
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include "mt76x0.h"
-#include "trace.h"
-#include "../mt76x02_util.h"
-#include "../mt76x02_usb.h"
-
-void mt76x0_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
-              struct sk_buff *skb)
-{
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct mt76x02_dev *dev = hw->priv;
-       struct ieee80211_vif *vif = info->control.vif;
-       struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-
-       if (control->sta) {
-               struct mt76x02_sta *msta;
-
-               msta = (struct mt76x02_sta *)control->sta->drv_priv;
-               wcid = &msta->wcid;
-               /* sw encrypted frames */
-               if (!info->control.hw_key && wcid->hw_key_idx != 0xff)
-                       control->sta = NULL;
-       }
-
-       if (vif && !control->sta) {
-               struct mt76x02_vif *mvif;
-
-               mvif = (struct mt76x02_vif *)vif->drv_priv;
-               wcid = &mvif->group_wcid;
-       }
-
-       mt76_tx(&dev->mt76, control->sta, wcid, skb);
-}
-EXPORT_SYMBOL_GPL(mt76x0_tx);
 
 }
 
 static const struct ieee80211_ops mt76x0u_ops = {
-       .tx = mt76x0_tx,
+       .tx = mt76x02_tx,
        .start = mt76x0u_start,
        .stop = mt76x0u_stop,
        .add_interface = mt76x02_add_interface,
 
 }
 EXPORT_SYMBOL_GPL(mt76x02_queue_rx_skb);
 
+void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
+               struct sk_buff *skb)
+{
+       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+       struct mt76x02_dev *dev = hw->priv;
+       struct ieee80211_vif *vif = info->control.vif;
+       struct mt76_wcid *wcid = &dev->mt76.global_wcid;
+
+       if (control->sta) {
+               struct mt76x02_sta *msta;
+
+               msta = (struct mt76x02_sta *)control->sta->drv_priv;
+               wcid = &msta->wcid;
+               /* sw encrypted frames */
+               if (!info->control.hw_key && wcid->hw_key_idx != 0xff)
+                       control->sta = NULL;
+       }
+
+       if (vif && !control->sta) {
+               struct mt76x02_vif *mvif;
+
+               mvif = (struct mt76x02_vif *)vif->drv_priv;
+               wcid = &mvif->group_wcid;
+       }
+
+       mt76_tx(&dev->mt76, control->sta, wcid, skb);
+}
+EXPORT_SYMBOL_GPL(mt76x02_tx);
+
 MODULE_LICENSE("Dual BSD/GPL");
 
 bool mt76x02_tx_status_data(struct mt76_dev *dev, u8 *update);
 void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
                          struct sk_buff *skb);
+void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
+               struct sk_buff *skb);
 
 extern const u16 mt76x02_beacon_offsets[16];
 void mt76x02_set_beacon_offsets(struct mt76_dev *dev);
 
 
 void mt76x2_cleanup(struct mt76x02_dev *dev);
 
-void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
-              struct sk_buff *skb);
 int mt76x2_tx_prepare_skb(struct mt76_dev *mdev, void *txwi,
                          struct sk_buff *skb, struct mt76_queue *q,
                          struct mt76_wcid *wcid, struct ieee80211_sta *sta,
 
 }
 
 const struct ieee80211_ops mt76x2_ops = {
-       .tx = mt76x2_tx,
+       .tx = mt76x02_tx,
        .start = mt76x2_start,
        .stop = mt76x2_stop,
        .add_interface = mt76x02_add_interface,
 
 #include "mt76x2.h"
 #include "../dma.h"
 
-void mt76x2_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
-              struct sk_buff *skb)
-{
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct mt76x02_dev *dev = hw->priv;
-       struct ieee80211_vif *vif = info->control.vif;
-       struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-
-       if (control->sta) {
-               struct mt76x02_sta *msta;
-
-               msta = (struct mt76x02_sta *)control->sta->drv_priv;
-               wcid = &msta->wcid;
-               /* sw encrypted frames */
-               if (!info->control.hw_key && wcid->hw_key_idx != 0xff)
-                       control->sta = NULL;
-       }
-
-       if (vif && !control->sta) {
-               struct mt76x02_vif *mvif;
-
-               mvif = (struct mt76x02_vif *)vif->drv_priv;
-               wcid = &mvif->group_wcid;
-       }
-
-       mt76_tx(&dev->mt76, control->sta, wcid, skb);
-}
-EXPORT_SYMBOL_GPL(mt76x2_tx);
-
 s8 mt76x2_tx_get_txpwr_adj(struct mt76_dev *mdev, s8 txpwr, s8 max_txpwr_adj)
 {
        struct mt76x02_dev  *dev = container_of(mdev, struct mt76x02_dev, mt76);
 
 }
 
 const struct ieee80211_ops mt76x2u_ops = {
-       .tx = mt76x2_tx,
+       .tx = mt76x02_tx,
        .start = mt76x2u_start,
        .stop = mt76x2u_stop,
        .add_interface = mt76x2u_add_interface,