return ret;
 }
 
-int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm)
+static void iwl_mvm_enable_aux_queue(struct iwl_mvm *mvm)
 {
        unsigned int wdg_timeout = iwlmvm_mod_params.tfd_q_hang_detect ?
                                        mvm->cfg->base_params->wd_timeout :
                                        IWL_WATCHDOG_DISABLED;
-       int ret;
-
-       lockdep_assert_held(&mvm->mutex);
-
-       /* Map Aux queue to fifo - needs to happen before adding Aux station */
-       if (!iwl_mvm_is_dqa_supported(mvm))
-               iwl_mvm_enable_ac_txq(mvm, mvm->aux_queue, mvm->aux_queue,
-                                     IWL_MVM_TX_FIFO_MCAST, 0, wdg_timeout);
-
-       /* Allocate aux station and assign to it the aux queue */
-       ret = iwl_mvm_allocate_int_sta(mvm, &mvm->aux_sta, BIT(mvm->aux_queue),
-                                      NL80211_IFTYPE_UNSPECIFIED);
-       if (ret)
-               return ret;
 
        if (iwl_mvm_is_dqa_supported(mvm)) {
                struct iwl_trans_txq_scd_cfg cfg = {
 
                iwl_mvm_enable_txq(mvm, mvm->aux_queue, mvm->aux_queue, 0, &cfg,
                                   wdg_timeout);
+       } else {
+               iwl_mvm_enable_ac_txq(mvm, mvm->aux_queue, mvm->aux_queue,
+                                     IWL_MVM_TX_FIFO_MCAST, 0, wdg_timeout);
        }
+}
 
-       ret = iwl_mvm_add_int_sta_common(mvm, &mvm->aux_sta, NULL,
-                                        MAC_INDEX_AUX, 0);
+int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm)
+{
+       int ret;
+
+       lockdep_assert_held(&mvm->mutex);
 
+       /* Allocate aux station and assign to it the aux queue */
+       ret = iwl_mvm_allocate_int_sta(mvm, &mvm->aux_sta, BIT(mvm->aux_queue),
+                                      NL80211_IFTYPE_UNSPECIFIED);
        if (ret)
+               return ret;
+
+       /* Map Aux queue to fifo - needs to happen before adding Aux station */
+       if (!iwl_mvm_has_new_tx_api(mvm))
+               iwl_mvm_enable_aux_queue(mvm);
+
+       ret = iwl_mvm_add_int_sta_common(mvm, &mvm->aux_sta, NULL,
+                                        MAC_INDEX_AUX, 0);
+       if (ret) {
                iwl_mvm_dealloc_int_sta(mvm, &mvm->aux_sta);
-       return ret;
+               return ret;
+       }
+
+       /*
+        * For a000 firmware and on we cannot add queue to a station unknown
+        * to firmware so enable queue here - after the station was added
+        */
+       if (iwl_mvm_has_new_tx_api(mvm))
+               iwl_mvm_enable_aux_queue(mvm);
+
+       return 0;
 }
 
 int iwl_mvm_add_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
        struct iwl_mvm_int_sta *bsta = &mvmvif->bcast_sta;
        static const u8 _baddr[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
        const u8 *baddr = _baddr;
+       int queue = 0;
        int ret;
+       unsigned int wdg_timeout =
+               iwl_mvm_get_wd_timeout(mvm, vif, false, false);
+       struct iwl_trans_txq_scd_cfg cfg = {
+               .fifo = IWL_MVM_TX_FIFO_VO,
+               .sta_id = mvmvif->bcast_sta.sta_id,
+               .tid = IWL_MAX_TID_COUNT,
+               .aggregate = false,
+               .frame_limit = IWL_FRAME_LIMIT,
+       };
 
        lockdep_assert_held(&mvm->mutex);
 
        if (iwl_mvm_is_dqa_supported(mvm)) {
-               struct iwl_trans_txq_scd_cfg cfg = {
-                       .fifo = IWL_MVM_TX_FIFO_VO,
-                       .sta_id = mvmvif->bcast_sta.sta_id,
-                       .tid = IWL_MAX_TID_COUNT,
-                       .aggregate = false,
-                       .frame_limit = IWL_FRAME_LIMIT,
-               };
-               unsigned int wdg_timeout =
-                       iwl_mvm_get_wd_timeout(mvm, vif, false, false);
-               int queue;
-
                if (vif->type == NL80211_IFTYPE_AP ||
                    vif->type == NL80211_IFTYPE_ADHOC)
                        queue = mvm->probe_queue;
                else if (WARN(1, "Missing required TXQ for adding bcast STA\n"))
                        return -EINVAL;
 
-               iwl_mvm_enable_txq(mvm, queue, vif->hw_queue[0], 0, &cfg,
-                                  wdg_timeout);
                bsta->tfd_queue_msk |= BIT(queue);
+
+               if (!iwl_mvm_has_new_tx_api(mvm))
+                       iwl_mvm_enable_txq(mvm, queue, vif->hw_queue[0], 0,
+                                          &cfg, wdg_timeout);
        }
 
        if (vif->type == NL80211_IFTYPE_ADHOC)
                return ret;
 
        /*
-        * In AP vif type, we also need to enable the cab_queue. However, we
-        * have to enable it after the ADD_STA command is sent, otherwise the
-        * FW will throw an assert once we send the ADD_STA command (it'll
-        * detect a mismatch in the tfd_queue_msk, as we can't add the
-        * enabled-cab_queue to the mask)
+        * For a000 firmware and on we cannot add queue to a station unknown
+        * to firmware so enable queue here - after the station was added
         */
-       if (iwl_mvm_is_dqa_supported(mvm) &&
-           (vif->type == NL80211_IFTYPE_AP ||
-            vif->type == NL80211_IFTYPE_ADHOC)) {
-               struct iwl_trans_txq_scd_cfg cfg = {
-                       .fifo = IWL_MVM_TX_FIFO_MCAST,
-                       .sta_id = mvmvif->bcast_sta.sta_id,
-                       .tid = IWL_MAX_TID_COUNT,
-                       .aggregate = false,
-                       .frame_limit = IWL_FRAME_LIMIT,
-               };
-               unsigned int wdg_timeout =
-                       iwl_mvm_get_wd_timeout(mvm, vif, false, false);
-
-               iwl_mvm_enable_txq(mvm, vif->cab_queue, vif->cab_queue,
-                                  0, &cfg, wdg_timeout);
-       }
+       if (iwl_mvm_has_new_tx_api(mvm))
+               iwl_mvm_enable_txq(mvm, queue, vif->hw_queue[0], 0, &cfg,
+                                  wdg_timeout);
 
        return 0;
 }