diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-26 22:25:24 +0200 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-26 22:25:24 +0200 |
commit | 1fd1890594bd355a4217f5658a34763e77decee3 (patch) | |
tree | ee8bd668648a9d3db01a7c99d73eee7453efe98b | |
parent | 6c61064162e6a9965a062b445c6bd6c8ed019183 (diff) |
ide: add IDE_HFLAG_SERIALIZE_DMA host flag
* Add IDE_HFLAG_SERIALIZE_DMA host flag to serialize ports
if DMA is available and handle it in ide_init_port().
* Convert sl82c105 host driver to use this new flag.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r-- | drivers/ide/ide-probe.c | 7 | ||||
-rw-r--r-- | drivers/ide/pci/sl82c105.c | 5 | ||||
-rw-r--r-- | include/linux/ide.h | 2 |
3 files changed, 9 insertions, 5 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index e0316869eb6..b58eb792172 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c @@ -1367,8 +1367,11 @@ static void ide_init_port(ide_hwif_t *hwif, unsigned int port, if (hwif->chipset != ide_dtc2278 || hwif->channel == 0) hwif->port_ops = d->port_ops; - if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) - hwif->mate->serialized = hwif->serialized = 1; + if ((d->host_flags & IDE_HFLAG_SERIALIZE) || + ((d->host_flags & IDE_HFLAG_SERIALIZE_DMA) && hwif->dma_base)) { + if (hwif->mate) + hwif->mate->serialized = hwif->serialized = 1; + } hwif->swdma_mask = d->swdma_mask; hwif->mwdma_mask = d->mwdma_mask; diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 2c2fe59a0d9..c2127cbdecd 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c @@ -296,9 +296,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) hwif->dma_start = &sl82c105_dma_start; hwif->ide_dma_end = &sl82c105_dma_end; hwif->dma_timeout = &sl82c105_dma_timeout; - - if (hwif->mate) - hwif->serialized = hwif->mate->serialized = 1; } static const struct ide_port_ops sl82c105_port_ops = { @@ -319,6 +316,7 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = { #if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT) IDE_HFLAG_FORCE_LEGACY_IRQS | #endif + IDE_HFLAG_SERIALIZE_DMA | IDE_HFLAG_NO_AUTODMA, .pio_mask = ATA_PIO5, .mwdma_mask = ATA_MWDMA2, @@ -338,6 +336,7 @@ static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_dev "revision %d, BM-DMA disabled\n", rev); d.init_hwif = NULL; d.mwdma_mask = 0; + d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA; } return ide_setup_pci_device(dev, &d); diff --git a/include/linux/ide.h b/include/linux/ide.h index 2da46af6460..e5f41741ba9 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -1087,6 +1087,8 @@ enum { /* unmask IRQs */ IDE_HFLAG_UNMASK_IRQS = (1 << 25), IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), + /* serialize ports if DMA is possible (for sl82c105) */ + IDE_HFLAG_SERIALIZE_DMA = (1 << 27), /* force host out of "simplex" mode */ IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), /* DSC overlap is unsupported */ |