goto error;
 
        /* Tx queue(s) */
-       for (txq_id = 0; txq_id < TFD_QUEUE_MAX; txq_id++) {
+       for (txq_id = 0; txq_id <= priv->hw_params.max_txq_num; txq_id++) {
                slots_num = (txq_id == IWL_CMD_QUEUE_NUM) ?
                                TFD_CMD_SLOTS : TFD_TX_CMD_SLOTS;
                rc = iwl_tx_queue_init(priv, &priv->txq[txq_id], slots_num,
        int txq_id;
 
        /* Tx queues */
-       for (txq_id = 0; txq_id < TFD_QUEUE_MAX; txq_id++)
+       for (txq_id = 0; txq_id <= priv->hw_params.max_txq_num; txq_id++)
                iwl_tx_queue_free(priv, txq_id);
 }
 
        iwl_write_prph(priv, ALM_SCD_MODE_REG, 0);
 
        /* reset TFD queues */
-       for (txq_id = 0; txq_id < TFD_QUEUE_MAX; txq_id++) {
+       for (txq_id = 0; txq_id <= priv->hw_params.max_txq_num; txq_id++) {
                iwl_write_direct32(priv, FH39_TCSR_CONFIG(txq_id), 0x0);
                iwl_poll_direct_bit(priv, FH39_TSSR_TX_STATUS,
                                FH39_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(txq_id),
                return -ENOMEM;
        }
 
+       /* Assign number of Usable TX queues */
+       priv->hw_params.max_txq_num = TFD_QUEUE_MAX;
+
        priv->hw_params.tfd_size = sizeof(struct iwl3945_tfd);
        priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_3K;
        priv->hw_params.max_pkt_size = 2342;