LWN.net Logo

2.5.19 IDE 82

From:	 Martin Dalecki <dalecki@evision-ventures.com>
To:	 Linus Torvalds <torvalds@transmeta.com>
Subject: [PATCH] 2.5.19 IDE 82
Date:	 Sun, 02 Jun 2002 22:13:50 +0200
Cc:	 Kernel Mailing List <linux-kernel@vger.kernel.org>

Sun Jun  2 22:41:45 CEST 2002 ide-clean-82

- PPC compilation fix by Paul Mackerras.

- Various fixes by Bartek:

   fix ata_irq_enable() and ata_reset() for legacy ATA-1 devices

   in start_request() for REQ_DRIVE_ACB
   a) don't run ->prehandler() twice
   b) return ata_taskfile() value
diff -urN linux-2.5.19/drivers/ide/device.c linux/drivers/ide/device.c
--- linux-2.5.19/drivers/ide/device.c	2002-06-02 23:03:00.000000000 +0200
+++ linux/drivers/ide/device.c	2002-06-02 22:48:12.000000000 +0200
@@ -105,11 +105,12 @@
 	if (!ch->io_ports[IDE_CONTROL_OFFSET])
 		return 0;
 
+	/* 0x08 is for legacy ATA-1 devices */
 	if (on)
-		OUT_BYTE(0x00, ch->io_ports[IDE_CONTROL_OFFSET]);
+		OUT_BYTE(0x08 | 0x00, ch->io_ports[IDE_CONTROL_OFFSET]);
 	else {
 		if (!ch->intrproc)
-			OUT_BYTE(0x02, ch->io_ports[IDE_CONTROL_OFFSET]);
+			OUT_BYTE(0x08 | 0x02, ch->io_ports[IDE_CONTROL_OFFSET]);
 		else
 			ch->intrproc(drive);
 	}
@@ -131,9 +132,11 @@
 		return;
 
 	printk("%s: reset\n", ch->name);
-	OUT_BYTE(0x04, ch->io_ports[IDE_CONTROL_OFFSET]);
+	/* 0x08 is for legacy ATA-1 devices */
+	OUT_BYTE(0x08 | 0x04, ch->io_ports[IDE_CONTROL_OFFSET]);
 	udelay(10);
-	OUT_BYTE(0x00, ch->io_ports[IDE_CONTROL_OFFSET]);
+	/* 0x08 is for legacy ATA-1 devices */
+	OUT_BYTE(0x08 | 0x00, ch->io_ports[IDE_CONTROL_OFFSET]);
 	do {
 		mdelay(50);
 		stat = IN_BYTE(ch->io_ports[IDE_STATUS_OFFSET]);
diff -urN linux-2.5.19/drivers/ide/ide.c linux/drivers/ide/ide.c
--- linux-2.5.19/drivers/ide/ide.c	2002-06-02 23:03:06.000000000 +0200
+++ linux/drivers/ide/ide.c	2002-06-02 22:48:20.000000000 +0200
@@ -754,14 +754,7 @@
 		if (!(ar))
 			goto args_error;
 
-		ata_taskfile(drive, ar, NULL);
-
-		if (((ar->command_type == IDE_DRIVE_TASK_RAW_WRITE) ||
-		     (ar->command_type == IDE_DRIVE_TASK_OUT)) &&
-				ar->prehandler && ar->handler)
-			return ar->prehandler(drive, rq);
-
-		return ide_started;
+		return ata_taskfile(drive, ar, NULL);
 	}
 
 	/* The normal way of execution is to pass and execute the request
diff -urN linux-2.5.19/drivers/ide/ide-pmac.c linux/drivers/ide/ide-pmac.c
--- linux-2.5.19/drivers/ide/ide-pmac.c	2002-06-02 23:03:06.000000000 +0200
+++ linux/drivers/ide/ide-pmac.c	2002-06-02 22:57:41.000000000 +0200
@@ -431,7 +431,7 @@
 		goto out;
 	}
 	udelay(10);
-	ata_irq_enale(drive, 0);
+	ata_irq_enable(drive, 0);
 	OUT_BYTE(command, IDE_NSECTOR_REG);
 	OUT_BYTE(SETFEATURES_XFER, IDE_FEATURE_REG);
 	OUT_BYTE(WIN_SETFEATURES, IDE_COMMAND_REG);
@@ -1577,9 +1577,9 @@
 	 */
 	if (used_dma && !ide_spin_wait_hwgroup(drive)) {
 		/* Lock HW group */
-		set_bit(IDE_BUSY, &drive->channel->active);
+		set_bit(IDE_BUSY, drive->channel->active);
 		pmac_ide_check_dma(drive);
-		clear_bit(IDE_BUSY, &drive->channel->active);
+		clear_bit(IDE_BUSY, drive->channel->active);
 		spin_unlock_irq(drive->channel->lock);
 	}
 #endif
@@ -1626,7 +1626,7 @@
 		return;
 	else {
 		/* Lock HW group */
-		set_bit(IDE_BUSY, &drive->channel->active);
+		set_bit(IDE_BUSY, drive->channel->active);
 		/* Stop the device */
 		idepmac_sleep_device(drive, idx, base);
 		spin_unlock_irq(drive->channel->lock);
@@ -1656,7 +1656,7 @@
 
 	/* We resume processing on the lock group */
 	spin_lock_irq(drive->channel->lock);
-	clear_bit(IDE_BUSY, &drive->channel->active);
+	clear_bit(IDE_BUSY, drive->channel->active);
 	if (!list_empty(&drive->queue.queue_head))
 		do_ide_request(&drive->queue);
 	spin_unlock_irq(drive->channel->lock);

Copyright © 2002, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds