diff options
Diffstat (limited to 'sys/powerpc/powermac/ata_kauai.c')
-rw-r--r-- | sys/powerpc/powermac/ata_kauai.c | 60 |
1 files changed, 31 insertions, 29 deletions
diff --git a/sys/powerpc/powermac/ata_kauai.c b/sys/powerpc/powermac/ata_kauai.c index 1d72f75..33b6434 100644 --- a/sys/powerpc/powermac/ata_kauai.c +++ b/sys/powerpc/powermac/ata_kauai.c @@ -194,12 +194,11 @@ static const u_int udma_timing_shasta[] = { static int ata_kauai_probe(device_t dev) { - struct ata_channel *ch; struct ata_kauai_softc *sc; u_int32_t devid; phandle_t node; const char *compatstring = NULL; - int i, found, rid; + int i, found; found = 0; devid = pci_get_devid(dev); @@ -216,7 +215,6 @@ ata_kauai_probe(device_t dev) node = ofw_bus_get_node(dev); sc = device_get_softc(dev); bzero(sc, sizeof(struct ata_kauai_softc)); - ch = &sc->sc_ch.sc_ch; compatstring = ofw_bus_get_compat(dev); if (compatstring != NULL && strcmp(compatstring,"shasta-ata") == 0) @@ -227,32 +225,6 @@ ata_kauai_probe(device_t dev) (compatstring == NULL || strcmp(compatstring, "K2-UATA") != 0)) bus_set_resource(dev, SYS_RES_IRQ, 0, 39, 1); - rid = PCIR_BARS; - sc->sc_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, - RF_ACTIVE); - if (sc->sc_memr == NULL) { - device_printf(dev, "could not allocate memory\n"); - return (ENXIO); - } - - /* - * Set up the resource vectors - */ - for (i = ATA_DATA; i <= ATA_COMMAND; i++) { - ch->r_io[i].res = sc->sc_memr; - ch->r_io[i].offset = i*ATA_KAUAI_REGGAP + ATA_KAUAI_REGOFFSET; - } - ch->r_io[ATA_CONTROL].res = sc->sc_memr; - ch->r_io[ATA_CONTROL].offset = ATA_KAUAI_ALTOFFSET; - ata_default_registers(dev); - - ch->unit = 0; - ch->flags |= ATA_USE_16BIT; - - /* XXX: ATAPI DMA is unreliable. We should find out why. */ - ch->flags |= ATA_NO_ATAPI_DMA; - ata_generic_hw(dev); - return (ata_probe(dev)); } @@ -272,12 +244,42 @@ static int ata_kauai_attach(device_t dev) { struct ata_kauai_softc *sc = device_get_softc(dev); + struct ata_channel *ch; + int i, rid; #if USE_DBDMA_IRQ int dbdma_irq_rid = 1; struct resource *dbdma_irq; void *cookie; #endif + ch = &sc->sc_ch.sc_ch; + + rid = PCIR_BARS; + sc->sc_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (sc->sc_memr == NULL) { + device_printf(dev, "could not allocate memory\n"); + return (ENXIO); + } + + /* + * Set up the resource vectors + */ + for (i = ATA_DATA; i <= ATA_COMMAND; i++) { + ch->r_io[i].res = sc->sc_memr; + ch->r_io[i].offset = i*ATA_KAUAI_REGGAP + ATA_KAUAI_REGOFFSET; + } + ch->r_io[ATA_CONTROL].res = sc->sc_memr; + ch->r_io[ATA_CONTROL].offset = ATA_KAUAI_ALTOFFSET; + ata_default_registers(dev); + + ch->unit = 0; + ch->flags |= ATA_USE_16BIT; + + /* XXX: ATAPI DMA is unreliable. We should find out why. */ + ch->flags |= ATA_NO_ATAPI_DMA; + ata_generic_hw(dev); + pci_enable_busmaster(dev); /* Init DMA engine */ |