u8 add_modify;
        u8 awake_acs;
        __le16 tid_disable_tx;
-       __le32 mac_id_n_color;
+       __le32 mac_id_n_color;  /* can be used for lmac id when using cmd v12 */
        u8 addr[ETH_ALEN];      /* _STA_ID_MODIFY_INFO_API_S_VER_1 */
        __le16 reserved2;
        u8 sta_id;
 
                        goto error;
        }
 
-       /* Add auxiliary station for scanning */
-       ret = iwl_mvm_add_aux_sta(mvm);
-       if (ret)
-               goto error;
+       /*
+        * Add auxiliary station for scanning.
+        * Newer versions of this command implies that the fw uses
+        * internal aux station for all aux activities that don't
+        * requires a dedicated data queue.
+        */
+       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                 ADD_STA,
+                                 0) < 12) {
+                /*
+                 * In old version the aux station uses mac id like other
+                 * station and not lmac id
+                 */
+               ret = iwl_mvm_add_aux_sta(mvm, MAC_INDEX_AUX);
+               if (ret)
+                       goto error;
+       }
 
        /* Add all the PHY contexts */
        i = 0;
        for (i = 0; i < mvm->fw->ucode_capa.num_stations; i++)
                RCU_INIT_POINTER(mvm->fw_id_to_mac_id[i], NULL);
 
-       /* Add auxiliary station for scanning */
-       ret = iwl_mvm_add_aux_sta(mvm);
-       if (ret)
-               goto error;
+       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                 ADD_STA,
+                                 0) < 12) {
+               /*
+                * Add auxiliary station for scanning.
+                * Newer versions of this command implies that the fw uses
+                * internal aux station for all aux activities that don't
+                * requires a dedicated data queue.
+                * In old version the aux station uses mac id like other
+                * station and not lmac id
+                */
+               ret = iwl_mvm_add_aux_sta(mvm, MAC_INDEX_AUX);
+               if (ret)
+                       goto error;
+       }
 
        return 0;
  error:
 
 
        /* async_handlers_wk is now blocked */
 
-       iwl_mvm_rm_aux_sta(mvm);
+       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP, ADD_STA, 0) < 12)
+               iwl_mvm_rm_aux_sta(mvm);
 
        iwl_mvm_stop_device(mvm);
 
                if (fw_has_capa(&mvm->fw->ucode_capa,
                                IWL_UCODE_TLV_CAPA_HOTSPOT_SUPPORT)) {
                        /* Use aux roc framework (HS20) */
+                       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                                 ADD_STA, 0) >= 12) {
+                               u32 lmac_id;
+
+                               lmac_id = iwl_mvm_get_lmac_id(mvm->fw,
+                                                             channel->band);
+                               ret = iwl_mvm_add_aux_sta(mvm, lmac_id);
+                               if (WARN(ret,
+                                        "Failed to allocate aux station"))
+                                       goto out_unlock;
+                       }
                        ret = iwl_mvm_send_aux_roc_cmd(mvm, channel,
                                                       vif, duration);
                        goto out_unlock;
 
        tx_cmd[0].rate_n_flags = iwl_mvm_scan_rate_n_flags(mvm,
                                                           NL80211_BAND_2GHZ,
                                                           no_cck);
-       tx_cmd[0].sta_id = mvm->aux_sta.sta_id;
+
+       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                 ADD_STA,
+                                 0) < 12) {
+               tx_cmd[0].sta_id = mvm->aux_sta.sta_id;
+               tx_cmd[1].sta_id = mvm->aux_sta.sta_id;
+
+       /*
+        * Fw doesn't use this sta anymore, pending deprecation via HOST API
+        * change
+        */
+       } else {
+               tx_cmd[0].sta_id = 0xff;
+               tx_cmd[1].sta_id = 0xff;
+       }
 
        tx_cmd[1].tx_flags = cpu_to_le32(TX_CMD_FLG_SEQ_CTL |
                                         TX_CMD_FLG_BT_DIS);
