Messages in this thread Patch in this message | | | Date | Sun, 02 Jun 2002 22:13:50 +0200 | From | Martin Dalecki <> | Subject | [PATCH] 2.5.19 IDE 82 |
| |
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); | |