]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ide: factor out processing of special commands from ide_special_rq()
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tue, 24 Mar 2009 22:22:44 +0000 (23:22 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tue, 24 Mar 2009 22:22:44 +0000 (23:22 +0100)
Factor out processing of special commands from ide_special_rq()
to ide_do_devset() and ide_do_park_unpark().

There should be no functional changes caused by this patch.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide-io.c

index 56be3375bee448919399d70447e78e034667dc34..c37883ae266277e56b1801f96bd940f219365be7 100644 (file)
@@ -514,46 +514,53 @@ int ide_devset_execute(ide_drive_t *drive, const struct ide_devset *setting,
        return ret;
 }
 
+static ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq)
+{
+       int err, (*setfunc)(ide_drive_t *, int) = rq->special;
+
+       err = setfunc(drive, *(int *)&rq->cmd[1]);
+       if (err)
+               rq->errors = err;
+       else
+               err = 1;
+       ide_end_request(drive, err, 0);
+       return ide_stopped;
+}
+
+static ide_startstop_t ide_do_park_unpark(ide_drive_t *drive, struct request *rq)
+{
+       ide_task_t task;
+       struct ide_taskfile *tf = &task.tf;
+
+       memset(&task, 0, sizeof(task));
+       if (rq->cmd[0] == REQ_PARK_HEADS) {
+               drive->sleep = *(unsigned long *)rq->special;
+               drive->dev_flags |= IDE_DFLAG_SLEEPING;
+               tf->command = ATA_CMD_IDLEIMMEDIATE;
+               tf->feature = 0x44;
+               tf->lbal = 0x4c;
+               tf->lbam = 0x4e;
+               tf->lbah = 0x55;
+               task.tf_flags |= IDE_TFLAG_CUSTOM_HANDLER;
+       } else          /* cmd == REQ_UNPARK_HEADS */
+               tf->command = ATA_CMD_CHK_POWER;
+
+       task.tf_flags |= IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
+       task.rq = rq;
+       drive->hwif->data_phase = task.data_phase = TASKFILE_NO_DATA;
+       return do_rw_taskfile(drive, &task);
+}
+
 static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
 {
        u8 cmd = rq->cmd[0];
 
-       if (cmd == REQ_PARK_HEADS || cmd == REQ_UNPARK_HEADS) {
-               ide_task_t task;
-               struct ide_taskfile *tf = &task.tf;
-
-               memset(&task, 0, sizeof(task));
-               if (cmd == REQ_PARK_HEADS) {
-                       drive->sleep = *(unsigned long *)rq->special;
-                       drive->dev_flags |= IDE_DFLAG_SLEEPING;
-                       tf->command = ATA_CMD_IDLEIMMEDIATE;
-                       tf->feature = 0x44;
-                       tf->lbal = 0x4c;
-                       tf->lbam = 0x4e;
-                       tf->lbah = 0x55;
-                       task.tf_flags |= IDE_TFLAG_CUSTOM_HANDLER;
-               } else          /* cmd == REQ_UNPARK_HEADS */
-                       tf->command = ATA_CMD_CHK_POWER;
-
-               task.tf_flags |= IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
-               task.rq = rq;
-               drive->hwif->data_phase = task.data_phase = TASKFILE_NO_DATA;
-               return do_rw_taskfile(drive, &task);
-       }
-
        switch (cmd) {
+       case REQ_PARK_HEADS:
+       case REQ_UNPARK_HEADS:
+               return ide_do_park_unpark(drive, rq);
        case REQ_DEVSET_EXEC:
-       {
-               int err, (*setfunc)(ide_drive_t *, int) = rq->special;
-
-               err = setfunc(drive, *(int *)&rq->cmd[1]);
-               if (err)
-                       rq->errors = err;
-               else
-                       err = 1;
-               ide_end_request(drive, err, 0);
-               return ide_stopped;
-       }
+               return ide_do_devset(drive, rq);
        case REQ_DRIVE_RESET:
                return ide_do_reset(drive);
        default: