diff options
Diffstat (limited to 'drivers/ide/ide-floppy.c')
-rw-r--r-- | drivers/ide/ide-floppy.c | 18 |
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 | */ |
407 | static int idefloppy_transfer_pc2(ide_drive_t *drive) | 403 | static 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 | ||
418 | static 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 | */ | ||
420 | static 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 | ||