aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-floppy.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/ide-floppy.c')
-rw-r--r--drivers/ide/ide-floppy.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 0f3602a5efb0..b3689437269f 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -399,12 +399,8 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
399 * service routine. In interrupt mode, the device sends an interrupt to signal 399 * service routine. In interrupt mode, the device sends an interrupt to signal
400 * that it is ready to receive a packet. However, we need to delay about 2-3 400 * that it is ready to receive a packet. However, we need to delay about 2-3
401 * ticks before issuing the packet or we gets in trouble. 401 * ticks before issuing the packet or we gets in trouble.
402 *
403 * So, follow carefully. transfer_pc1 is called as an interrupt (or directly).
404 * In either case, when the device says it's ready for a packet, we schedule
405 * the packet transfer to occur about 2-3 ticks later in transfer_pc2.
406 */ 402 */
407static int idefloppy_transfer_pc2(ide_drive_t *drive) 403static int idefloppy_transfer_pc(ide_drive_t *drive)
408{ 404{
409 idefloppy_floppy_t *floppy = drive->driver_data; 405 idefloppy_floppy_t *floppy = drive->driver_data;
410 406
@@ -415,7 +411,13 @@ static int idefloppy_transfer_pc2(ide_drive_t *drive)
415 return IDEFLOPPY_WAIT_CMD; 411 return IDEFLOPPY_WAIT_CMD;
416} 412}
417 413
418static ide_startstop_t idefloppy_transfer_pc1(ide_drive_t *drive) 414
415/*
416 * Called as an interrupt (or directly). When the device says it's ready for a
417 * packet, we schedule the packet transfer to occur about 2-3 ticks later in
418 * transfer_pc.
419 */
420static ide_startstop_t idefloppy_start_pc_transfer(ide_drive_t *drive)
419{ 421{
420 idefloppy_floppy_t *floppy = drive->driver_data; 422 idefloppy_floppy_t *floppy = drive->driver_data;
421 struct ide_atapi_pc *pc = floppy->pc; 423 struct ide_atapi_pc *pc = floppy->pc;
@@ -432,7 +434,7 @@ static ide_startstop_t idefloppy_transfer_pc1(ide_drive_t *drive)
432 */ 434 */
433 if (pc->flags & PC_FLAG_ZIP_DRIVE) { 435 if (pc->flags & PC_FLAG_ZIP_DRIVE) {
434 timeout = floppy->ticks; 436 timeout = floppy->ticks;
435 expiry = &idefloppy_transfer_pc2; 437 expiry = &idefloppy_transfer_pc;
436 } else { 438 } else {
437 timeout = IDEFLOPPY_WAIT_CMD; 439 timeout = IDEFLOPPY_WAIT_CMD;
438 expiry = NULL; 440 expiry = NULL;
@@ -483,7 +485,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
483 485
484 pc->retries++; 486 pc->retries++;
485 487
486 return ide_issue_pc(drive, pc, idefloppy_transfer_pc1, 488 return ide_issue_pc(drive, pc, idefloppy_start_pc_transfer,
487 IDEFLOPPY_WAIT_CMD, NULL); 489 IDEFLOPPY_WAIT_CMD, NULL);
488} 490}
489 491