aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-26 16:25:24 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-26 16:25:24 -0400
commit1fd1890594bd355a4217f5658a34763e77decee3 (patch)
treeee8bd668648a9d3db01a7c99d73eee7453efe98b
parent6c61064162e6a9965a062b445c6bd6c8ed019183 (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.c7
-rw-r--r--drivers/ide/pci/sl82c105.c5
-rw-r--r--include/linux/ide.h2
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
304static const struct ide_port_ops sl82c105_port_ops = { 301static 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 */