===== drivers/ide/ibm_ocp_ide.c 1.1 vs edited ===== --- 1.1/drivers/ide/ibm_ocp_ide.c Wed Mar 12 17:39:16 2003 +++ edited/drivers/ide/ibm_ocp_ide.c Tue Jan 13 16:53:41 2004 @@ -525,14 +525,12 @@ return stb04xxx_ide_dma_on(drive); } -static int stb04xxx_ide_dma_begin(ide_drive_t * drive, int writing) +static int stb04xxx_ide_dma_begin(ide_drive_t * drive) { idp->si_c0tb = (unsigned int) prd_phys; idp->si_c0s0 = 0xdc800000; /* Clear all status */ idp->si_c0ie = 0x90000000; /* Enable all intr */ idp->si_c0dcm = 0; - idp->si_c0dcm = - (writing ? 0x09000000 : 0x01000000); return 0; } @@ -546,7 +544,9 @@ ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL); HWIF(drive)->OUTB(writing ? WIN_WRITEDMA : WIN_READDMA, IDE_COMMAND_REG); - return stb04xxx_ide_dma_begin(drive, writing); + stb04xxx_ide_dma_begin(drive); + idp->si_c0dcm = (writing ? 0x09000000 : 0x01000000); + return 0; } static int stb04xxx_ide_dma_read(ide_drive_t * drive) @@ -590,7 +590,7 @@ unsigned char *ip; unsigned int uicdcr; int i; - struct ocp_dev *ide_dev; + struct ocp_device *ocp; int curr_ide; ide_hwif_t *hwif; @@ -605,16 +605,12 @@ if (data_port != 0) return; printk("IBM STB04xxx OCP IDE driver version %s\n", OCPVR); - if (!(ide_dev = ocp_alloc_dev(0))) - return; - - ide_dev->type = IDE; - if ((curr_ide = ocp_register(ide_dev)) == -ENXIO) { - ocp_free_dev(ide_dev); + + if (!(ocp = ocp_find_device(OCP_VENDOR_IBM, OCP_FUNC_IDE, OCP_ANY_INDEX))) { return; } else { - if ((idp = (ide_t *) ioremap(ide_dev->paddr, + if ((idp = (ide_t *) ioremap(ocp->def->paddr, IDE0_SIZE)) == NULL) { printk(KERN_WARNING "ide: failed ioremap\n"); return; @@ -660,7 +656,7 @@ hw->io_ports[IDE_CONTROL_OFFSET] = (int) (&(idp->si_c0adc)); if (irq) - *irq = ide_dev->irq; + *irq = ocp->def->irq; pio_mode[0] = pio_mode[1] = -1; @@ -708,6 +704,6 @@ memcpy(hwif->io_ports, hw->io_ports, sizeof (hw->io_ports)); - hwif->irq = ide_dev->irq; + hwif->irq = ocp->def->irq; } }