qla2x00_stop_firmware(scsi_qla_host_t *);
 
 extern int
-qla2x00_trace_control(scsi_qla_host_t *, uint16_t, dma_addr_t, uint16_t);
+qla2x00_enable_eft_trace(scsi_qla_host_t *, dma_addr_t, uint16_t);
+extern int
+qla2x00_disable_eft_trace(scsi_qla_host_t *);
 
 extern int
 qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t, uint16_t);
 
                        goto cont_alloc;
                }
 
-               rval = qla2x00_trace_control(ha, TC_ENABLE, eft_dma,
-                   EFT_NUM_BUFFERS);
+               rval = qla2x00_enable_eft_trace(ha, eft_dma, EFT_NUM_BUFFERS);
                if (rval) {
                        qla_printk(KERN_WARNING, ha, "Unable to initialize "
                            "EFT (%d).\n", rval);
                        clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
 
                        if (ha->eft) {
-                               rval = qla2x00_trace_control(ha, TC_ENABLE,
+                               rval = qla2x00_enable_eft_trace(ha,
                                    ha->eft_dma, EFT_NUM_BUFFERS);
                                if (rval) {
                                        qla_printk(KERN_WARNING, ha,
 
 }
 
 int
-qla2x00_trace_control(scsi_qla_host_t *ha, uint16_t ctrl, dma_addr_t eft_dma,
+qla2x00_enable_eft_trace(scsi_qla_host_t *ha, dma_addr_t eft_dma,
     uint16_t buffers)
 {
        int rval;
        DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
 
        mcp->mb[0] = MBC_TRACE_CONTROL;
-       mcp->mb[1] = ctrl;
-       mcp->out_mb = MBX_1|MBX_0;
+       mcp->mb[1] = TC_EFT_ENABLE;
+       mcp->mb[2] = LSW(eft_dma);
+       mcp->mb[3] = MSW(eft_dma);
+       mcp->mb[4] = LSW(MSD(eft_dma));
+       mcp->mb[5] = MSW(MSD(eft_dma));
+       mcp->mb[6] = buffers;
+       mcp->mb[7] = TC_AEN_DISABLE;
+       mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
        mcp->in_mb = MBX_1|MBX_0;
-       if (ctrl == TC_ENABLE) {
-               mcp->mb[2] = LSW(eft_dma);
-               mcp->mb[3] = MSW(eft_dma);
-               mcp->mb[4] = LSW(MSD(eft_dma));
-               mcp->mb[5] = MSW(MSD(eft_dma));
-               mcp->mb[6] = buffers;
-               mcp->mb[7] = 0;
-               mcp->out_mb |= MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2;
-       }
        mcp->tov = 30;
        mcp->flags = 0;
        rval = qla2x00_mailbox_command(ha, mcp);
+       if (rval != QLA_SUCCESS) {
+               DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x.\n",
+                   __func__, ha->host_no, rval, mcp->mb[0], mcp->mb[1]));
+       } else {
+               DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
+       }
+
+       return rval;
+}
 
+int
+qla2x00_disable_eft_trace(scsi_qla_host_t *ha)
+{
+       int rval;
+       mbx_cmd_t mc;
+       mbx_cmd_t *mcp = &mc;
+
+       if (!IS_FWI2_CAPABLE(ha))
+               return QLA_FUNCTION_FAILED;
+
+       DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
+
+       mcp->mb[0] = MBC_TRACE_CONTROL;
+       mcp->mb[1] = TC_EFT_DISABLE;
+       mcp->out_mb = MBX_1|MBX_0;
+       mcp->in_mb = MBX_1|MBX_0;
+       mcp->tov = 30;
+       mcp->flags = 0;
+       rval = qla2x00_mailbox_command(ha, mcp);
        if (rval != QLA_SUCCESS) {
                DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x mb[1]=%x.\n",
                    __func__, ha->host_no, rval, mcp->mb[0], mcp->mb[1]));