]> err.no Git - linux-2.6/blobdiff - drivers/ide/ide-floppy.c
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
[linux-2.6] / drivers / ide / ide-floppy.c
index f429be88c4f9d568846baeb765181ccefc479ddd..a21f585b1caabe1ad36a8c0a382be7f8b0d8bc74 100644 (file)
@@ -1258,19 +1258,25 @@ static void idefloppy_create_rw_cmd (idefloppy_floppy_t *floppy, idefloppy_pc_t
        set_bit(PC_DMA_RECOMMENDED, &pc->flags);
 }
 
-static int
+static void
 idefloppy_blockpc_cmd(idefloppy_floppy_t *floppy, idefloppy_pc_t *pc, struct request *rq)
 {
-       /*
-        * just support eject for now, it would not be hard to make the
-        * REQ_BLOCK_PC support fully-featured
-        */
-       if (rq->cmd[0] != IDEFLOPPY_START_STOP_CMD)
-               return 1;
-
        idefloppy_init_pc(pc);
+       pc->callback = &idefloppy_rw_callback;
        memcpy(pc->c, rq->cmd, sizeof(pc->c));
-       return 0;
+       pc->rq = rq;
+       pc->b_count = rq->data_len;
+       if (rq->data_len && rq_data_dir(rq) == WRITE)
+               set_bit(PC_WRITING, &pc->flags);
+       pc->buffer = rq->data;
+       if (rq->bio)
+               set_bit(PC_DMA_RECOMMENDED, &pc->flags);
+               
+       /*
+        * possibly problematic, doesn't look like ide-floppy correctly
+        * handled scattered requests if dma fails...
+        */
+       pc->request_transfer = pc->buffer_size = rq->data_len;
 }
 
 /*
@@ -1317,10 +1323,7 @@ static ide_startstop_t idefloppy_do_request (ide_drive_t *drive, struct request
                pc = (idefloppy_pc_t *) rq->buffer;
        } else if (blk_pc_request(rq)) {
                pc = idefloppy_next_pc_storage(drive);
-               if (idefloppy_blockpc_cmd(floppy, pc, rq)) {
-                       idefloppy_do_end_request(drive, 0, 0);
-                       return ide_stopped;
-               }
+               idefloppy_blockpc_cmd(floppy, pc, rq);
        } else {
                blk_dump_rq_flags(rq,
                        "ide-floppy: unsupported command in queue");