Re: [PATCH pata-2.6] sl82c105: DMA support code cleanup (take 4)

2007-04-04 Thread Bartlomiej Zolnierkiewicz
On Wednesday 28 March 2007, Sergei Shtylyov wrote:
 Fold the now equivalent code in the ide_dma_check() method into a mere call to
 ide_use_dma().  Make config_for_dma() return non-zero if DMA mode has been set
 and call it from the ide_dma_check() method instead of ide_dma_on().
 Defer writing the DMA timings to the chip registers until DMA is really turned
 on (and do not enable IORDY for DMA).
 Remove unneeded code from the init_hwif() method, improve its overall looks.
 Rename the dma_start(), ide_dma_check(), and ide_dma_lostirq() methods, and
 also use more proper hwif-dma_command, fix printk() and comment in the latter
 one as well.  While at it, cleanup style in several places.
 
 ---
 This patch has also been actually tested at last. :-)
 
 Signed-off-by: Sergei Shtylyov [EMAIL PROTECTED]
 Signed-off-by: Bartlomiej Zolnierkiewicz [EMAIL PROTECTED]

I moved Signed-off-by-s before --- to prevent them from being eaten by git.

applied
-
To unsubscribe from this list: send the line unsubscribe linux-ide in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH pata-2.6] sl82c105: DMA support code cleanup (take 4)

2007-03-28 Thread Sergei Shtylyov
Fold the now equivalent code in the ide_dma_check() method into a mere call to
ide_use_dma().  Make config_for_dma() return non-zero if DMA mode has been set
and call it from the ide_dma_check() method instead of ide_dma_on().
Defer writing the DMA timings to the chip registers until DMA is really turned
on (and do not enable IORDY for DMA).
Remove unneeded code from the init_hwif() method, improve its overall looks.
Rename the dma_start(), ide_dma_check(), and ide_dma_lostirq() methods, and
also use more proper hwif-dma_command, fix printk() and comment in the latter
one as well.  While at it, cleanup style in several places.

---
This patch has also been actually tested at last. :-)

Signed-off-by: Sergei Shtylyov [EMAIL PROTECTED]
Signed-off-by: Bartlomiej Zolnierkiewicz [EMAIL PROTECTED]

 drivers/ide/pci/sl82c105.c |  148 +
 1 files changed, 59 insertions(+), 89 deletions(-)

Index: linux-2.6/drivers/ide/pci/sl82c105.c
===
--- linux-2.6.orig/drivers/ide/pci/sl82c105.c
+++ linux-2.6/drivers/ide/pci/sl82c105.c
@@ -100,59 +100,28 @@ static u8 sl82c105_tune_pio(ide_drive_t 
 }
 
 /*
- * Configure the drive and the chipset for DMA
+ * Configure the drive for DMA.
+ * We'll program the chipset only when DMA is actually turned on.
  */
-static int config_for_dma (ide_drive_t *drive)
+static int config_for_dma(ide_drive_t *drive)
 {
-   ide_hwif_t *hwif = HWIF(drive);
-   struct pci_dev *dev = hwif-pci_dev;
-   unsigned int reg;
-
DBG((config_for_dma(drive:%s)\n, drive-name));
 
-   reg = (hwif-channel ? 0x4c : 0x44) + (drive-select.b.unit ? 4 : 0);
-
if (ide_config_drive_speed(drive, XFER_MW_DMA_2) != 0)
-   return 1;
-
-   pci_write_config_word(dev, reg, 0x0240);
+   return 0;
 
-   return 0;
+   return ide_dma_enable(drive);
 }
 
 /*
- * Check to see if the drive and
- * chipset is capable of DMA mode
+ * Check to see if the drive and chipset are capable of DMA mode.
  */
-
-static int sl82c105_check_drive (ide_drive_t *drive)
+static int sl82c105_ide_dma_check(ide_drive_t *drive)
 {
-   ide_hwif_t *hwif= HWIF(drive);
-
-   DBG((sl82c105_check_drive(drive:%s)\n, drive-name));
+   DBG((sl82c105_ide_dma_check(drive:%s)\n, drive-name));
 
-   do {
-   struct hd_driveid *id = drive-id;
-
-   if (!drive-autodma)
-   break;
-
-   if (!id || !(id-capability  1))
-   break;
-
-   /* Consult the list of known bad drives */
-   if (__ide_dma_bad_drive(drive))
-   break;
-
-   if (id-field_valid  2) {
-   if ((id-dma_mword  hwif-mwdma_mask) ||
-   (id-dma_1word  hwif-swdma_mask))
-   return 0;
-   }
-
-   if (__ide_dma_good_drive(drive)  id-eide_dma_time  150)
-   return 0;
-   } while (0);
+   if (ide_use_dma(drive)  config_for_dma(drive))
+   return 0;
 
return -1;
 }
@@ -181,14 +150,14 @@ static inline void sl82c105_reset_host(s
  * This function is called when the IDE timer expires, the drive
  * indicates that it is READY, and we were waiting for DMA to complete.
  */
-static int sl82c105_ide_dma_lost_irq(ide_drive_t *drive)
+static int sl82c105_ide_dma_lostirq(ide_drive_t *drive)
 {
-   ide_hwif_t *hwif = HWIF(drive);
-   struct pci_dev *dev = hwif-pci_dev;
-   u32 val, mask = hwif-channel ? CTRL_IDE_IRQB : CTRL_IDE_IRQA;
-   unsigned long dma_base = hwif-dma_base;
+   ide_hwif_t *hwif= HWIF(drive);
+   struct pci_dev *dev = hwif-pci_dev;
+   u32 val, mask   = hwif-channel ? CTRL_IDE_IRQB : CTRL_IDE_IRQA;
+   u8 dma_cmd;
 
-   printk(sl82c105: lost IRQ: resetting host\n);
+   printk(sl82c105: lost IRQ, resetting host\n);
 
/*
 * Check the raw interrupt from the drive.
@@ -201,15 +170,15 @@ static int sl82c105_ide_dma_lost_irq(ide
 * Was DMA enabled?  If so, disable it - we're resetting the
 * host.  The IDE layer will be handling the drive for us.
 */
-   val = inb(dma_base);
-   if (val  1) {
-   outb(val  ~1, dma_base);
+   dma_cmd = inb(hwif-dma_command);
+   if (dma_cmd  1) {
+   outb(dma_cmd  ~1, hwif-dma_command);
printk(sl82c105: DMA was enabled\n);
}
 
sl82c105_reset_host(dev);
 
-   /* ide_dmaproc would return 1, so we do as well */
+   /* __ide_dma_lostirq would return 1, so we do as well */
return 1;
 }
 
@@ -221,10 +190,10 @@ static int sl82c105_ide_dma_lost_irq(ide
  * The generic IDE core will have disabled the BMEN bit before this
  * function is called.
  */
-static void sl82c105_ide_dma_start(ide_drive_t *drive)
+static void