From 8e5861b51ef04c169dfda84c25638b1d3a919d87 Mon Sep 17 00:00:00 2001 From: Bartlomiej Zolnierkiewicz Date: Fri, 27 Mar 2009 12:46:38 +0100 Subject: [PATCH] --- yaml --- r: 137666 b: refs/heads/master c: 04d09b0e62f2180a7e3fa8578ed778eca0c454fd h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/ide/ide-taskfile.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 0a2d2ece296c..26094f8a0372 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b6308ee0c55acd2e943d849773c9f0a49c516317 +refs/heads/master: 04d09b0e62f2180a7e3fa8578ed778eca0c454fd diff --git a/trunk/drivers/ide/ide-taskfile.c b/trunk/drivers/ide/ide-taskfile.c index 249a707f88a4..647216c772d9 100644 --- a/trunk/drivers/ide/ide-taskfile.c +++ b/trunk/drivers/ide/ide-taskfile.c @@ -586,7 +586,14 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) if (req_task->in_flags.b.data) cmd.ftf_flags |= IDE_FTFLAG_IN_DATA; - switch(req_task->data_phase) { + if (req_task->req_cmd == IDE_DRIVE_TASK_RAW_WRITE) { + /* fixup data phase if needed */ + if (req_task->data_phase == TASKFILE_IN_DMAQ || + req_task->data_phase == TASKFILE_IN_DMA) + cmd.data_phase = TASKFILE_OUT_DMA; + } + + switch (cmd.data_phase) { case TASKFILE_MULTI_OUT: if (!drive->mult_count) { /* (hs): give up if multcount is not set */ @@ -601,6 +608,7 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) /* fall through */ case TASKFILE_OUT_DMAQ: case TASKFILE_OUT_DMA: + cmd.tf_flags |= IDE_TFLAG_WRITE; nsect = taskout / SECTOR_SIZE; data_buf = outbuf; break; @@ -641,9 +649,6 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) } } - if (req_task->req_cmd == IDE_DRIVE_TASK_RAW_WRITE) - cmd.tf_flags |= IDE_TFLAG_WRITE; - err = ide_raw_taskfile(drive, &cmd, data_buf, nsect); memcpy(req_task->hob_ports, &cmd.tf_array[0],