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>
This commit is contained in:
Bartlomiej Zolnierkiewicz 2009-03-31 20:15:19 +02:00
Родитель e698ea83a8
Коммит 35c9b4daf4
21 изменённых файлов: 16 добавлений и 47 удалений

Просмотреть файл

@ -509,7 +509,6 @@ static const struct ide_dma_ops ali_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -353,7 +353,6 @@ static const struct ide_dma_ops au1xxx_dma_ops = {
.dma_end = auide_dma_end, .dma_end = auide_dma_end,
.dma_test_irq = auide_dma_test_irq, .dma_test_irq = auide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timeout = ide_dma_timeout,
}; };
static int auide_ddma_init(ide_hwif_t *hwif, const struct ide_port_info *d) static int auide_ddma_init(ide_hwif_t *hwif, const struct ide_port_info *d)

Просмотреть файл

@ -384,7 +384,6 @@ static const struct ide_dma_ops cmd64x_dma_ops = {
.dma_test_irq = cmd64x_dma_test_irq, .dma_test_irq = cmd64x_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };
@ -396,7 +395,6 @@ static const struct ide_dma_ops cmd646_rev1_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };
@ -408,7 +406,6 @@ static const struct ide_dma_ops cmd648_dma_ops = {
.dma_test_irq = cmd648_dma_test_irq, .dma_test_irq = cmd648_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -236,7 +236,6 @@ static const struct ide_dma_ops cs5536_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
}; };
static const struct ide_port_info cs5536_info = { static const struct ide_port_info cs5536_info = {

Просмотреть файл

@ -835,12 +835,6 @@ static int hpt370_dma_end(ide_drive_t *drive)
return ide_dma_end(drive); return ide_dma_end(drive);
} }
static void hpt370_dma_timeout(ide_drive_t *drive)
{
hpt370_irq_timeout(drive);
ide_dma_timeout(drive);
}
/* returns 1 if DMA IRQ issued, 0 otherwise */ /* returns 1 if DMA IRQ issued, 0 otherwise */
static int hpt374_dma_test_irq(ide_drive_t *drive) static int hpt374_dma_test_irq(ide_drive_t *drive)
{ {
@ -1423,7 +1417,6 @@ static const struct ide_dma_ops hpt37x_dma_ops = {
.dma_test_irq = hpt374_dma_test_irq, .dma_test_irq = hpt374_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };
@ -1435,7 +1428,7 @@ static const struct ide_dma_ops hpt370_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = hpt370_dma_timeout, .dma_clear = hpt370_irq_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };
@ -1447,7 +1440,6 @@ static const struct ide_dma_ops hpt36x_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = hpt366_dma_lost_irq, .dma_lost_irq = hpt366_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -377,7 +377,6 @@ static const struct ide_dma_ops icside_v6_dma_ops = {
.dma_start = icside_dma_start, .dma_start = icside_dma_start,
.dma_end = icside_dma_end, .dma_end = icside_dma_end,
.dma_test_irq = icside_dma_test_irq, .dma_test_irq = icside_dma_test_irq,
.dma_timeout = ide_dma_timeout,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
}; };
#else #else

Просмотреть файл

@ -338,9 +338,8 @@ const struct ide_dma_ops sff_dma_ops = {
.dma_start = ide_dma_start, .dma_start = ide_dma_start,
.dma_end = ide_dma_end, .dma_end = ide_dma_end,
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };
EXPORT_SYMBOL_GPL(sff_dma_ops); EXPORT_SYMBOL_GPL(sff_dma_ops);

Просмотреть файл

