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: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
上级 6c610641
...@@ -1367,8 +1367,11 @@ static void ide_init_port(ide_hwif_t *hwif, unsigned int port, ...@@ -1367,8 +1367,11 @@ static void ide_init_port(ide_hwif_t *hwif, unsigned int port,
if (hwif->chipset != ide_dtc2278 || hwif->channel == 0) if (hwif->chipset != ide_dtc2278 || hwif->channel == 0)
hwif->port_ops = d->port_ops; hwif->port_ops = d->port_ops;
if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) if ((d->host_flags & IDE_HFLAG_SERIALIZE) ||
hwif->mate->serialized = hwif->serialized = 1; ((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->swdma_mask = d->swdma_mask;
hwif->mwdma_mask = d->mwdma_mask; hwif->mwdma_mask = d->mwdma_mask;
......
...@@ -296,9 +296,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) ...@@ -296,9 +296,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
hwif->dma_start = &sl82c105_dma_start; hwif->dma_start = &sl82c105_dma_start;
hwif->ide_dma_end = &sl82c105_dma_end; hwif->ide_dma_end = &sl82c105_dma_end;
hwif->dma_timeout = &sl82c105_dma_timeout; hwif->dma_timeout = &sl82c105_dma_timeout;
if (hwif->mate)
hwif->serialized = hwif->mate->serialized = 1;
} }
static const struct ide_port_ops sl82c105_port_ops = { static const struct ide_port_ops sl82c105_port_ops = {
...@@ -319,6 +316,7 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = { ...@@ -319,6 +316,7 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = {
#if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT) #if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT)
IDE_HFLAG_FORCE_LEGACY_IRQS | IDE_HFLAG_FORCE_LEGACY_IRQS |
#endif #endif
IDE_HFLAG_SERIALIZE_DMA |
IDE_HFLAG_NO_AUTODMA, IDE_HFLAG_NO_AUTODMA,
.pio_mask = ATA_PIO5, .pio_mask = ATA_PIO5,
.mwdma_mask = ATA_MWDMA2, .mwdma_mask = ATA_MWDMA2,
...@@ -338,6 +336,7 @@ static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_dev ...@@ -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); "revision %d, BM-DMA disabled\n", rev);
d.init_hwif = NULL; d.init_hwif = NULL;
d.mwdma_mask = 0; d.mwdma_mask = 0;
d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA;
} }
return ide_setup_pci_device(dev, &d); return ide_setup_pci_device(dev, &d);
......
...@@ -1087,6 +1087,8 @@ enum { ...@@ -1087,6 +1087,8 @@ enum {
/* unmask IRQs */ /* unmask IRQs */
IDE_HFLAG_UNMASK_IRQS = (1 << 25), IDE_HFLAG_UNMASK_IRQS = (1 << 25),
IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), 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 */ /* force host out of "simplex" mode */
IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28),
/* DSC overlap is unsupported */ /* DSC overlap is unsupported */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册