ide: factor out processing of special commands from ide_special_rq()

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>
This commit is contained in:
Bartlomiej Zolnierkiewicz 2009-03-24 23:22:44 +01:00
parent 1866082339
commit 1bc6daae4a

View file

@ -514,16 +514,26 @@ int ide_devset_execute(ide_drive_t *drive, const struct ide_devset *setting,
return ret;
}
static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
static ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq)
{
u8 cmd = rq->cmd[0];
int err, (*setfunc)(ide_drive_t *, int) = rq->special;
if (cmd == REQ_PARK_HEADS || cmd == REQ_UNPARK_HEADS) {
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 (cmd == REQ_PARK_HEADS) {
if (rq->cmd[0] == REQ_PARK_HEADS) {
drive->sleep = *(unsigned long *)rq->special;
drive->dev_flags |= IDE_DFLAG_SLEEPING;
tf->command = ATA_CMD_IDLEIMMEDIATE;
@ -541,19 +551,16 @@ static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
return do_rw_taskfile(drive, &task);
}
switch (cmd) {
case REQ_DEVSET_EXEC:
static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
{
int err, (*setfunc)(ide_drive_t *, int) = rq->special;
u8 cmd = rq->cmd[0];
err = setfunc(drive, *(int *)&rq->cmd[1]);
if (err)
rq->errors = err;
else
err = 1;
ide_end_request(drive, err, 0);
return ide_stopped;
}
switch (cmd) {
case REQ_PARK_HEADS:
case REQ_UNPARK_HEADS:
return ide_do_park_unpark(drive, rq);
case REQ_DEVSET_EXEC:
return ide_do_devset(drive, rq);
case REQ_DRIVE_RESET:
return ide_do_reset(drive);
default: