struct ieee80211_tx_info *tx_info,
                             struct rtl8xxxu_txdesc32 *tx_desc, bool sgi,
                             bool short_preamble, bool ampdu_enable,
-                            u32 rts_rate);
+                            u32 rts_rate, u8 macid);
        void (*set_crystal_cap) (struct rtl8xxxu_priv *priv, u8 crystal_cap);
        s8 (*cck_rssi) (struct rtl8xxxu_priv *priv, struct rtl8723au_phy_stats *phy_stats);
        int (*led_classdev_brightness_set) (struct led_classdev *led_cdev,
                             struct ieee80211_tx_info *tx_info,
                             struct rtl8xxxu_txdesc32 *tx_desc, bool sgi,
                             bool short_preamble, bool ampdu_enable,
-                            u32 rts_rate);
+                            u32 rts_rate, u8 macid);
 void rtl8xxxu_fill_txdesc_v2(struct ieee80211_hw *hw, struct ieee80211_hdr *hdr,
                             struct ieee80211_tx_info *tx_info,
                             struct rtl8xxxu_txdesc32 *tx_desc32, bool sgi,
                             bool short_preamble, bool ampdu_enable,
-                            u32 rts_rate);
+                            u32 rts_rate, u8 macid);
 void rtl8xxxu_fill_txdesc_v3(struct ieee80211_hw *hw, struct ieee80211_hdr *hdr,
                             struct ieee80211_tx_info *tx_info,
                             struct rtl8xxxu_txdesc32 *tx_desc32, bool sgi,
                             bool short_preamble, bool ampdu_enable,
-                            u32 rts_rate);
+                            u32 rts_rate, u8 macid);
 void rtl8723bu_set_ps_tdma(struct rtl8xxxu_priv *priv,
                           u8 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5);
 void rtl8723bu_phy_init_antenna_selection(struct rtl8xxxu_priv *priv);
 
        clear_bit(macid, priv->mac_id_map);
 }
 
+static inline u8 rtl8xxxu_get_macid(struct rtl8xxxu_priv *priv,
+                                   struct ieee80211_sta *sta)
+{
+       struct rtl8xxxu_sta_info *sta_info;
+
+       if (!priv->vif || priv->vif->type == NL80211_IFTYPE_STATION || !sta)
+               return 0;
+
+       sta_info = (struct rtl8xxxu_sta_info *)sta->drv_priv;
+       return sta_info->macid;
+}
+
 static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
 {
        struct rtl8xxxu_priv *priv = hw->priv;
 rtl8xxxu_fill_txdesc_v1(struct ieee80211_hw *hw, struct ieee80211_hdr *hdr,
                        struct ieee80211_tx_info *tx_info,
                        struct rtl8xxxu_txdesc32 *tx_desc, bool sgi,
-                       bool short_preamble, bool ampdu_enable, u32 rts_rate)
+                       bool short_preamble, bool ampdu_enable, u32 rts_rate,
+                       u8 macid)
 {
        struct ieee80211_rate *tx_rate = ieee80211_get_tx_rate(hw, tx_info);
        struct rtl8xxxu_priv *priv = hw->priv;
 rtl8xxxu_fill_txdesc_v2(struct ieee80211_hw *hw, struct ieee80211_hdr *hdr,
                        struct ieee80211_tx_info *tx_info,
                        struct rtl8xxxu_txdesc32 *tx_desc32, bool sgi,
-                       bool short_preamble, bool ampdu_enable, u32 rts_rate)
+                       bool short_preamble, bool ampdu_enable, u32 rts_rate,
+                       u8 macid)
 {
        struct ieee80211_rate *tx_rate = ieee80211_get_tx_rate(hw, tx_info);
        struct rtl8xxxu_priv *priv = hw->priv;
                dev_info(dev, "%s: TX rate: %d, pkt size %u\n",
                         __func__, rate, le16_to_cpu(tx_desc40->pkt_size));
 
+       tx_desc40->txdw1 |= cpu_to_le32(macid << TXDESC40_MACID_SHIFT);
+
        seq_number = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
 
        tx_desc40->txdw4 = cpu_to_le32(rate);
 rtl8xxxu_fill_txdesc_v3(struct ieee80211_hw *hw, struct ieee80211_hdr *hdr,
                        struct ieee80211_tx_info *tx_info,
                        struct rtl8xxxu_txdesc32 *tx_desc, bool sgi,
-                       bool short_preamble, bool ampdu_enable, u32 rts_rate)
+                       bool short_preamble, bool ampdu_enable, u32 rts_rate,
+                       u8 macid)
 {
        struct ieee80211_rate *tx_rate = ieee80211_get_tx_rate(hw, tx_info);
        struct rtl8xxxu_priv *priv = hw->priv;
        u16 pktlen = skb->len;
        u16 rate_flag = tx_info->control.rates[0].flags;
        int tx_desc_size = priv->fops->tx_desc_size;
+       u8 macid;
        int ret;
        bool ampdu_enable, sgi = false, short_preamble = false;
 
        else
                rts_rate = 0;
 
-
+       macid = rtl8xxxu_get_macid(priv, sta);
        priv->fops->fill_txdesc(hw, hdr, tx_info, tx_desc, sgi, short_preamble,
-                               ampdu_enable, rts_rate);
+                               ampdu_enable, rts_rate, macid);
 
        rtl8xxxu_calc_tx_desc_csum(tx_desc);