aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-sff.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/libata-sff.c')
-rw-r--r--drivers/ata/libata-sff.c49
1 files changed, 16 insertions, 33 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 6223ec042c80..2a229a1d3211 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -396,28 +396,21 @@ void ata_bmdma_thaw(struct ata_port *ap)
396} 396}
397 397
398/** 398/**
399 * ata_bmdma_drive_eh - Perform EH with given methods for BMDMA controller 399 * ata_bmdma_error_handler - Stock error handler for BMDMA controller
400 * @ap: port to handle error for 400 * @ap: port to handle error for
401 * @prereset: prereset method (can be NULL)
402 * @softreset: softreset method (can be NULL)
403 * @hardreset: hardreset method (can be NULL)
404 * @postreset: postreset method (can be NULL)
405 * 401 *
406 * Handle error for ATA BMDMA controller. It can handle both 402 * Stock error handler for BMDMA controller. It can handle both
407 * PATA and SATA controllers. Many controllers should be able to 403 * PATA and SATA controllers. Many controllers should be able to
408 * use this EH as-is or with some added handling before and 404 * use this EH as-is or with some added handling before and
409 * after. 405 * after.
410 * 406 *
411 * This function is intended to be used for constructing
412 * ->error_handler callback by low level drivers.
413 *
414 * LOCKING: 407 * LOCKING:
415 * Kernel thread context (may sleep) 408 * Kernel thread context (may sleep)
416 */ 409 */
417void ata_bmdma_drive_eh(struct ata_port *ap, ata_prereset_fn_t prereset, 410void ata_bmdma_error_handler(struct ata_port *ap)
418 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
419 ata_postreset_fn_t postreset)
420{ 411{
412 ata_reset_fn_t softreset = ap->ops->softreset;
413 ata_reset_fn_t hardreset = ap->ops->hardreset;
421 struct ata_queued_cmd *qc; 414 struct ata_queued_cmd *qc;
422 unsigned long flags; 415 unsigned long flags;
423 int thaw = 0; 416 int thaw = 0;
@@ -460,29 +453,19 @@ void ata_bmdma_drive_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
460 ata_eh_thaw_port(ap); 453 ata_eh_thaw_port(ap);
461 454
462 /* PIO and DMA engines have been stopped, perform recovery */ 455 /* PIO and DMA engines have been stopped, perform recovery */
463 ata_do_eh(ap, prereset, softreset, hardreset, postreset);
464}
465
466/**
467 * ata_bmdma_error_handler - Stock error handler for BMDMA controller
468 * @ap: port to handle error for
469 *
470 * Stock error handler for BMDMA controller.
471 *
472 * LOCKING:
473 * Kernel thread context (may sleep)
474 */
475void ata_bmdma_error_handler(struct ata_port *ap)
476{
477 ata_reset_fn_t softreset = NULL, hardreset = NULL;
478 456
479 if (ap->ioaddr.ctl_addr) 457 /* ata_std_softreset and sata_std_hardreset are inherited to
480 softreset = ata_std_softreset; 458 * all SFF drivers from ata_sff_port_ops. Ignore softreset if
481 if (sata_scr_valid(&ap->link)) 459 * ctl isn't accessible. Ignore hardreset if SCR access isn't
482 hardreset = sata_std_hardreset; 460 * available.
461 */
462 if (softreset == ata_std_softreset && !ap->ioaddr.ctl_addr)
463 softreset = NULL;
464 if (hardreset == sata_std_hardreset && !sata_scr_valid(&ap->link))
465 hardreset = NULL;
483 466
484 ata_bmdma_drive_eh(ap, ata_std_prereset, softreset, hardreset, 467 ata_do_eh(ap, ap->ops->prereset, softreset, hardreset,
485 ata_std_postreset); 468 ap->ops->postreset);
486} 469}
487 470
488/** 471/**