static void ide_pio_datablock(ide_drive_t *drive, struct request *rq, unsigned int write) { u8 saved_io_32bit = drive->io_32bit; if (rq->bio) /* fs request */ rq->errors = 0; if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { ide_task_t *task = rq->special; if (task->tf_flags & IDE_TFLAG_IO_16BIT) drive->io_32bit = 0; } touch_softlockup_watchdog(); switch (drive->hwif->data_phase) { case TASKFILE_MULTI_IN: case TASKFILE_MULTI_OUT: ide_pio_multi(drive, rq, write); break; default: ide_pio_sector(drive, rq, write); break; } drive->io_32bit = saved_io_32bit; }
static void ide_pio_multi(ide_drive_t *drive, unsigned int write) { unsigned int nsect; nsect = min_t(unsigned int, drive->hwif->nleft, drive->mult_count); while (nsect--) ide_pio_sector(drive, write); }