struct ath_vif *avp = (void *)vif->drv_priv;
        struct ath_node *an = &avp->mcast_node;
 
-       if (IS_ENABLED(CONFIG_ATH9K_TX99))
-               return -EOPNOTSUPP;
+       if (IS_ENABLED(CONFIG_ATH9K_TX99)) {
+               if (sc->cur_chan->nvifs >= 1) {
+                       mutex_unlock(&sc->mutex);
+                       return -EOPNOTSUPP;
+               }
+               sc->tx99_vif = vif;
+       }
 
        mutex_lock(&sc->mutex);
 
        ath9k_p2p_remove_vif(sc, vif);
 
        sc->cur_chan->nvifs--;
+       sc->tx99_vif = NULL;
        if (!ath9k_is_chanctx_enabled())
                list_del(&avp->list);
 
 
        struct ieee80211_hdr *hdr;
        struct ieee80211_tx_info *tx_info;
        struct sk_buff *skb;
+       struct ath_vif *avp;
 
        skb = alloc_skb(len, GFP_KERNEL);
        if (!skb)
        memcpy(hdr->addr2, hw->wiphy->perm_addr, ETH_ALEN);
        memcpy(hdr->addr3, hw->wiphy->perm_addr, ETH_ALEN);
 
+       if (sc->tx99_vif) {
+               avp = (struct ath_vif *) sc->tx99_vif->drv_priv;
+               hdr->seq_ctrl |= cpu_to_le16(avp->seq_no);
+       }
+
        tx_info = IEEE80211_SKB_CB(skb);
        memset(tx_info, 0, sizeof(*tx_info));
        rate = &tx_info->control.rates[0];
        tx_info->band = sc->cur_chan->chandef.chan->band;
        tx_info->flags = IEEE80211_TX_CTL_NO_ACK;
+       tx_info->control.vif = sc->tx99_vif;
        rate->count = 1;
        if (ah->curchan && IS_CHAN_HT(ah->curchan)) {
                rate->flags |= IEEE80211_TX_RC_MCS;
 
                return -EINVAL;
        }
 
-       ath_set_rates(NULL, NULL, bf);
+       ath_set_rates(sc->tx99_vif, NULL, bf);
 
        ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr);
        ath9k_hw_tx99_start(sc->sc_ah, txctl->txq->axq_qnum);