forked from luck/tmp_suning_uos_patched
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:
parent
e698ea83a8
commit
35c9b4daf4
|
@ -509,7 +509,6 @@ static const struct ide_dma_ops ali_dma_ops = {
|
|||
.dma_test_irq = ide_dma_test_irq,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_test_irq = auide_dma_test_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)
|
||||
|
|
|
@ -384,7 +384,6 @@ static const struct ide_dma_ops cmd64x_dma_ops = {
|
|||
.dma_test_irq = cmd64x_dma_test_irq,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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 */
|
||||
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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_lost_irq = ide_dma_lost_irq,
|
||||
.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,
|
||||
};
|
||||
|
||||
|
@ -1447,7 +1440,6 @@ static const struct ide_dma_ops hpt36x_dma_ops = {
|
|||
.dma_test_irq = ide_dma_test_irq,
|
||||
.dma_lost_irq = hpt366_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_end = icside_dma_end,
|
||||
.dma_test_irq = icside_dma_test_irq,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
};
|
||||
#else
|
||||
|
|
|
@ -338,9 +338,8 @@ const struct ide_dma_ops sff_dma_ops = {
|
|||
.dma_start = ide_dma_start,
|
||||
.dma_end = ide_dma_end,
|
||||
.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_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_sff_read_status = ide_dma_sff_read_status,
|
||||
};
|
||||
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);
|
||||
|
||||
void ide_dma_timeout(ide_drive_t *drive)
|
||||
static void ide_dma_timeout(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
|
||||
|
@ -473,7 +473,6 @@ void ide_dma_timeout(ide_drive_t *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
|
||||
|
@ -483,6 +482,7 @@ EXPORT_SYMBOL_GPL(ide_dma_timeout);
|
|||
ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
const struct ide_dma_ops *dma_ops = hwif->dma_ops;
|
||||
struct request *rq;
|
||||
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) {
|
||||
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",
|
||||
hwif->tp_ops->read_status(hwif));
|
||||
} else {
|
||||
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_end = it821x_dma_end,
|
||||
.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_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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_lost_irq = pdc202xx_dma_lost_irq,
|
||||
.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,
|
||||
};
|
||||
|
||||
|
@ -348,7 +342,7 @@ static const struct ide_dma_ops pdc2026x_dma_ops = {
|
|||
.dma_test_irq = pdc202xx_dma_test_irq,
|
||||
.dma_lost_irq = pdc202xx_dma_lost_irq,
|
||||
.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,
|
||||
};
|
||||
|
||||
|
|
|
@ -1650,7 +1650,6 @@ static const struct ide_dma_ops pmac_dma_ops = {
|
|||
.dma_start = pmac_ide_dma_start,
|
||||
.dma_end = pmac_ide_dma_end,
|
||||
.dma_test_irq = pmac_ide_dma_test_irq,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_test_irq = scc_dma_test_irq,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.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_test_irq = sgiioc4_dma_test_irq,
|
||||
.dma_lost_irq = sgiioc4_dma_lost_irq,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
};
|
||||
|
||||
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_test_irq = siimage_dma_test_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
.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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
DBG(("sl82c105_dma_timeout(drive:%s)\n", drive->name));
|
||||
DBG(("sl82c105_dma_clear(drive:%s)\n", drive->name));
|
||||
|
||||
sl82c105_reset_host(dev);
|
||||
ide_dma_timeout(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_lost_irq = sl82c105_dma_lost_irq,
|
||||
.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,
|
||||
};
|
||||
|
||||
|
|
|
@ -187,7 +187,6 @@ static const struct ide_dma_ops tc86c001_dma_ops = {
|
|||
.dma_test_irq = ide_dma_test_irq,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_test_irq = trm290_dma_test_irq,
|
||||
.dma_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
};
|
||||
|
||||
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_lost_irq = ide_dma_lost_irq,
|
||||
.dma_timer_expiry = ide_dma_sff_timer_expiry,
|
||||
.dma_timeout = ide_dma_timeout,
|
||||
.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_test_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 *);
|
||||
void (*dma_timeout)(struct ide_drive_s *);
|
||||
void (*dma_clear)(struct ide_drive_s *);
|
||||
/*
|
||||
* The following method is optional and only required to be
|
||||
* 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 */
|
||||
|
||||
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);
|
||||
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue
Block a user