Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1116fae5fdfa80c6744a9b5d75fb3ef687a69b19
Commit:     1116fae5fdfa80c6744a9b5d75fb3ef687a69b19
Parent:     8292e8c7e4c2b99f22120f677858487de43c484b
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Mon Aug 20 22:42:55 2007 +0200
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Mon Aug 20 22:42:55 2007 +0200

    ide: config_drive_for_dma() fixes
    
    * Add DMA blacklist checking (->ide_dma_on check probably can go now).
    
    * Add ->atapi_dma flag checking and remove no longer needed
      ns87415_ide_dma_check() from ns87415 host driver.
    
    * Remove now needless __ide_dma_check() wrapper and symbol export.
    
    * Check drive->autodma instead of hwif->autodma (there should be no changes 
in
      behavior as all users of config_drive_for_dma() set both ->autodma flags).
    
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/ide-dma.c     |   26 ++++++++++----------------
 drivers/ide/pci/ns87415.c |    9 ---------
 include/linux/ide.h       |    1 -
 3 files changed, 10 insertions(+), 26 deletions(-)

diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 5fe1d72..865a274 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -349,9 +349,17 @@ EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
  
 static int config_drive_for_dma (ide_drive_t *drive)
 {
+       ide_hwif_t *hwif = drive->hwif;
        struct hd_driveid *id = drive->id;
 
-       if ((id->capability & 1) && drive->hwif->autodma) {
+       /* consult the list of known "bad" drives */
+       if (__ide_dma_bad_drive(drive))
+               return -1;
+
+       if (drive->media != ide_disk && hwif->atapi_dma == 0)
+               return -1;
+
+       if ((id->capability & 1) && drive->autodma) {
                /*
                 * Enable DMA on any drive that has
                 * UltraDMA (mode 0/1/2/3/4/5/6) enabled
@@ -514,20 +522,6 @@ int __ide_dma_on (ide_drive_t *drive)
 EXPORT_SYMBOL(__ide_dma_on);
 
 /**
- *     __ide_dma_check         -       check DMA setup
- *     @drive: drive to check
- *
- *     Don't use - due for extermination
- */
- 
-int __ide_dma_check (ide_drive_t *drive)
-{
-       return config_drive_for_dma(drive);
-}
-
-EXPORT_SYMBOL(__ide_dma_check);
-
-/**
  *     ide_dma_setup   -       begin a DMA phase
  *     @drive: target device
  *
@@ -1021,7 +1015,7 @@ void ide_setup_dma (ide_hwif_t *hwif, unsigned long 
dma_base, unsigned int num_p
        if (!hwif->dma_host_on)
                hwif->dma_host_on = &ide_dma_host_on;
        if (!hwif->ide_dma_check)
-               hwif->ide_dma_check = &__ide_dma_check;
+               hwif->ide_dma_check = &config_drive_for_dma;
        if (!hwif->dma_setup)
                hwif->dma_setup = &ide_dma_setup;
        if (!hwif->dma_exec_cmd)
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c
index 09941f3..465c935 100644
--- a/drivers/ide/pci/ns87415.c
+++ b/drivers/ide/pci/ns87415.c
@@ -187,14 +187,6 @@ static int ns87415_ide_dma_setup(ide_drive_t *drive)
        return 1;
 }
 
-static int ns87415_ide_dma_check (ide_drive_t *drive)
-{
-       if (drive->media != ide_disk)
-               return -1;
-
-       return __ide_dma_check(drive);
-}
-
 static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif)
 {
        struct pci_dev *dev = hwif->pci_dev;
@@ -266,7 +258,6 @@ static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif)
 
        outb(0x60, hwif->dma_status);
        hwif->dma_setup = &ns87415_ide_dma_setup;
-       hwif->ide_dma_check = &ns87415_ide_dma_check;
        hwif->ide_dma_end = &ns87415_ide_dma_end;
 
        if (!noautodma)
diff --git a/include/linux/ide.h b/include/linux/ide.h
index d71d012..7e15e08 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1312,7 +1312,6 @@ void ide_dma_host_off(ide_drive_t *);
 void ide_dma_off_quietly(ide_drive_t *);
 void ide_dma_host_on(ide_drive_t *);
 extern int __ide_dma_on(ide_drive_t *);
-extern int __ide_dma_check(ide_drive_t *);
 extern int ide_dma_setup(ide_drive_t *);
 extern void ide_dma_start(ide_drive_t *);
 extern int __ide_dma_end(ide_drive_t *);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to