761 task.tf.feature = SETFEATURES_XFER;
762 task.tf.nsect = speed;
763
764 tp_ops->tf_load(drive, &task);
765
766 tp_ops->exec_command(hwif, ATA_CMD_SET_FEATURES);
767
768 if (drive->quirk_list == 2)
769 tp_ops->set_irq(hwif, 1);
770
771 error = __ide_wait_stat(drive, drive->ready_stat,
772 ATA_BUSY | ATA_DRQ | ATA_ERR,
773 WAIT_CMD, &stat);
774
775 SELECT_MASK(drive, 0);
776
777 enable_irq(hwif->irq);
778
779 if (error) {
780 (void) ide_dump_status(drive, "set_drive_speed_status", stat);
781 return error;
782 }
783
784 id[ATA_ID_UDMA_MODES] &= ~0xFF00;
785 id[ATA_ID_MWDMA_MODES] &= ~0x0F00;
786 id[ATA_ID_SWDMA_MODES] &= ~0x0F00;
787
788 skip:
789#ifdef CONFIG_BLK_DEV_IDEDMA
790 if (speed >= XFER_SW_DMA_0 && (drive->dev_flags & IDE_DFLAG_USING_DMA))
791 hwif->dma_ops->dma_host_set(drive, 1);
792 else if (hwif->dma_ops)
793 ide_dma_off_quietly(drive);
794#endif
795
796 if (speed >= XFER_UDMA_0) {
797 i = 1 << (speed - XFER_UDMA_0);
798 id[ATA_ID_UDMA_MODES] |= (i << 8 | i);
799 } else if (speed >= XFER_MW_DMA_0) {
800 i = 1 << (speed - XFER_MW_DMA_0);
801 id[ATA_ID_MWDMA_MODES] |= (i << 8 | i);