diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-13 11:47:53 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-13 11:47:53 -0400 |
commit | 88ae4d8c3829fe3d7be9b1e3ed79a37814752d61 (patch) | |
tree | c9fa9df54ea0e62d719a269c16e9e5023801e60f /drivers/ide | |
parent | dfb2311226539e0496c0a7c65ceebaaff2120a0b (diff) |
sc1200: fix ->dma_base equal zero handling
Set hwif->atapi_dma/{ultra,mwdma}_mask and drive->autodma after checking that
->dma_base exists. If ->dma_base is not set (== PCI BAR4 cannot be reserved)
then DMA hooks shouldn't be initialized or bad things will happen.
OTOH hwif->set_{pio,dma}_mode hooks should be set even if hwif->dma_base == 0.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/pci/sc1200.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index 76f0868054a1..ee0e3f554d9a 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
@@ -378,16 +378,20 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) | |||
378 | if (hwif->mate) | 378 | if (hwif->mate) |
379 | hwif->serialized = hwif->mate->serialized = 1; | 379 | hwif->serialized = hwif->mate->serialized = 1; |
380 | hwif->autodma = 0; | 380 | hwif->autodma = 0; |
381 | if (hwif->dma_base) { | 381 | |
382 | hwif->udma_filter = sc1200_udma_filter; | 382 | hwif->set_pio_mode = &sc1200_set_pio_mode; |
383 | hwif->ide_dma_check = &sc1200_config_dma; | 383 | hwif->set_dma_mode = &sc1200_set_dma_mode; |
384 | hwif->ide_dma_end = &sc1200_ide_dma_end; | 384 | |
385 | if (!noautodma) | 385 | if (hwif->dma_base == 0) |
386 | hwif->autodma = 1; | 386 | return; |
387 | 387 | ||
388 | hwif->set_pio_mode = &sc1200_set_pio_mode; | 388 | hwif->udma_filter = sc1200_udma_filter; |
389 | hwif->set_dma_mode = &sc1200_set_dma_mode; | 389 | hwif->ide_dma_check = &sc1200_config_dma; |
390 | } | 390 | hwif->ide_dma_end = &sc1200_ide_dma_end; |
391 | |||
392 | if (!noautodma) | ||
393 | hwif->autodma = 1; | ||
394 | |||
391 | hwif->atapi_dma = 1; | 395 | hwif->atapi_dma = 1; |
392 | hwif->ultra_mask = 0x07; | 396 | hwif->ultra_mask = 0x07; |
393 | hwif->mwdma_mask = 0x07; | 397 | hwif->mwdma_mask = 0x07; |