return -EOPNOTSUPP;
 }
 
-static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                        u32 queues, bool drop)
+void ath10k_mac_wait_tx_complete(struct ath10k *ar)
 {
-       struct ath10k *ar = hw->priv;
        bool skip;
        long time_left;
 
        /* mac80211 doesn't care if we really xmit queued frames or not
         * we'll collect those frames either way if we stop/delete vdevs
         */
-       if (drop)
-               return;
-
-       mutex_lock(&ar->conf_mutex);
 
        if (ar->state == ATH10K_STATE_WEDGED)
-               goto skip;
+               return;
 
        time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
                        bool empty;
        if (time_left == 0 || skip)
                ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
                            skip, ar->state, time_left);
+}
 
-skip:
+static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+                        u32 queues, bool drop)
+{
+       struct ath10k *ar = hw->priv;
+
+       if (drop)
+               return;
+
+       mutex_lock(&ar->conf_mutex);
+       ath10k_mac_wait_tx_complete(ar);
        mutex_unlock(&ar->conf_mutex);
 }
 
 
                                            u16 peer_id,
                                            u8 tid);
 int ath10k_mac_ext_resource_config(struct ath10k *ar, u32 val);
+void ath10k_mac_wait_tx_complete(struct ath10k *ar);
 
 static inline void ath10k_tx_h_seq_no(struct ieee80211_vif *vif,
                                      struct sk_buff *skb)