diff options
| author | Bartlomiej Zolnierkiewicz <b.zolnierkiewicz@elka.pw.edu.pl> | 2004-06-23 20:02:40 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-06-23 20:02:40 -0700 |
| commit | a223911077e3d57164c4b78bb810667d87115df1 (patch) | |
| tree | 6cf60fddbf5e05827133e1e57d02affff0cd1d6d | |
| parent | 260b2044f1d95b1a8be967435ed5f0ce5a505d91 (diff) | |
[PATCH] ide: add task_multi_sectors() to ide-taskfile.c
Move common code from task_mulin_intr() and task_mulout_intr()
(CONFIG_IDE_TASKFILE_IO=y) to a task_multi_sectors() helper.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@elka.pw.edu.pl>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | drivers/ide/ide-taskfile.c | 53 |
1 files changed, 22 insertions, 31 deletions
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index e177dc7f8b6d..93c62856244c 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c @@ -512,6 +512,26 @@ EXPORT_SYMBOL(task_mulout_intr); #else /* !CONFIG_IDE_TASKFILE_IO */ +static inline void task_multi_sectors(ide_drive_t *drive, + struct request *rq, int rw) +{ + unsigned int nsect, msect = drive->mult_count; + + rq->errors = 0; + do { + nsect = rq->current_nr_sectors; + if (nsect > msect) + nsect = msect; + + task_sectors(drive, rq, nsect, rw); + + if (!rq->nr_sectors) + msect = 0; + else + msect -= nsect; + } while (msect); +} + static u8 wait_drive_not_busy(ide_drive_t *drive) { ide_hwif_t *hwif = HWIF(drive); @@ -585,8 +605,6 @@ EXPORT_SYMBOL(task_in_intr); ide_startstop_t task_mulin_intr (ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; - unsigned int msect = drive->mult_count; - unsigned int nsect; u8 stat = HWIF(drive)->INB(IDE_STATUS_REG); if (!OK_STAT(stat, DATA_READY, BAD_R_STAT)) { @@ -610,19 +628,7 @@ finish_rq: return ide_stopped; } - rq->errors = 0; - do { - nsect = rq->current_nr_sectors; - if (nsect > msect) - nsect = msect; - - task_sectors(drive, rq, nsect, IDE_PIO_IN); - - if (!rq->nr_sectors) - msect = 0; - else - msect -= nsect; - } while (msect); + task_multi_sectors(drive, rq, IDE_PIO_IN); /* If it was the last datablock check status and finish transfer. */ if (!rq->nr_sectors) { @@ -712,8 +718,6 @@ EXPORT_SYMBOL(pre_task_out_intr); ide_startstop_t task_mulout_intr (ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; - unsigned int msect = drive->mult_count; - unsigned int nsect; u8 stat; stat = HWIF(drive)->INB(IDE_STATUS_REG); @@ -748,20 +752,7 @@ ide_startstop_t task_mulout_intr (ide_drive_t *drive) /* Still data left to transfer. */ ide_set_handler(drive, &task_mulout_intr, WAIT_WORSTCASE, NULL); - - rq->errors = 0; - do { - nsect = rq->current_nr_sectors; - if (nsect > msect) - nsect = msect; - - task_sectors(drive, rq, nsect, IDE_PIO_OUT); - - if (!rq->nr_sectors) - msect = 0; - else - msect -= nsect; - } while (msect); + task_multi_sectors(drive, rq, IDE_PIO_OUT); return ide_started; } |
