aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-31 14:15:19 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-03-31 14:15:19 -0400
commit35c9b4daf4c94b30e5cede597d98016ebf31b5ad (patch)
tree3248b5b3602218537ce0bce420fbde27a07b526b
parente698ea83a8531a6740dc657329dcf0728392d6ac (diff)
ide: add ->dma_clear method and remove ->dma_timeout one
All custom ->dma_timeout implementations call the generic one thus it is possible to have only an optional method for resetting DMA engine instead: * Add ->dma_clear method and convert hpt366, pdc202xx_old and sl82c105 host drivers to use it. * Always use ide_dma_timeout() in ide_dma_timeout_retry() and remove ->dma_timeout method. * Make ide_dma_timeout() static. There should be no functional changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/alim15x3.c1
-rw-r--r--drivers/ide/au1xxx-ide.c1
-rw-r--r--drivers/ide/cmd64x.c3
-rw-r--r--drivers/ide/cs5536.c1
-rw-r--r--drivers/ide/hpt366.c10
-rw-r--r--drivers/ide/icside.c1
-rw-r--r--drivers/ide/ide-dma-sff.c3
-rw-r--r--drivers/ide/ide-dma.c10
-rw-r--r--drivers/ide/it821x.c3
-rw-r--r--drivers/ide/ns87415.c1
-rw-r--r--drivers/ide/pdc202xx_old.c10
-rw-r--r--drivers/ide/pmac.c1
-rw-r--r--drivers/ide/sc1200.c1
-rw-r--r--drivers/ide/scc_pata.c1
-rw-r--r--drivers/ide/sgiioc4.c1
-rw-r--r--drivers/ide/siimage.c1
-rw-r--r--drivers/ide/sl82c105.c7
-rw-r--r--drivers/ide/tc86c001.c1
-rw-r--r--drivers/ide/trm290.c1
-rw-r--r--drivers/ide/tx4939ide.c1
-rw-r--r--include/linux/ide.h4
21 files changed, 16 insertions, 47 deletions
diff --git a/drivers/ide/alim15x3.c b/drivers/ide/alim15x3.c
index d516168464fc..d3faf0b97f42 100644
--- a/drivers/ide/alim15x3.c
+++ b/drivers/ide/alim15x3.c
@@ -509,7 +509,6 @@ static const struct ide_dma_ops ali_dma_ops = {
509 .dma_test_irq = ide_dma_test_irq, 509 .dma_test_irq = ide_dma_test_irq,
510 .dma_lost_irq = ide_dma_lost_irq, 510 .dma_lost_irq = ide_dma_lost_irq,
511 .dma_timer_expiry = ide_dma_sff_timer_expiry, 511 .dma_timer_expiry = ide_dma_sff_timer_expiry,
512 .dma_timeout = ide_dma_timeout,
513 .dma_sff_read_status = ide_dma_sff_read_status, 512 .dma_sff_read_status = ide_dma_sff_read_status,
514}; 513};
515 514
diff --git a/drivers/ide/au1xxx-ide.c b/drivers/ide/au1xxx-ide.c
index d3a9d6c15328..0c08c5e01f2a 100644
--- a/drivers/ide/au1xxx-ide.c
+++ b/drivers/ide/au1xxx-ide.c
@@ -353,7 +353,6 @@ static const struct ide_dma_ops au1xxx_dma_ops = {
353 .dma_end = auide_dma_end, 353 .dma_end = auide_dma_end,
354 .dma_test_irq = auide_dma_test_irq, 354 .dma_test_irq = auide_dma_test_irq,
355 .dma_lost_irq = ide_dma_lost_irq, 355 .dma_lost_irq = ide_dma_lost_irq,
356 .dma_timeout = ide_dma_timeout,
357}; 356};
358 357
359static int auide_ddma_init(ide_hwif_t *hwif, const struct ide_port_info *d) 358static int auide_ddma_init(ide_hwif_t *hwif, const struct ide_port_info *d)
diff --git a/drivers/ide/cmd64x.c b/drivers/ide/cmd64x.c
index bf0e3f470824..f0a49d2ff711 100644
--- a/drivers/ide/cmd64x.c
+++ b/drivers/ide/cmd64x.c
@@ -384,7 +384,6 @@ static const struct ide_dma_ops cmd64x_dma_ops = {
384 .dma_test_irq = cmd64x_dma_test_irq, 384 .dma_test_irq = cmd64x_dma_test_irq,
385 .dma_lost_irq = ide_dma_lost_irq, 385 .dma_lost_irq = ide_dma_lost_irq,
386 .dma_timer_expiry = ide_dma_sff_timer_expiry, 386 .dma_timer_expiry = ide_dma_sff_timer_expiry,
387 .dma_timeout = ide_dma_timeout,
388 .dma_sff_read_status = ide_dma_sff_read_status, 387 .dma_sff_read_status = ide_dma_sff_read_status,
389}; 388};
390 389
@@ -396,7 +395,6 @@ static const struct ide_dma_ops cmd646_rev1_dma_ops = {
396 .dma_test_irq = ide_dma_test_irq, 395 .dma_test_irq = ide_dma_test_irq,
397 .dma_lost_irq = ide_dma_lost_irq, 396 .dma_lost_irq = ide_dma_lost_irq,
398 .dma_timer_expiry = ide_dma_sff_timer_expiry, 397 .dma_timer_expiry = ide_dma_sff_timer_expiry,
399 .dma_timeout = ide_dma_timeout,
400 .dma_sff_read_status = ide_dma_sff_read_status, 398 .dma_sff_read_status = ide_dma_sff_read_status,
401}; 399};
402 400
@@ -408,7 +406,6 @@ static const struct ide_dma_ops cmd648_dma_ops = {
408 .dma_test_irq = cmd648_dma_test_irq, 406 .dma_test_irq = cmd648_dma_test_irq,
409 .dma_lost_irq = ide_dma_lost_irq, 407 .dma_lost_irq = ide_dma_lost_irq,
410 .dma_timer_expiry = ide_dma_sff_timer_expiry, 408 .dma_timer_expiry = ide_dma_sff_timer_expiry,
411 .dma_timeout = ide_dma_timeout,
412 .dma_sff_read_status = ide_dma_sff_read_status, 409 .dma_sff_read_status = ide_dma_sff_read_status,
413}; 410};
414 411
diff --git a/drivers/ide/cs5536.c b/drivers/ide/cs5536.c
index d5dcf4899607..353a35bbba63 100644
--- a/drivers/ide/cs5536.c
+++ b/drivers/ide/cs5536.c
@@ -236,7 +236,6 @@ static const struct ide_dma_ops cs5536_dma_ops = {
236 .dma_test_irq = ide_dma_test_irq, 236 .dma_test_irq = ide_dma_test_irq,
237 .dma_lost_irq = ide_dma_lost_irq, 237 .dma_lost_irq = ide_dma_lost_irq,
238 .dma_timer_expiry = ide_dma_sff_timer_expiry, 238 .dma_timer_expiry = ide_dma_sff_timer_expiry,
239 .dma_timeout = ide_dma_timeout,
240}; 239};
241 240
242static const struct ide_port_info cs5536_info = { 241static const struct ide_port_info cs5536_info = {
diff --git a/drivers/ide/hpt366.c b/drivers/ide/hpt366.c
index dbaf184ed9c5..a0eb87f59134 100644
--- a/drivers/ide/hpt366.c
+++ b/drivers/ide/hpt366.c
@@ -835,12 +835,6 @@ static int hpt370_dma_end(ide_drive_t *drive)
835 return ide_dma_end(drive); 835 return ide_dma_end(drive);
836} 836}
837 837
838static void hpt370_dma_timeout(ide_drive_t *drive)
839{
840 hpt370_irq_timeout(drive);
841 ide_dma_timeout(drive);
842}
843
844/* returns 1 if DMA IRQ issued, 0 otherwise */ 838/* returns 1 if DMA IRQ issued, 0 otherwise */
845static int hpt374_dma_test_irq(ide_drive_t *drive) 839static int hpt374_dma_test_irq(ide_drive_t *drive)
846{ 840{
@@ -1423,7 +1417,6 @@ static const struct ide_dma_ops hpt37x_dma_ops = {
1423 .dma_test_irq = hpt374_dma_test_irq, 1417 .dma_test_irq = hpt374_dma_test_irq,
1424 .dma_lost_irq = ide_dma_lost_irq, 1418 .dma_lost_irq = ide_dma_lost_irq,
1425 .dma_timer_expiry = ide_dma_sff_timer_expiry, 1419 .dma_timer_expiry = ide_dma_sff_timer_expiry,
1426 .dma_timeout = ide_dma_timeout,
1427 .dma_sff_read_status = ide_dma_sff_read_status, 1420 .dma_sff_read_status = ide_dma_sff_read_status,
1428}; 1421};
1429 1422
@@ -1435,7 +1428,7 @@ static const struct ide_dma_ops hpt370_dma_ops = {
1435 .dma_test_irq = ide_dma_test_irq, 1428 .dma_test_irq = ide_dma_test_irq,
1436 .dma_lost_irq = ide_dma_lost_irq, 1429 .dma_lost_irq = ide_dma_lost_irq,
1437 .dma_timer_expiry = ide_dma_sff_timer_expiry, 1430 .dma_timer_expiry = ide_dma_sff_timer_expiry,
1438 .dma_timeout = hpt370_dma_timeout, 1431 .dma_clear = hpt370_irq_timeout,
1439 .dma_sff_read_status = ide_dma_sff_read_status, 1432 .dma_sff_read_status = ide_dma_sff_read_status,
1440}; 1433};
1441 1434
@@ -1447,7 +1440,6 @@ static const struct ide_dma_ops hpt36x_dma_ops = {
1447 .dma_test_irq = ide_dma_test_irq, 1440 .dma_test_irq = ide_dma_test_irq,
1448 .dma_lost_irq = hpt366_dma_lost_irq, 1441 .dma_lost_irq = hpt366_dma_lost_irq,
1449 .dma_timer_expiry = ide_dma_sff_timer_expiry, 1442 .dma_timer_expiry = ide_dma_sff_timer_expiry,
1450 .dma_timeout = ide_dma_timeout,
1451 .dma_sff_read_status = ide_dma_sff_read_status, 1443 .dma_sff_read_status = ide_dma_sff_read_status,
1452}; 1444};
1453 1445
diff --git a/drivers/ide/icside.c b/drivers/ide/icside.c
index 51ce404fe532..f069f122ee6e 100644
--- a/drivers/ide/icside.c
+++ b/drivers/ide/icside.c
@@ -377,7 +377,6 @@ static const struct ide_dma_ops icside_v6_dma_ops = {
377 .dma_start = icside_dma_start, 377 .dma_start = icside_dma_start,
378 .dma_end = icside_dma_end, 378 .dma_end = icside_dma_end,
379 .dma_test_irq = icside_dma_test_irq, 379 .dma_test_irq = icside_dma_test_irq,
380 .dma_timeout = ide_dma_timeout,
381 .dma_lost_irq = ide_dma_lost_irq, 380 .dma_lost_irq = ide_dma_lost_irq,
382}; 381};
383#else 382#else
diff --git a/drivers/ide/ide-dma-sff.c b/drivers/ide/ide-dma-sff.c
index 75a9ea2e4c82..7836d7e03fff 100644
--- a/drivers/ide/ide-dma-sff.c
+++ b/drivers/ide/ide-dma-sff.c
@@ -338,9 +338,8 @@ const struct ide_dma_ops sff_dma_ops = {
338 .dma_start = ide_dma_start, 338 .dma_start = ide_dma_start,
339 .dma_end = ide_dma_end, 339 .dma_end = ide_dma_end,
340 .dma_test_irq = ide_dma_test_irq, 340 .dma_test_irq = ide_dma_test_irq,
341 .dma_timer_expiry = ide_dma_sff_timer_expiry,
342 .dma_timeout = ide_dma_timeout,
343 .dma_lost_irq = ide_dma_lost_irq, 341 .dma_lost_irq = ide_dma_lost_irq,
342 .dma_timer_expiry = ide_dma_sff_timer_expiry,
344 .dma_sff_read_status = ide_dma_sff_read_status, 343 .dma_sff_read_status = ide_dma_sff_read_status,
345}; 344};
346EXPORT_SYMBOL_GPL(sff_dma_ops); 345EXPORT_SYMBOL_GPL(sff_dma_ops);
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 3dbf80c15491..dc5d9bc4ced0 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -460,7 +460,7 @@ void ide_dma_lost_irq(ide_drive_t *drive)
460} 460}
461EXPORT_SYMBOL_GPL(ide_dma_lost_irq); 461EXPORT_SYMBOL_GPL(ide_dma_lost_irq);
462 462
463void ide_dma_timeout(ide_drive_t *drive) 463static void ide_dma_timeout(ide_drive_t *drive)
464{ 464{
465 ide_hwif_t *hwif = drive->hwif; 465 ide_hwif_t *hwif = drive->hwif;
466 466
@@ -473,7 +473,6 @@ void ide_dma_timeout(ide_drive_t *drive)
473 473
474 hwif->dma_ops->dma_end(drive); 474 hwif->dma_ops->dma_end(drive);
475} 475}
476EXPORT_SYMBOL_GPL(ide_dma_timeout);
477 476
478/* 477/*
479 * un-busy the port etc, and clear any pending DMA status. we want to 478 * un-busy the port etc, and clear any pending DMA status. we want to
@@ -483,6 +482,7 @@ EXPORT_SYMBOL_GPL(ide_dma_timeout);
483ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) 482ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
484{ 483{
485 ide_hwif_t *hwif = drive->hwif; 484 ide_hwif_t *hwif = drive->hwif;
485 const struct ide_dma_ops *dma_ops = hwif->dma_ops;
486 struct request *rq; 486 struct request *rq;
487 ide_startstop_t ret = ide_stopped; 487 ide_startstop_t ret = ide_stopped;
488 488
@@ -492,12 +492,14 @@ ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
492 492
493 if (error < 0) { 493 if (error < 0) {
494 printk(KERN_WARNING "%s: DMA timeout error\n", drive->name); 494 printk(KERN_WARNING "%s: DMA timeout error\n", drive->name);
495 (void)hwif->dma_ops->dma_end(drive); 495 (void)dma_ops->dma_end(drive);
496 ret = ide_error(drive, "dma timeout error", 496 ret = ide_error(drive, "dma timeout error",
497 hwif->tp_ops->read_status(hwif)); 497 hwif->tp_ops->read_status(hwif));
498 } else { 498 } else {
499 printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name); 499 printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name);
500 hwif->dma_ops->dma_timeout(drive); 500 if (dma_ops->dma_clear)
501 dma_ops->dma_clear(drive);
502 ide_dma_timeout(drive);
501 } 503 }
502 504
503 /* 505 /*
diff --git a/drivers/ide/it821x.c b/drivers/ide/it821x.c
index 0d4ac65cf949..51aa745246dc 100644
--- a/drivers/ide/it821x.c
+++ b/drivers/ide/it821x.c
@@ -511,9 +511,8 @@ static struct ide_dma_ops it821x_pass_through_dma_ops = {
511 .dma_start = it821x_dma_start, 511 .dma_start = it821x_dma_start,
512 .dma_end = it821x_dma_end, 512 .dma_end = it821x_dma_end,
513 .dma_test_irq = ide_dma_test_irq, 513 .dma_test_irq = ide_dma_test_irq,
514 .dma_timer_expiry = ide_dma_sff_timer_expiry,
515 .dma_timeout = ide_dma_timeout,
516 .dma_lost_irq = ide_dma_lost_irq, 514 .dma_lost_irq = ide_dma_lost_irq,
515 .dma_timer_expiry = ide_dma_sff_timer_expiry,
517 .dma_sff_read_status = ide_dma_sff_read_status, 516 .dma_sff_read_status = ide_dma_sff_read_status,
518}; 517};
519 518
diff --git a/drivers/ide/ns87415.c b/drivers/ide/ns87415.c
index 7b65fe5bf449..9039a373020f 100644
--- a/drivers/ide/ns87415.c
+++ b/drivers/ide/ns87415.c
@@ -306,7 +306,6 @@ static const struct ide_dma_ops ns87415_dma_ops = {
306 .dma_test_irq = ide_dma_test_irq, 306 .dma_test_irq = ide_dma_test_irq,
307 .dma_lost_irq = ide_dma_lost_irq, 307 .dma_lost_irq = ide_dma_lost_irq,
308 .dma_timer_expiry = ide_dma_sff_timer_expiry, 308 .dma_timer_expiry = ide_dma_sff_timer_expiry,
309 .dma_timeout = ide_dma_timeout,
310 .dma_sff_read_status = superio_dma_sff_read_status, 309 .dma_sff_read_status = superio_dma_sff_read_status,
311}; 310};
312 311
diff --git a/drivers/ide/pdc202xx_old.c b/drivers/ide/pdc202xx_old.c
index f7536d1943f7..248a54bd2386 100644
--- a/drivers/ide/pdc202xx_old.c
+++ b/drivers/ide/pdc202xx_old.c
@@ -258,12 +258,6 @@ static void pdc202xx_dma_lost_irq(ide_drive_t *drive)
258 ide_dma_lost_irq(drive); 258 ide_dma_lost_irq(drive);
259} 259}
260 260
261static void pdc202xx_dma_timeout(ide_drive_t *drive)
262{
263 pdc202xx_reset(drive);
264 ide_dma_timeout(drive);
265}
266
267static int init_chipset_pdc202xx(struct pci_dev *dev) 261static int init_chipset_pdc202xx(struct pci_dev *dev)
268{ 262{
269 unsigned long dmabase = pci_resource_start(dev, 4); 263 unsigned long dmabase = pci_resource_start(dev, 4);
@@ -336,7 +330,7 @@ static const struct ide_dma_ops pdc20246_dma_ops = {
336 .dma_test_irq = pdc202xx_dma_test_irq, 330 .dma_test_irq = pdc202xx_dma_test_irq,
337 .dma_lost_irq = pdc202xx_dma_lost_irq, 331 .dma_lost_irq = pdc202xx_dma_lost_irq,
338 .dma_timer_expiry = ide_dma_sff_timer_expiry, 332 .dma_timer_expiry = ide_dma_sff_timer_expiry,
339 .dma_timeout = pdc202xx_dma_timeout, 333 .dma_clear = pdc202xx_reset,
340 .dma_sff_read_status = ide_dma_sff_read_status, 334 .dma_sff_read_status = ide_dma_sff_read_status,
341}; 335};
342 336
@@ -348,7 +342,7 @@ static const struct ide_dma_ops pdc2026x_dma_ops = {
348 .dma_test_irq = pdc202xx_dma_test_irq, 342 .dma_test_irq = pdc202xx_dma_test_irq,
349 .dma_lost_irq = pdc202xx_dma_lost_irq, 343 .dma_lost_irq = pdc202xx_dma_lost_irq,
350 .dma_timer_expiry = ide_dma_sff_timer_expiry, 344 .dma_timer_expiry = ide_dma_sff_timer_expiry,
351 .dma_timeout = pdc202xx_dma_timeout, 345 .dma_clear = pdc202xx_reset,
352 .dma_sff_read_status = ide_dma_sff_read_status, 346 .dma_sff_read_status = ide_dma_sff_read_status,
353}; 347};
354 348
diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c
index 2bfcfedaa076..d15cc46a66e3 100644
--- a/drivers/ide/pmac.c
+++ b/drivers/ide/pmac.c
@@ -1650,7 +1650,6 @@ static const struct ide_dma_ops pmac_dma_ops = {
1650 .dma_start = pmac_ide_dma_start, 1650 .dma_start = pmac_ide_dma_start,
1651 .dma_end = pmac_ide_dma_end, 1651 .dma_end = pmac_ide_dma_end,
1652 .dma_test_irq = pmac_ide_dma_test_irq, 1652 .dma_test_irq = pmac_ide_dma_test_irq,
1653 .dma_timeout = ide_dma_timeout,
1654 .dma_lost_irq = pmac_ide_dma_lost_irq, 1653 .dma_lost_irq = pmac_ide_dma_lost_irq,
1655}; 1654};
1656 1655
diff --git a/drivers/ide/sc1200.c b/drivers/ide/sc1200.c
index 1c3a82914999..371549d18a01 100644
--- a/drivers/ide/sc1200.c
+++ b/drivers/ide/sc1200.c
@@ -291,7 +291,6 @@ static const struct ide_dma_ops sc1200_dma_ops = {
291 .dma_test_irq = ide_dma_test_irq, 291 .dma_test_irq = ide_dma_test_irq,
292 .dma_lost_irq = ide_dma_lost_irq, 292 .dma_lost_irq = ide_dma_lost_irq,
293 .dma_timer_expiry = ide_dma_sff_timer_expiry, 293 .dma_timer_expiry = ide_dma_sff_timer_expiry,
294 .dma_timeout = ide_dma_timeout,
295 .dma_sff_read_status = ide_dma_sff_read_status, 294 .dma_sff_read_status = ide_dma_sff_read_status,
296}; 295};
297 296
diff --git a/drivers/ide/scc_pata.c b/drivers/ide/scc_pata.c
index 0cc137cfe76d..64534d150b0c 100644
--- a/drivers/ide/scc_pata.c
+++ b/drivers/ide/scc_pata.c
@@ -872,7 +872,6 @@ static const struct ide_dma_ops scc_dma_ops = {
872 .dma_end = scc_dma_end, 872 .dma_end = scc_dma_end,
873 .dma_test_irq = scc_dma_test_irq, 873 .dma_test_irq = scc_dma_test_irq,
874 .dma_lost_irq = ide_dma_lost_irq, 874 .dma_lost_irq = ide_dma_lost_irq,
875 .dma_timeout = ide_dma_timeout,
876 .dma_timer_expiry = ide_dma_sff_timer_expiry, 875 .dma_timer_expiry = ide_dma_sff_timer_expiry,
877 .dma_sff_read_status = scc_dma_sff_read_status, 876 .dma_sff_read_status = scc_dma_sff_read_status,
878}; 877};
diff --git a/drivers/ide/sgiioc4.c b/drivers/ide/sgiioc4.c
index b12de8346c73..44df0c750bab 100644
--- a/drivers/ide/sgiioc4.c
+++ b/drivers/ide/sgiioc4.c
@@ -533,7 +533,6 @@ static const struct ide_dma_ops sgiioc4_dma_ops = {
533 .dma_end = sgiioc4_dma_end, 533 .dma_end = sgiioc4_dma_end,
534 .dma_test_irq = sgiioc4_dma_test_irq, 534 .dma_test_irq = sgiioc4_dma_test_irq,
535 .dma_lost_irq = sgiioc4_dma_lost_irq, 535 .dma_lost_irq = sgiioc4_dma_lost_irq,
536 .dma_timeout = ide_dma_timeout,
537}; 536};
538 537
539static const struct ide_port_info sgiioc4_port_info __devinitconst = { 538static const struct ide_port_info sgiioc4_port_info __devinitconst = {
diff --git a/drivers/ide/siimage.c b/drivers/ide/siimage.c
index 075cb1243b2a..e4973cd1fba9 100644
--- a/drivers/ide/siimage.c
+++ b/drivers/ide/siimage.c
@@ -715,7 +715,6 @@ static const struct ide_dma_ops sil_dma_ops = {
715 .dma_end = ide_dma_end, 715 .dma_end = ide_dma_end,
716 .dma_test_irq = siimage_dma_test_irq, 716 .dma_test_irq = siimage_dma_test_irq,
717 .dma_timer_expiry = ide_dma_sff_timer_expiry, 717 .dma_timer_expiry = ide_dma_sff_timer_expiry,
718 .dma_timeout = ide_dma_timeout,
719 .dma_lost_irq = ide_dma_lost_irq, 718 .dma_lost_irq = ide_dma_lost_irq,
720 .dma_sff_read_status = ide_dma_sff_read_status, 719 .dma_sff_read_status = ide_dma_sff_read_status,
721}; 720};
diff --git a/drivers/ide/sl82c105.c b/drivers/ide/sl82c105.c
index d25137b04e7a..d6f8977191c8 100644
--- a/drivers/ide/sl82c105.c
+++ b/drivers/ide/sl82c105.c
@@ -189,14 +189,13 @@ static void sl82c105_dma_start(ide_drive_t *drive)
189 ide_dma_start(drive); 189 ide_dma_start(drive);
190} 190}
191 191
192static void sl82c105_dma_timeout(ide_drive_t *drive) 192static void sl82c105_dma_clear(ide_drive_t *drive)
193{ 193{
194 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); 194 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
195 195
196 DBG(("sl82c105_dma_timeout(drive:%s)\n", drive->name)); 196 DBG(("sl82c105_dma_clear(drive:%s)\n", drive->name));
197 197
198 sl82c105_reset_host(dev); 198 sl82c105_reset_host(dev);
199 ide_dma_timeout(drive);
200} 199}
201 200
202static int sl82c105_dma_end(ide_drive_t *drive) 201static int sl82c105_dma_end(ide_drive_t *drive)
@@ -298,7 +297,7 @@ static const struct ide_dma_ops sl82c105_dma_ops = {
298 .dma_test_irq = ide_dma_test_irq, 297 .dma_test_irq = ide_dma_test_irq,
299 .dma_lost_irq = sl82c105_dma_lost_irq, 298 .dma_lost_irq = sl82c105_dma_lost_irq,
300 .dma_timer_expiry = ide_dma_sff_timer_expiry, 299 .dma_timer_expiry = ide_dma_sff_timer_expiry,
301 .dma_timeout = sl82c105_dma_timeout, 300 .dma_clear = sl82c105_dma_clear,
302 .dma_sff_read_status = ide_dma_sff_read_status, 301 .dma_sff_read_status = ide_dma_sff_read_status,
303}; 302};
304 303
diff --git a/drivers/ide/tc86c001.c b/drivers/ide/tc86c001.c
index 427d4b3c2c63..b4cf42dc8a6f 100644
--- a/drivers/ide/tc86c001.c
+++ b/drivers/ide/tc86c001.c
@@ -187,7 +187,6 @@ static const struct ide_dma_ops tc86c001_dma_ops = {
187 .dma_test_irq = ide_dma_test_irq, 187 .dma_test_irq = ide_dma_test_irq,
188 .dma_lost_irq = ide_dma_lost_irq, 188 .dma_lost_irq = ide_dma_lost_irq,
189 .dma_timer_expiry = ide_dma_sff_timer_expiry, 189 .dma_timer_expiry = ide_dma_sff_timer_expiry,
190 .dma_timeout = ide_dma_timeout,
191 .dma_sff_read_status = ide_dma_sff_read_status, 190 .dma_sff_read_status = ide_dma_sff_read_status,
192}; 191};
193 192
diff --git a/drivers/ide/trm290.c b/drivers/ide/trm290.c
index ed1496845a93..d6a950828e9f 100644
--- a/drivers/ide/trm290.c
+++ b/drivers/ide/trm290.c
@@ -314,7 +314,6 @@ static struct ide_dma_ops trm290_dma_ops = {
314 .dma_end = trm290_dma_end, 314 .dma_end = trm290_dma_end,
315 .dma_test_irq = trm290_dma_test_irq, 315 .dma_test_irq = trm290_dma_test_irq,
316 .dma_lost_irq = ide_dma_lost_irq, 316 .dma_lost_irq = ide_dma_lost_irq,
317 .dma_timeout = ide_dma_timeout,
318}; 317};
319 318
320static const struct ide_port_info trm290_chipset __devinitdata = { 319static const struct ide_port_info trm290_chipset __devinitdata = {
diff --git a/drivers/ide/tx4939ide.c b/drivers/ide/tx4939ide.c
index e0e0a803dde3..53f99853b065 100644
--- a/drivers/ide/tx4939ide.c
+++ b/drivers/ide/tx4939ide.c
@@ -632,7 +632,6 @@ static const struct ide_dma_ops tx4939ide_dma_ops = {
632 .dma_test_irq = tx4939ide_dma_test_irq, 632 .dma_test_irq = tx4939ide_dma_test_irq,
633 .dma_lost_irq = ide_dma_lost_irq, 633 .dma_lost_irq = ide_dma_lost_irq,
634 .dma_timer_expiry = ide_dma_sff_timer_expiry, 634 .dma_timer_expiry = ide_dma_sff_timer_expiry,
635 .dma_timeout = ide_dma_timeout,
636 .dma_sff_read_status = tx4939ide_dma_sff_read_status, 635 .dma_sff_read_status = tx4939ide_dma_sff_read_status,
637}; 636};
638 637
diff --git a/include/linux/ide.h b/include/linux/ide.h
index cb501bf78f7d..d3035f2f1250 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -716,8 +716,9 @@ struct ide_dma_ops {
716 int (*dma_end)(struct ide_drive_s *); 716 int (*dma_end)(struct ide_drive_s *);
717 int (*dma_test_irq)(struct ide_drive_s *); 717 int (*dma_test_irq)(struct ide_drive_s *);
718 void (*dma_lost_irq)(struct ide_drive_s *); 718 void (*dma_lost_irq)(struct ide_drive_s *);
719 /* below ones are optional */
719 int (*dma_timer_expiry)(struct ide_drive_s *); 720 int (*dma_timer_expiry)(struct ide_drive_s *);
720 void (*dma_timeout)(struct ide_drive_s *); 721 void (*dma_clear)(struct ide_drive_s *);
721 /* 722 /*
722 * The following method is optional and only required to be 723 * The following method is optional and only required to be
723 * implemented for the SFF-8038i compatible controllers. 724 * implemented for the SFF-8038i compatible controllers.
@@ -1461,7 +1462,6 @@ static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
1461#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */ 1462#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
1462 1463
1463void ide_dma_lost_irq(ide_drive_t *); 1464void ide_dma_lost_irq(ide_drive_t *);
1464void ide_dma_timeout(ide_drive_t *);
1465ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int); 1465ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int);
1466 1466
1467#else 1467#else