diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-26 16:25:24 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-26 16:25:24 -0400 |
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 e0316869eb6f..b58eb792172e 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, | |||
1367 | if (hwif->chipset != ide_dtc2278 || hwif->channel == 0) | 1367 | if (hwif->chipset != ide_dtc2278 || hwif->channel == 0) |
1368 | hwif->port_ops = d->port_ops; | 1368 | hwif->port_ops = d->port_ops; |
1369 | 1369 | ||
1370 | if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) | 1370 | if ((d->host_flags & IDE_HFLAG_SERIALIZE) || |
1371 | hwif->mate->serialized = hwif->serialized = 1; | 1371 | ((d->host_flags & IDE_HFLAG_SERIALIZE_DMA) && hwif->dma_base)) { |
1372 | if (hwif->mate) | ||
1373 | hwif->mate->serialized = hwif->serialized = 1; | ||
1374 | } | ||
1372 | 1375 | ||
1373 | hwif->swdma_mask = d->swdma_mask; | 1376 | hwif->swdma_mask = d->swdma_mask; |
1374 | hwif->mwdma_mask = d->mwdma_mask; | 1377 | hwif->mwdma_mask = d->mwdma_mask; |
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 2c2fe59a0d9e..c2127cbdecd3 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) | |||
296 | hwif->dma_start = &sl82c105_dma_start; | 296 | hwif->dma_start = &sl82c105_dma_start; |
297 | hwif->ide_dma_end = &sl82c105_dma_end; | 297 | hwif->ide_dma_end = &sl82c105_dma_end; |
298 | hwif->dma_timeout = &sl82c105_dma_timeout; | 298 | hwif->dma_timeout = &sl82c105_dma_timeout; |
299 | |||
300 | if (hwif->mate) | ||
301 | hwif->serialized = hwif->mate->serialized = 1; | ||
302 | } | 299 | } |
303 | 300 | ||
304 | static const struct ide_port_ops sl82c105_port_ops = { | 301 | static const struct ide_port_ops sl82c105_port_ops = { |
@@ -319,6 +316,7 @@ static const struct ide_port_info sl82c105_chipset __devinitdata = { | |||
319 | #if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT) | 316 | #if defined(CONFIG_LOPEC) || defined(CONFIG_SANDPOINT) |
320 | IDE_HFLAG_FORCE_LEGACY_IRQS | | 317 | IDE_HFLAG_FORCE_LEGACY_IRQS | |
321 | #endif | 318 | #endif |
319 | IDE_HFLAG_SERIALIZE_DMA | | ||
322 | IDE_HFLAG_NO_AUTODMA, | 320 | IDE_HFLAG_NO_AUTODMA, |
323 | .pio_mask = ATA_PIO5, | 321 | .pio_mask = ATA_PIO5, |
324 | .mwdma_mask = ATA_MWDMA2, | 322 | .mwdma_mask = ATA_MWDMA2, |
@@ -338,6 +336,7 @@ static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_dev | |||
338 | "revision %d, BM-DMA disabled\n", rev); | 336 | "revision %d, BM-DMA disabled\n", rev); |
339 | d.init_hwif = NULL; | 337 | d.init_hwif = NULL; |
340 | d.mwdma_mask = 0; | 338 | d.mwdma_mask = 0; |
339 | d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA; | ||
341 | } | 340 | } |
342 | 341 | ||
343 | return ide_setup_pci_device(dev, &d); | 342 | return ide_setup_pci_device(dev, &d); |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 2da46af64604..e5f41741ba91 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -1087,6 +1087,8 @@ enum { | |||
1087 | /* unmask IRQs */ | 1087 | /* unmask IRQs */ |
1088 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), | 1088 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), |
1089 | IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), | 1089 | IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), |
1090 | /* serialize ports if DMA is possible (for sl82c105) */ | ||
1091 | IDE_HFLAG_SERIALIZE_DMA = (1 << 27), | ||
1090 | /* force host out of "simplex" mode */ | 1092 | /* force host out of "simplex" mode */ |
1091 | IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), | 1093 | IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), |
1092 | /* DSC overlap is unsupported */ | 1094 | /* DSC overlap is unsupported */ |