lkml.org 
[lkml]   [2002]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    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);
    \
     
     \ /
      Last update: 2005-03-22 13:26    [W:4.264 / U:0.724 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site