Skip to content

Commit

Permalink
ide: switch ide_task_ioctl() to use REQ_TYPE_ATA_TASKFILE requests
Browse files Browse the repository at this point in the history
Based on the earlier work by Tejun Heo.

There should be no functionality changes caused by this patch.

Cc: Tejun Heo <htejun@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
  • Loading branch information
Bartlomiej Zolnierkiewicz committed Jan 25, 2008
1 parent 813a0eb commit 14b89ef
Showing 1 changed file with 15 additions and 14 deletions.
29 changes: 15 additions & 14 deletions drivers/ide/ide-taskfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -806,28 +806,29 @@ int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
return err;
}

static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf)
{
struct request rq;

ide_init_drive_cmd(&rq);
rq.cmd_type = REQ_TYPE_ATA_TASK;
rq.buffer = buf;
return ide_do_drive_cmd(drive, &rq, ide_wait);
}

int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
{
void __user *p = (void __user *)arg;
int err = 0;
u8 args[7], *argbuf = args;
int argsize = 7;
u8 args[7];
ide_task_t task;

if (copy_from_user(args, p, 7))
return -EFAULT;
err = ide_wait_cmd_task(drive, argbuf);
if (copy_to_user(p, argbuf, argsize))

memset(&task, 0, sizeof(task));
memcpy(&task.tf_array[7], &args[1], 6);
task.tf.command = args[0];
task.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;

err = ide_no_data_taskfile(drive, &task);

args[0] = task.tf.command;
memcpy(&args[1], &task.tf_array[7], 6);

if (copy_to_user(p, args, 7))
err = -EFAULT;

return err;
}

Expand Down

0 comments on commit 14b89ef

Please sign in to comment.