summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <b.zolnierkiewicz@elka.pw.edu.pl>2004-06-23 20:02:40 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-06-23 20:02:40 -0700
commita223911077e3d57164c4b78bb810667d87115df1 (patch)
tree6cf60fddbf5e05827133e1e57d02affff0cd1d6d
parent260b2044f1d95b1a8be967435ed5f0ce5a505d91 (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.c53
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;
}