LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Borislav Petkov <bbpetkov@yahoo.de> To: <bzolnier@gmail.com> Cc: linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org, Borislav Petkov <bbpetkov@yahoo.de> Subject: [PATCH 8/12] ide-floppy: merge idefloppy_{input,output}_buffers Date: Sun, 13 Jan 2008 21:18:21 +0100 [thread overview] Message-ID: <1200255505-31418-9-git-send-email-bbpetkov@yahoo.de> (raw) In-Reply-To: <1200255505-31418-8-git-send-email-bbpetkov@yahoo.de> We merge idefloppy_{input,output}_buffers() into idefloppy_io_buffers() by introducing a 4th arg. called direction. According to its value we atapi_input_bytes() or atapi_output_bytes(). Also, this simplifies the interrupt handler logic a bit. Finally, rename idefloppy_io_buffers() to ide_floppy_io_buffers(). Signed-off-by: Borislav Petkov <bbpetkov@yahoo.de> --- drivers/ide/ide-floppy.c | 67 +++++++++++++-------------------------------- 1 files changed, 20 insertions(+), 47 deletions(-) diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index e7cc9dd..6c917fc 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c @@ -321,39 +321,8 @@ static int idefloppy_do_end_request(ide_drive_t *drive, int uptodate, int nsecs) return 0; } -static void idefloppy_input_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, unsigned int bcount) -{ - struct request *rq = pc->rq; - struct bio_vec *bvec; - struct req_iterator iter; - unsigned long flags; - char *data; - int count, done = 0; - - rq_for_each_segment(bvec, rq, iter) { - if (!bcount) - break; - - count = min(bvec->bv_len, bcount); - - data = bvec_kmap_irq(bvec, &flags); - drive->hwif->atapi_input_bytes(drive, data, count); - bvec_kunmap_irq(data, &flags); - - bcount -= count; - pc->b_count += count; - done += count; - } - - idefloppy_do_end_request(drive, 1, done >> 9); - - if (bcount) { - printk(KERN_ERR "%s: leftover data in idefloppy_input_buffers, bcount == %d\n", drive->name, bcount); - idefloppy_discard_data(drive, bcount); - } -} - -static void idefloppy_output_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, unsigned int bcount) +static void ide_floppy_io_buffers(ide_drive_t *drive, idefloppy_pc_t *pc, + unsigned int bcount, int direction) { struct request *rq = pc->rq; struct req_iterator iter; @@ -369,7 +338,10 @@ static void idefloppy_output_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, un count = min(bvec->bv_len, bcount); data = bvec_kmap_irq(bvec, &flags); - drive->hwif->atapi_output_bytes(drive, data, count); + if (direction) + drive->hwif->atapi_output_bytes(drive, data, count); + else + drive->hwif->atapi_input_bytes(drive, data, count); bvec_kunmap_irq(data, &flags); bcount -= count; @@ -380,8 +352,13 @@ static void idefloppy_output_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, un idefloppy_do_end_request(drive, 1, done >> 9); if (bcount) { - printk(KERN_ERR "%s: leftover data in idefloppy_output_buffers, bcount == %d\n", drive->name, bcount); - idefloppy_write_zeros(drive, bcount); + printk(KERN_ERR "%s: leftover data in idefloppy_output_buffers," + " bcount == %d\n", drive->name, bcount); + if (direction) + idefloppy_write_zeros(drive, bcount); + else + idefloppy_discard_data(drive, bcount); + } } @@ -516,8 +493,6 @@ static void idefloppy_retry_pc (ide_drive_t *drive) idefloppy_queue_pc_head(drive, pc, rq); } -typedef void (io_buf_t)(ide_drive_t *, idefloppy_pc_t *, unsigned int); - static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive) { idefloppy_floppy_t *floppy = drive->driver_data; @@ -525,7 +500,6 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive) idefloppy_pc_t *pc = floppy->pc; struct request *rq = pc->rq; xfer_func_t *xferfunc; - io_buf_t *iobuf_func; unsigned int temp; u16 bcount; u8 stat, ireason; @@ -625,24 +599,23 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive) " expected - allowing transfer\n"); } } - if (test_bit(PC_WRITING, &pc->flags)) { + if (test_bit(PC_WRITING, &pc->flags)) xferfunc = hwif->atapi_output_bytes; - iobuf_func = &idefloppy_output_buffers; - } else { + else xferfunc = hwif->atapi_input_bytes; - iobuf_func = &idefloppy_input_buffers; - } - if (pc->buffer != NULL) + if (pc->buffer) xferfunc(drive, pc->current_position, bcount); else - iobuf_func(drive, pc, bcount); + ide_floppy_io_buffers(drive, pc, bcount, + test_bit(PC_WRITING, &pc->flags)); /* Update the current position */ pc->actually_transferred += bcount; pc->current_position += bcount; - ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); /* And set the interrupt handler again */ + /* And set the interrupt handler again */ + ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); return ide_started; } -- 1.5.3.7
next prev parent reply other threads:[~2008-01-13 20:24 UTC|newest] Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-01-13 20:18 [PATCH 0/12] ide-floppy redux v2.5 Borislav Petkov 2008-01-13 20:18 ` [PATCH 1/12] ide-floppy: remove struct idefloppy_mode_parameter_header Borislav Petkov 2008-01-13 20:18 ` [PATCH 2/12] ide-floppy: remove struct idefloppy_flexible_disk_page Borislav Petkov 2008-01-13 20:18 ` [PATCH 3/12] ide-floppy: remove struct idefloppy_capacity_descriptor Borislav Petkov 2008-01-13 20:18 ` [PATCH 4/12] ide-floppy: factor out ioctl handlers from idefloppy_ioctl() Borislav Petkov 2008-01-13 20:18 ` [PATCH 5/12] ide-floppy: report DMA handling in idefloppy_pc_intr() properly Borislav Petkov 2008-01-13 20:18 ` [PATCH 6/12] ide-floppy: mv idefloppy_{should_,}report_error Borislav Petkov 2008-01-13 20:18 ` [PATCH 7/12] ide-floppy: remove IDEFLOPPY_DEBUG_BUGS macro Borislav Petkov 2008-01-13 20:18 ` Borislav Petkov [this message] 2008-01-13 20:18 ` [PATCH 9/12] ide-floppy: remove unused IDEFLOPPY_USE_READ12 Borislav Petkov 2008-01-13 20:18 ` [PATCH 10/12] ide-floppy: remove atomic test_*bit macros Borislav Petkov 2008-01-13 20:18 ` [PATCH 11/12] ide-floppy: remove IDEFLOPPY_DEBUG_INFO Borislav Petkov 2008-01-13 20:18 ` [PATCH 12/12] ide-floppy: fix most of the remaining checkpatch.pl issues Borislav Petkov 2008-01-15 20:12 ` (was: Re:...) [PATCH 12/12] ide-floppy: fix most of the remaining checkpatch.pl issues-v2 Borislav Petkov 2008-01-16 22:51 ` Bartlomiej Zolnierkiewicz 2008-01-14 21:51 ` [PATCH 11/12] ide-floppy: remove IDEFLOPPY_DEBUG_INFO Bartlomiej Zolnierkiewicz 2008-01-14 21:50 ` [PATCH 10/12] ide-floppy: remove atomic test_*bit macros Bartlomiej Zolnierkiewicz 2008-01-14 22:32 ` Bartlomiej Zolnierkiewicz 2008-01-15 20:09 ` Borislav Petkov 2008-01-16 22:08 ` Bartlomiej Zolnierkiewicz 2008-01-15 7:07 ` Borislav Petkov 2008-01-15 20:10 ` Borislav Petkov 2008-01-16 22:25 ` Bartlomiej Zolnierkiewicz 2008-01-14 21:38 ` [PATCH 8/12] ide-floppy: merge idefloppy_{input,output}_buffers Bartlomiej Zolnierkiewicz 2008-01-15 7:14 ` Borislav Petkov 2008-01-14 21:38 ` [PATCH 0/12] ide-floppy redux v2.5 Bartlomiej Zolnierkiewicz 2008-01-20 12:38 ` Borislav Petkov 2008-01-21 22:45 ` Bartlomiej Zolnierkiewicz 2008-01-22 5:32 ` Borislav Petkov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1200255505-31418-9-git-send-email-bbpetkov@yahoo.de \ --to=bbpetkov@yahoo.de \ --cc=bzolnier@gmail.com \ --cc=linux-ide@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).