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:
@@ -48,22 +48,6 @@ static int save_mdma_mode[4];
|
||||
|
||||
static DEFINE_SPINLOCK(atiixp_lock);
|
||||
|
||||
/**
|
||||
* atiixp_ratemask - compute rate mask for ATIIXP IDE
|
||||
* @drive: IDE drive to compute for
|
||||
*
|
||||
* Returns the available modes for the ATIIXP IDE controller.
|
||||
*/
|
||||
|
||||
static u8 atiixp_ratemask(ide_drive_t *drive)
|
||||
{
|
||||
u8 mode = 3;
|
||||
|
||||
if (!eighty_ninty_three(drive))
|
||||
mode = min(mode, (u8)1);
|
||||
return mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* atiixp_dma_2_pio - return the PIO mode matching DMA
|
||||
* @xfer_rate: transfer speed
|
||||
@@ -189,7 +173,7 @@ static int atiixp_speedproc(ide_drive_t *drive, u8 xferspeed)
|
||||
u16 tmp16;
|
||||
u8 speed, pio;
|
||||
|
||||
speed = ide_rate_filter(atiixp_ratemask(drive), xferspeed);
|
||||
speed = ide_rate_filter(drive, xferspeed);
|
||||
|
||||
spin_lock_irqsave(&atiixp_lock, flags);
|
||||
|
||||
@@ -233,7 +217,7 @@ static int atiixp_speedproc(ide_drive_t *drive, u8 xferspeed)
|
||||
|
||||
static int atiixp_config_drive_for_dma(ide_drive_t *drive)
|
||||
{
|
||||
u8 speed = ide_dma_speed(drive, atiixp_ratemask(drive));
|
||||
u8 speed = ide_max_dma_mode(drive);
|
||||
|
||||
if (!speed)
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user