diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-05-09 18:01:08 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-05-09 18:01:08 -0400 |
commit | 2d5eaa6dd744a641e75503232a01f52d0768884c (patch) | |
tree | 0736bd00ea3bd032d601d0a676c998cb043b877a /drivers/ide/pci/slc90e66.c | |
parent | 18137207236285989dfc0ee7f929b954199228f3 (diff) |
ide: rework the code for selecting the best DMA transfer mode (v3)
Depends on the "ide: fix UDMA/MWDMA/SWDMA masks" patch.
* add ide_hwif_t.udma_filter hook for filtering UDMA mask
(use it in alim15x3, hpt366, siimage and serverworks drivers)
* add ide_max_dma_mode() for finding best DMA mode for the device
(loosely based on some older libata-core.c code)
* convert ide_dma_speed() users to use ide_max_dma_mode()
* make ide_rate_filter() take "ide_drive_t *drive" as an argument instead
of "u8 mode" and teach it to how to use UDMA mask to do filtering
* use ide_rate_filter() in hpt366 driver
* remove no longer needed ide_dma_speed() and *_ratemask()
* unexport eighty_ninty_three()
v2:
* rename ->filter_udma_mask to ->udma_filter
[ Suggested by Sergei Shtylyov <sshtylyov@ru.mvista.com>. ]
v3:
* updated for scc_pata driver (fixes XFER_UDMA_6 filtering for user-space
originated transfer mode change requests when 100MHz clock is used)
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/slc90e66.c')
-rw-r--r-- | drivers/ide/pci/slc90e66.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index 852ccb36da1d..9e95a5cbf984 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
@@ -21,15 +21,6 @@ | |||
21 | 21 | ||
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | 23 | ||
24 | static u8 slc90e66_ratemask (ide_drive_t *drive) | ||
25 | { | ||
26 | u8 mode = 2; | ||
27 | |||
28 | if (!eighty_ninty_three(drive)) | ||
29 | mode = min_t(u8, mode, 1); | ||
30 | return mode; | ||
31 | } | ||
32 | |||
33 | static u8 slc90e66_dma_2_pio (u8 xfer_rate) { | 24 | static u8 slc90e66_dma_2_pio (u8 xfer_rate) { |
34 | switch(xfer_rate) { | 25 | switch(xfer_rate) { |
35 | case XFER_UDMA_4: | 26 | case XFER_UDMA_4: |
@@ -122,7 +113,7 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) | |||
122 | ide_hwif_t *hwif = HWIF(drive); | 113 | ide_hwif_t *hwif = HWIF(drive); |
123 | struct pci_dev *dev = hwif->pci_dev; | 114 | struct pci_dev *dev = hwif->pci_dev; |
124 | u8 maslave = hwif->channel ? 0x42 : 0x40; | 115 | u8 maslave = hwif->channel ? 0x42 : 0x40; |
125 | u8 speed = ide_rate_filter(slc90e66_ratemask(drive), xferspeed); | 116 | u8 speed = ide_rate_filter(drive, xferspeed); |
126 | int sitre = 0, a_speed = 7 << (drive->dn * 4); | 117 | int sitre = 0, a_speed = 7 << (drive->dn * 4); |
127 | int u_speed = 0, u_flag = 1 << drive->dn; | 118 | int u_speed = 0, u_flag = 1 << drive->dn; |
128 | u16 reg4042, reg44, reg48, reg4a; | 119 | u16 reg4042, reg44, reg48, reg4a; |
@@ -171,7 +162,7 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) | |||
171 | 162 | ||
172 | static int slc90e66_config_drive_for_dma (ide_drive_t *drive) | 163 | static int slc90e66_config_drive_for_dma (ide_drive_t *drive) |
173 | { | 164 | { |
174 | u8 speed = ide_dma_speed(drive, slc90e66_ratemask(drive)); | 165 | u8 speed = ide_max_dma_mode(drive); |
175 | 166 | ||
176 | if (!speed) | 167 | if (!speed) |
177 | return 0; | 168 | return 0; |