796
797
798
799 if (drive->current_speed == 0xff)
800 ide_config_drive_speed(drive, drive->desired_speed);
801
802 if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE)
803 return execute_drive_cmd(drive, rq);
804 else if (blk_pm_request(rq)) {
805 struct request_pm_state *pm = rq->data;
806#ifdef DEBUG_PM
807 printk("%s: start_power_step(step: %d)\n",
808 drive->name, pm->pm_step);
809#endif
810 startstop = ide_start_power_step(drive, rq);
811 if (startstop == ide_stopped &&
812 pm->pm_step == IDE_PM_COMPLETED)
813 ide_complete_pm_request(drive, rq);
814 return startstop;
815 } else if (!rq->rq_disk && blk_special_request(rq))
816
817
818
819
820
821
822
823
824 return ide_special_rq(drive, rq);
825
826 drv = *(ide_driver_t **)rq->rq_disk->private_data;
827
828 return drv->do_request(drive, rq, rq->sector);
829 }
830 return do_special(drive);
831kill_rq:
832 ide_kill_rq(drive, rq);
833 return ide_stopped;
834}
835
836