@ -460,7 +460,7 @@ void ide_dma_lost_irq(ide_drive_t *drive)
} }
EXPORT_SYMBOL_GPL(ide_dma_lost_irq); EXPORT_SYMBOL_GPL(ide_dma_lost_irq);
void ide_dma_timeout(ide_drive_t *drive) static void ide_dma_timeout(ide_drive_t *drive)
{ {
ide_hwif_t *hwif = drive->hwif; ide_hwif_t *hwif = drive->hwif;
@ -473,7 +473,6 @@ void ide_dma_timeout(ide_drive_t *drive)
hwif->dma_ops->dma_end(drive); hwif->dma_ops->dma_end(drive);
} }
EXPORT_SYMBOL_GPL(ide_dma_timeout);
/* /*
* un-busy the port etc, and clear any pending DMA status. we want to * un-busy the port etc, and clear any pending DMA status. we want to
@ -483,6 +482,7 @@ EXPORT_SYMBOL_GPL(ide_dma_timeout);
ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
{ {
ide_hwif_t *hwif = drive->hwif; ide_hwif_t *hwif = drive->hwif;
const struct ide_dma_ops *dma_ops = hwif->dma_ops;
struct request *rq; struct request *rq;
ide_startstop_t ret = ide_stopped; ide_startstop_t ret = ide_stopped;
@ -492,12 +492,14 @@ ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
if (error < 0) { if (error < 0) {
printk(KERN_WARNING "%s: DMA timeout error\n", drive->name); printk(KERN_WARNING "%s: DMA timeout error\n", drive->name);
(void)hwif->dma_ops->dma_end(drive); (void)dma_ops->dma_end(drive);
ret = ide_error(drive, "dma timeout error", ret = ide_error(drive, "dma timeout error",
hwif->tp_ops->read_status(hwif)); hwif->tp_ops->read_status(hwif));
} else { } else {
printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name); printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name);
hwif->dma_ops->dma_timeout(drive); if (dma_ops->dma_clear)
dma_ops->dma_clear(drive);
ide_dma_timeout(drive);
} }
/* /*

Просмотреть файл

@ -511,9 +511,8 @@ static struct ide_dma_ops it821x_pass_through_dma_ops = {
.dma_start = it821x_dma_start, .dma_start = it821x_dma_start,
.dma_end = it821x_dma_end, .dma_end = it821x_dma_end,
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -306,7 +306,6 @@ static const struct ide_dma_ops ns87415_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = superio_dma_sff_read_status, .dma_sff_read_status = superio_dma_sff_read_status,
}; };

Просмотреть файл

@ -258,12 +258,6 @@ static void pdc202xx_dma_lost_irq(ide_drive_t *drive)
ide_dma_lost_irq(drive); ide_dma_lost_irq(drive);
} }
static void pdc202xx_dma_timeout(ide_drive_t *drive)
{
pdc202xx_reset(drive);
ide_dma_timeout(drive);
}
static int init_chipset_pdc202xx(struct pci_dev *dev) static int init_chipset_pdc202xx(struct pci_dev *dev)
{ {
unsigned long dmabase = pci_resource_start(dev, 4); unsigned long dmabase = pci_resource_start(dev, 4);
@ -336,7 +330,7 @@ static const struct ide_dma_ops pdc20246_dma_ops = {
.dma_test_irq = pdc202xx_dma_test_irq, .dma_test_irq = pdc202xx_dma_test_irq,
.dma_lost_irq = pdc202xx_dma_lost_irq, .dma_lost_irq = pdc202xx_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = pdc202xx_dma_timeout, .dma_clear = pdc202xx_reset,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };
@ -348,7 +342,7 @@ static const struct ide_dma_ops pdc2026x_dma_ops = {
.dma_test_irq = pdc202xx_dma_test_irq, .dma_test_irq = pdc202xx_dma_test_irq,
.dma_lost_irq = pdc202xx_dma_lost_irq, .dma_lost_irq = pdc202xx_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = pdc202xx_dma_timeout, .dma_clear = pdc202xx_reset,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -1650,7 +1650,6 @@ static const struct ide_dma_ops pmac_dma_ops = {
.dma_start = pmac_ide_dma_start, .dma_start = pmac_ide_dma_start,
.dma_end = pmac_ide_dma_end, .dma_end = pmac_ide_dma_end,
.dma_test_irq = pmac_ide_dma_test_irq, .dma_test_irq = pmac_ide_dma_test_irq,
.dma_timeout = ide_dma_timeout,
.dma_lost_irq = pmac_ide_dma_lost_irq, .dma_lost_irq = pmac_ide_dma_lost_irq,
}; };

Просмотреть файл

@ -291,7 +291,6 @@ static const struct ide_dma_ops sc1200_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -872,7 +872,6 @@ static const struct ide_dma_ops scc_dma_ops = {
.dma_end = scc_dma_end, .dma_end = scc_dma_end,
.dma_test_irq = scc_dma_test_irq, .dma_test_irq = scc_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timeout = ide_dma_timeout,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_sff_read_status = scc_dma_sff_read_status, .dma_sff_read_status = scc_dma_sff_read_status,
}; };

Просмотреть файл

@ -533,7 +533,6 @@ static const struct ide_dma_ops sgiioc4_dma_ops = {
.dma_end = sgiioc4_dma_end, .dma_end = sgiioc4_dma_end,
.dma_test_irq = sgiioc4_dma_test_irq, .dma_test_irq = sgiioc4_dma_test_irq,
.dma_lost_irq = sgiioc4_dma_lost_irq, .dma_lost_irq = sgiioc4_dma_lost_irq,
.dma_timeout = ide_dma_timeout,
}; };
static const struct ide_port_info sgiioc4_port_info __devinitconst = { static const struct ide_port_info sgiioc4_port_info __devinitconst = {

Просмотреть файл

@ -715,7 +715,6 @@ static const struct ide_dma_ops sil_dma_ops = {
.dma_end = ide_dma_end, .dma_end = ide_dma_end,
.dma_test_irq = siimage_dma_test_irq, .dma_test_irq = siimage_dma_test_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -189,14 +189,13 @@ static void sl82c105_dma_start(ide_drive_t *drive)
ide_dma_start(drive); ide_dma_start(drive);
} }
static void sl82c105_dma_timeout(ide_drive_t *drive) static void sl82c105_dma_clear(ide_drive_t *drive)
{ {
struct pci_dev *dev = to_pci_dev(drive->hwif->dev); struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
DBG(("sl82c105_dma_timeout(drive:%s)\n", drive->name)); DBG(("sl82c105_dma_clear(drive:%s)\n", drive->name));
sl82c105_reset_host(dev); sl82c105_reset_host(dev);
ide_dma_timeout(drive);
} }
static int sl82c105_dma_end(ide_drive_t *drive) static int sl82c105_dma_end(ide_drive_t *drive)
@ -298,7 +297,7 @@ static const struct ide_dma_ops sl82c105_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = sl82c105_dma_lost_irq, .dma_lost_irq = sl82c105_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = sl82c105_dma_timeout, .dma_clear = sl82c105_dma_clear,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -187,7 +187,6 @@ static const struct ide_dma_ops tc86c001_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = ide_dma_sff_read_status, .dma_sff_read_status = ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -314,7 +314,6 @@ static struct ide_dma_ops trm290_dma_ops = {
.dma_end = trm290_dma_end, .dma_end = trm290_dma_end,
.dma_test_irq = trm290_dma_test_irq, .dma_test_irq = trm290_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timeout = ide_dma_timeout,
}; };
static const struct ide_port_info trm290_chipset __devinitdata = { static const struct ide_port_info trm290_chipset __devinitdata = {

Просмотреть файл

@ -632,7 +632,6 @@ static const struct ide_dma_ops tx4939ide_dma_ops = {
.dma_test_irq = tx4939ide_dma_test_irq, .dma_test_irq = tx4939ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_timeout = ide_dma_timeout,
.dma_sff_read_status = tx4939ide_dma_sff_read_status, .dma_sff_read_status = tx4939ide_dma_sff_read_status,
}; };

Просмотреть файл

@ -716,8 +716,9 @@ struct ide_dma_ops {
int (*dma_end)(struct ide_drive_s *); int (*dma_end)(struct ide_drive_s *);
int (*dma_test_irq)(struct ide_drive_s *); int (*dma_test_irq)(struct ide_drive_s *);
void (*dma_lost_irq)(struct ide_drive_s *); void (*dma_lost_irq)(struct ide_drive_s *);
/* below ones are optional */
int (*dma_timer_expiry)(struct ide_drive_s *); int (*dma_timer_expiry)(struct ide_drive_s *);
void (*dma_timeout)(struct ide_drive_s *); void (*dma_clear)(struct ide_drive_s *);
/* /*
* The following method is optional and only required to be * The following method is optional and only required to be
* implemented for the SFF-8038i compatible controllers. * implemented for the SFF-8038i compatible controllers.
@ -1461,7 +1462,6 @@ static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
void ide_dma_lost_irq(ide_drive_t *); void ide_dma_lost_irq(ide_drive_t *);
void ide_dma_timeout(ide_drive_t *);
ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int); ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int);
#else #else