const struct carl9170fw_otus_desc *otus_desc;
        const struct carl9170fw_chk_desc *chk_desc;
        const struct carl9170fw_last_desc *last_desc;
+       const struct carl9170fw_txsq_desc *txsq_desc;
 
        last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC,
                sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER);
                }
        }
 
+       txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC,
+               sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER);
+
+       if (txsq_desc) {
+               ar->fw.tx_seq_table = le32_to_cpu(txsq_desc->seq_table_addr);
+               if (!valid_cpu_addr(ar->fw.tx_seq_table))
+                       return -EINVAL;
+       } else {
+               ar->fw.tx_seq_table = 0;
+       }
+
 #undef SUPPORTED
        return 0;
 }
 
                        goto unlock;
        }
 
+       if (ar->fw.tx_seq_table) {
+               err = carl9170_write_reg(ar, ar->fw.tx_seq_table + vif_id * 4,
+                                        0);
+               if (err)
+                       goto unlock;
+       }
+
 unlock:
        if (err && (vif_id >= 0)) {
                vif_priv->active = false;
 
        if (unlikely(info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM))
                txc->s.misc |= CARL9170_TX_SUPER_MISC_CAB;
 
+       if (unlikely(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ))
+               txc->s.misc |= CARL9170_TX_SUPER_MISC_ASSIGN_SEQ;
+
        if (unlikely(ieee80211_is_probe_resp(hdr->frame_control)))
                txc->s.misc |= CARL9170_TX_SUPER_MISC_FILL_IN_TSF;