ide: add IDE_HFLAG_SERIALIZE_DMA host flag
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sat, 26 Apr 2008 20:25:24 +0000 (22:25 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sat, 26 Apr 2008 20:25:24 +0000 (22:25 +0200)
* 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>
drivers/ide/ide-probe.c
drivers/ide/pci/sl82c105.c
include/linux/ide.h

index e0316869eb6fc2a6996b915f38dba30fb2d6795b..b58eb792172ee2fc798f07651ef5ad4461864d0b 100644 (file)
@@ -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;
index 2c2fe59a0d9ea27691690297cdd7cc7203207c6f..c2127cbdecd38576181d271e60395483994e5572 100644 (file)
@@ -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);
index 2da46af64604124164c7a6f06a07443767be4910..e5f41741ba91bdc57862c9f371534ceb92f0c107 100644 (file)
@@ -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 */