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>
This commit is contained in:
@@ -127,20 +127,6 @@ static void cs5535_set_speed(ide_drive_t *drive, u8 speed)
|
||||
}
|
||||
}
|
||||
|
||||
static u8 cs5535_ratemask(ide_drive_t *drive)
|
||||
{
|
||||
/* eighty93 will return 1 if it's 80core and capable of
|
||||
exceeding udma2, 0 otherwise. we need ratemask to set
|
||||
the max speed and if we can > udma2 then we return 2
|
||||
which selects speed_max as udma4 which is the 5535's max
|
||||
speed, and 1 selects udma2 which is the max for 40c */
|
||||
if (!eighty_ninty_three(drive))
|
||||
return 1;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
/****
|
||||
* cs5535_set_drive - Configure the drive to the new speed
|
||||
* @drive: Drive to set up
|
||||
@@ -151,7 +137,7 @@ static u8 cs5535_ratemask(ide_drive_t *drive)
|
||||
*/
|
||||
static int cs5535_set_drive(ide_drive_t *drive, u8 speed)
|
||||
{
|
||||
speed = ide_rate_filter(cs5535_ratemask(drive), speed);
|
||||
speed = ide_rate_filter(drive, speed);
|
||||
ide_config_drive_speed(drive, speed);
|
||||
cs5535_set_speed(drive, speed);
|
||||
|
||||
@@ -180,9 +166,7 @@ static void cs5535_tuneproc(ide_drive_t *drive, u8 xferspeed)
|
||||
|
||||
static int cs5535_config_drive_for_dma(ide_drive_t *drive)
|
||||
{
|
||||
u8 speed;
|
||||
|
||||
speed = ide_dma_speed(drive, cs5535_ratemask(drive));
|
||||
u8 speed = ide_max_dma_mode(drive);
|
||||
|
||||
/* If no DMA speed was available then let dma_check hit pio */
|
||||
if (!speed) {
|
||||
|
Reference in New Issue
Block a user