+
        tx_cmd[1].rate_n_flags = iwl_mvm_scan_rate_n_flags(mvm,
                                                           NL80211_BAND_5GHZ,
                                                           no_cck);
-       tx_cmd[1].sta_id = mvm->aux_sta.sta_id;
 }
 
 static void
 
        memcpy(&cfg->mac_addr, &mvm->addresses[0].addr, ETH_ALEN);
 
+       /* This function should not be called when using ADD_STA ver >=12 */
+       WARN_ON_ONCE(iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                          ADD_STA, 0) >= 12);
+
        cfg->bcast_sta_id = mvm->aux_sta.sta_id;
        cfg->channel_flags = channel_flags;
 
 
        memcpy(&cfg->mac_addr, &mvm->addresses[0].addr, ETH_ALEN);
 
+       /* This function should not be called when using ADD_STA ver >=12 */
+       WARN_ON_ONCE(iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                          ADD_STA, 0) >= 12);
+
        cfg->bcast_sta_id = mvm->aux_sta.sta_id;
        cfg->channel_flags = channel_flags;
 
 
        memset(&cfg, 0, sizeof(cfg));
 
-       cfg.bcast_sta_id = mvm->aux_sta.sta_id;
+       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                 ADD_STA, 0) < 12)
+               cfg.bcast_sta_id = mvm->aux_sta.sta_id;
+       /*
+        * Fw doesn't use this sta anymore, pending deprecation via HOST API
+        * change.
+        */
+       else
+               cfg.bcast_sta_id = 0xff;
+
        cfg.tx_chains = cpu_to_le32(iwl_mvm_get_valid_tx_ant(mvm));
        cfg.rx_chains = cpu_to_le32(iwl_mvm_scan_rx_ant(mvm));
 
 
 
        memset(&cmd, 0, sizeof(cmd));
        cmd.sta_id = sta->sta_id;
-       cmd.mac_id_n_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mac_id,
-                                                            color));
+
+       if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP, ADD_STA,
+                                 0) >= 12 &&
+           sta->type == IWL_STA_AUX_ACTIVITY)
+               cmd.mac_id_n_color = cpu_to_le32(mac_id);
+       else
+               cmd.mac_id_n_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mac_id,
+                                                                    color));
+
        if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_STA_TYPE))
                cmd.station_type = sta->type;
 
        return 0;
 }
 
-int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm)
+int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm, u32 lmac_id)
 {
        int ret;
 
        if (ret)
                return ret;
 
-       ret = iwl_mvm_add_int_sta_with_queue(mvm, MAC_INDEX_AUX, 0, NULL,
+       /*
+        * In CDB NICs we need to specify which lmac to use for aux activity
+        * using the mac_id argument place to send lmac_id to the function
+        */
+       ret = iwl_mvm_add_int_sta_with_queue(mvm, lmac_id, 0, NULL,
                                             &mvm->aux_sta, &mvm->aux_queue,
                                             IWL_MVM_TX_FIFO_MCAST);
        if (ret) {
 
 int iwl_mvm_sta_tx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                       int tid, u8 queue, bool start);
 
-int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm);
+int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm, u32 lmac_id);
 int iwl_mvm_rm_aux_sta(struct iwl_mvm *mvm);
 
 int iwl_mvm_alloc_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif);
 int iwl_mvm_add_pasn_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
                         struct iwl_mvm_int_sta *sta, u8 *addr, u32 cipher,
                         u8 *key, u32 key_len);
-
 #endif /* __sta_h__ */
 
        } else {
                /* do the same in case of hot spot 2.0 */
                iwl_mvm_flush_sta(mvm, &mvm->aux_sta, true);
+               /* In newer version of this command an aux station is added only
+                * in cases of dedicated tx queue and need to be removed in end
+                * of use */
+               if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
+                                         ADD_STA, 0) >= 12)
+                       iwl_mvm_rm_aux_sta(mvm);
        }
 
        mutex_unlock(&mvm->mutex);