summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/powermac/ata_kauai.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/powerpc/powermac/ata_kauai.c')
-rw-r--r--sys/powerpc/powermac/ata_kauai.c60
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 */
OpenPOWER on IntegriCloud