diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-01-25 16:17:18 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-01-25 16:17:18 -0500 |
commit | 4db90a145292327b95b03f6dcd3352327235cc36 (patch) | |
tree | c48ba5fc31e27d6fbdb8883151bdf237e7eb1920 /drivers/ide/pci/sl82c105.c | |
parent | 428c6440ef933a3d9df5adfeb2cbb3ea7ebb6a68 (diff) |
ide: add IDE_HFLAG_ABUSE_SET_DMA_MODE host flag
* Add IDE_HFLAG_ABUSE_SET_DMA_MODE host flag and use it to decide
what to do with transfer modes < XFER_PIO_0 in ide_set_xfer_rate().
* Set IDE_HFLAG_ABUSE_SET_DMA_MODE in host drivers that need it
(aec62xx, amd74xx, cs5520, cs5535, hpt34x, hpt366, pdc202xx_old,
serverworks, tc86c001 and via82cxxx) and cleanup ->set_dma_mode
methods in host drivers that don't (IDE core code guarantees that
->set_dma_mode will be called only for modes which are present
in SWDMA/MWDMA/UDMA masks).
While at it:
* Add IDE_HFLAGS_HPT34X/HPT3XX/PDC202XX/SVWKS define in
hpt34x/hpt366/pdc202xx_old/serverworks host driver.
There should be no functionality changes caused by this patch.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/sl82c105.c')
-rw-r--r-- | drivers/ide/pci/sl82c105.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 147d783f7529..069f104fdcea 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c | |||
@@ -115,32 +115,24 @@ static void sl82c105_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
115 | DBG(("sl82c105_tune_chipset(drive:%s, speed:%s)\n", | 115 | DBG(("sl82c105_tune_chipset(drive:%s, speed:%s)\n", |
116 | drive->name, ide_xfer_verbose(speed))); | 116 | drive->name, ide_xfer_verbose(speed))); |
117 | 117 | ||
118 | switch (speed) { | 118 | drv_ctrl = mwdma_timings[speed - XFER_MW_DMA_0]; |
119 | case XFER_MW_DMA_2: | ||
120 | case XFER_MW_DMA_1: | ||
121 | case XFER_MW_DMA_0: | ||
122 | drv_ctrl = mwdma_timings[speed - XFER_MW_DMA_0]; | ||
123 | 119 | ||
124 | /* | 120 | /* |
125 | * Store the DMA timings so that we can actually program | 121 | * Store the DMA timings so that we can actually program |
126 | * them when DMA will be turned on... | 122 | * them when DMA will be turned on... |
127 | */ | 123 | */ |
128 | drive->drive_data &= 0x0000ffff; | 124 | drive->drive_data &= 0x0000ffff; |
129 | drive->drive_data |= (unsigned long)drv_ctrl << 16; | 125 | drive->drive_data |= (unsigned long)drv_ctrl << 16; |
130 | 126 | ||
131 | /* | 127 | /* |
132 | * If we are already using DMA, we just reprogram | 128 | * If we are already using DMA, we just reprogram |
133 | * the drive control register. | 129 | * the drive control register. |
134 | */ | 130 | */ |
135 | if (drive->using_dma) { | 131 | if (drive->using_dma) { |
136 | struct pci_dev *dev = HWIF(drive)->pci_dev; | 132 | struct pci_dev *dev = HWIF(drive)->pci_dev; |
137 | int reg = 0x44 + drive->dn * 4; | 133 | int reg = 0x44 + drive->dn * 4; |
138 | 134 | ||
139 | pci_write_config_word(dev, reg, drv_ctrl); | 135 | pci_write_config_word(dev, reg, drv_ctrl); |
140 | } | ||
141 | break; | ||
142 | default: | ||
143 | return; | ||
144 | } | 136 | } |
145 | } | 137 | } |
146 | 138 | ||