diff options
author | mav <mav@FreeBSD.org> | 2009-02-18 22:17:48 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-02-18 22:17:48 +0000 |
commit | f10246717a6419e9755a0fbdd0a21da8b769c8f9 (patch) | |
tree | c51d12167c13be63889b1950e54f936d14b2ba41 | |
parent | bf75b4612ae760eeef7dbe0b2544c2532419caac (diff) | |
download | FreeBSD-src-f10246717a6419e9755a0fbdd0a21da8b769c8f9.zip FreeBSD-src-f10246717a6419e9755a0fbdd0a21da8b769c8f9.tar.gz |
As soon as they called in only same one place (ata_pcichannel_attach()),
join allocate() and dmainit() atapci subdriver's channel initialization
methods into single ch_attach() method.
As opposite to ch_attach() add new ch_detach() method to deallocate/disable
channel.
-rw-r--r-- | sys/dev/ata/ata-pci.c | 18 | ||||
-rw-r--r-- | sys/dev/ata/ata-pci.h | 8 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-acard.c | 8 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-acerlabs.c | 14 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-ahci.c | 7 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-highpoint.c | 8 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-intel.c | 18 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-jmicron.c | 16 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-marvell.c | 17 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-netcell.c | 8 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-nvidia.c | 8 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-promise.c | 36 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-serverworks.c | 6 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-siliconimage.c | 23 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-sis.c | 8 | ||||
-rw-r--r-- | sys/dev/ata/chipsets/ata-via.c | 8 |
16 files changed, 108 insertions, 103 deletions
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c index cbec410..d05d0b5 100644 --- a/sys/dev/ata/ata-pci.c +++ b/sys/dev/ata/ata-pci.c @@ -99,8 +99,7 @@ ata_pci_attach(device_t dev) else ctlr->channels = 1; ctlr->ichannels = -1; - ctlr->allocate = ata_pci_allocate; - ctlr->dmainit = ata_pci_dmainit; + ctlr->ch_attach = ata_pci_ch_attach; ctlr->dev = dev; /* if needed try to enable busmastering */ @@ -344,7 +343,7 @@ ata_generic_chipinit(device_t dev) } int -ata_pci_allocate(device_t dev) +ata_pci_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); @@ -361,6 +360,8 @@ ata_pci_allocate(device_t dev) return ENXIO; } + ata_pci_dmainit(dev); + for (i = ATA_DATA; i <= ATA_COMMAND; i ++) { ch->r_io[i].res = io; ch->r_io[i].offset = i; @@ -532,10 +533,7 @@ ata_pcichannel_attach(device_t dev) ch->unit = (intptr_t)device_get_ivars(dev); - if (ctlr->dmainit) - ctlr->dmainit(dev); - - if ((error = ctlr->allocate(dev))) + if ((error = ctlr->ch_attach(dev))) return error; return ata_attach(dev); @@ -544,14 +542,16 @@ ata_pcichannel_attach(device_t dev) static int ata_pcichannel_detach(device_t dev) { + struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); int error; if ((error = ata_detach(dev))) return error; - /* XXX SOS free resources for io and ctlio ?? */ + if (ctlr->ch_detach) + return (ctlr->ch_detach(dev)); - return 0; + return (0); } static int diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h index bd5104f..0ed0169 100644 --- a/sys/dev/ata/ata-pci.h +++ b/sys/dev/ata/ata-pci.h @@ -55,10 +55,10 @@ struct ata_pci_controller { int (*chipinit)(device_t); int (*suspend)(device_t); int (*resume)(device_t); - int (*allocate)(device_t); + int (*ch_attach)(device_t); + int (*ch_detach)(device_t); int (*locking)(device_t, int); void (*reset)(device_t); - void (*dmainit)(device_t); void (*setmode)(device_t, int); struct { void (*function)(void *); @@ -409,7 +409,7 @@ struct resource * ata_pci_alloc_resource(device_t dev, device_t child, int type, int ata_pci_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r); int ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, driver_filter_t *filter, driver_intr_t *function, void *argument, void **cookiep); int ata_pci_teardown_intr(device_t dev, device_t child, struct resource *irq, void *cookie); -int ata_pci_allocate(device_t dev); +int ata_pci_ch_attach(device_t dev); int ata_pci_status(device_t dev); void ata_pci_hw(device_t dev); void ata_pci_dmainit(device_t dev); @@ -434,7 +434,7 @@ void ata_pm_identify(device_t dev); /* global prototypes from chipsets/ata-*.c */ int ata_ahci_chipinit(device_t); -int ata_ahci_allocate(device_t dev); +int ata_ahci_ch_attach(device_t dev); void ata_ahci_reset(device_t dev); void ata_ahci_dmainit(device_t dev); int ata_marvell_edma_chipinit(device_t); diff --git a/sys/dev/ata/chipsets/ata-acard.c b/sys/dev/ata/chipsets/ata-acard.c index da4c14c..4fa7f9c 100644 --- a/sys/dev/ata/chipsets/ata-acard.c +++ b/sys/dev/ata/chipsets/ata-acard.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_acard_chipinit(device_t dev); -static int ata_acard_allocate(device_t dev); +static int ata_acard_ch_attach(device_t dev); static int ata_acard_status(device_t dev); static void ata_acard_850_setmode(device_t dev, int mode); static void ata_acard_86X_setmode(device_t dev, int mode); @@ -97,7 +97,7 @@ ata_acard_chipinit(device_t dev) if (ata_setup_interrupt(dev, ata_generic_intr)) return ENXIO; - ctlr->allocate = ata_acard_allocate; + ctlr->ch_attach = ata_acard_ch_attach; if (ctlr->chip->cfg1 == ATP_OLD) { ctlr->setmode = ata_acard_850_setmode; ctlr->locking = ata_serialize; @@ -108,12 +108,12 @@ ata_acard_chipinit(device_t dev) } static int -ata_acard_allocate(device_t dev) +ata_acard_ch_attach(device_t dev) { struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; ch->hw.status = ata_acard_status; diff --git a/sys/dev/ata/chipsets/ata-acerlabs.c b/sys/dev/ata/chipsets/ata-acerlabs.c index 6e54bc4..9c326c1 100644 --- a/sys/dev/ata/chipsets/ata-acerlabs.c +++ b/sys/dev/ata/chipsets/ata-acerlabs.c @@ -53,8 +53,8 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_ali_chipinit(device_t dev); -static int ata_ali_allocate(device_t dev); -static int ata_ali_sata_allocate(device_t dev); +static int ata_ali_ch_attach(device_t dev); +static int ata_ali_sata_ch_attach(device_t dev); static void ata_ali_reset(device_t dev); static void ata_ali_setmode(device_t dev, int mode); @@ -105,7 +105,7 @@ ata_ali_chipinit(device_t dev) switch (ctlr->chip->cfg2) { case ALI_SATA: ctlr->channels = ctlr->chip->cfg1; - ctlr->allocate = ata_ali_sata_allocate; + ctlr->ch_attach = ata_ali_sata_ch_attach; ctlr->setmode = ata_sata_setmode; /* AHCI mode is correctly supported only on the ALi 5288. */ @@ -133,7 +133,7 @@ ata_ali_chipinit(device_t dev) device_printf(dev, "using PIO transfers above 137GB as workaround for " "48bit DMA access bug, expect reduced performance\n"); - ctlr->allocate = ata_ali_allocate; + ctlr->ch_attach = ata_ali_ch_attach; ctlr->reset = ata_ali_reset; ctlr->setmode = ata_ali_setmode; break; @@ -148,13 +148,13 @@ ata_ali_chipinit(device_t dev) } static int -ata_ali_allocate(device_t dev) +ata_ali_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; /* older chips can't do 48bit DMA transfers */ @@ -165,7 +165,7 @@ ata_ali_allocate(device_t dev) } static int -ata_ali_sata_allocate(device_t dev) +ata_ali_sata_ch_attach(device_t dev) { device_t parent = device_get_parent(dev); struct ata_pci_controller *ctlr = device_get_softc(parent); diff --git a/sys/dev/ata/chipsets/ata-ahci.c b/sys/dev/ata/chipsets/ata-ahci.c index 6e14db1d..1221151 100644 --- a/sys/dev/ata/chipsets/ata-ahci.c +++ b/sys/dev/ata/chipsets/ata-ahci.c @@ -128,8 +128,7 @@ ata_ahci_chipinit(device_t dev) (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_NPMASK) + 1); ctlr->reset = ata_ahci_reset; - ctlr->dmainit = ata_ahci_dmainit; - ctlr->allocate = ata_ahci_allocate; + ctlr->ch_attach = ata_ahci_ch_attach; ctlr->setmode = ata_sata_setmode; ctlr->suspend = ata_ahci_suspend; ctlr->resume = ata_ahci_ctlr_reset; @@ -197,12 +196,14 @@ ata_ahci_suspend(device_t dev) int -ata_ahci_allocate(device_t dev) +ata_ahci_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); int offset = ch->unit << 7; + ata_ahci_dmainit(dev); + /* set the SATA resources */ ch->r_io[ATA_SSTATUS].res = ctlr->r_res2; ch->r_io[ATA_SSTATUS].offset = ATA_AHCI_P_SSTS + offset; diff --git a/sys/dev/ata/chipsets/ata-highpoint.c b/sys/dev/ata/chipsets/ata-highpoint.c index b187f53..d0bafbd 100644 --- a/sys/dev/ata/chipsets/ata-highpoint.c +++ b/sys/dev/ata/chipsets/ata-highpoint.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_highpoint_chipinit(device_t dev); -static int ata_highpoint_allocate(device_t dev); +static int ata_highpoint_ch_attach(device_t dev); static void ata_highpoint_setmode(device_t dev, int mode); static int ata_highpoint_check_80pin(device_t dev, int mode); @@ -134,18 +134,18 @@ ata_highpoint_chipinit(device_t dev) pci_write_config(dev, 0x5b, (pci_read_config(dev, 0x5b, 1) & 0x01) | 0x20, 1); } - ctlr->allocate = ata_highpoint_allocate; + ctlr->ch_attach = ata_highpoint_ch_attach; ctlr->setmode = ata_highpoint_setmode; return 0; } static int -ata_highpoint_allocate(device_t dev) +ata_highpoint_ch_attach(device_t dev) { struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; ch->flags |= ATA_ALWAYS_DMASTAT; diff --git a/sys/dev/ata/chipsets/ata-intel.c b/sys/dev/ata/chipsets/ata-intel.c index 03489d8..c7b18a3 100644 --- a/sys/dev/ata/chipsets/ata-intel.c +++ b/sys/dev/ata/chipsets/ata-intel.c @@ -53,12 +53,12 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_intel_chipinit(device_t dev); -static int ata_intel_allocate(device_t dev); +static int ata_intel_ch_attach(device_t dev); static void ata_intel_reset(device_t dev); static void ata_intel_old_setmode(device_t dev, int mode); static void ata_intel_new_setmode(device_t dev, int mode); static void ata_intel_sata_setmode(device_t dev, int mode); -static int ata_intel_31244_allocate(device_t dev); +static int ata_intel_31244_ch_attach(device_t dev); static int ata_intel_31244_status(device_t dev); static void ata_intel_31244_tf_write(struct ata_request *request); static void ata_intel_31244_reset(device_t dev); @@ -171,7 +171,7 @@ ata_intel_chipinit(device_t dev) RF_ACTIVE))) return ENXIO; ctlr->channels = 4; - ctlr->allocate = ata_intel_31244_allocate; + ctlr->ch_attach = ata_intel_31244_ch_attach; ctlr->reset = ata_intel_31244_reset; } ctlr->setmode = ata_sata_setmode; @@ -180,7 +180,7 @@ ata_intel_chipinit(device_t dev) /* non SATA intel chips goes here */ else if (ctlr->chip->max_dma < ATA_SA150) { ctlr->channels = ctlr->chip->cfg2; - ctlr->allocate = ata_intel_allocate; + ctlr->ch_attach = ata_intel_ch_attach; ctlr->setmode = ata_intel_new_setmode; } @@ -189,7 +189,7 @@ ata_intel_chipinit(device_t dev) /* force all ports active "the legacy way" */ pci_write_config(dev, 0x92, pci_read_config(dev, 0x92, 2) | 0x0f, 2); - ctlr->allocate = ata_intel_allocate; + ctlr->ch_attach = ata_intel_ch_attach; ctlr->reset = ata_intel_reset; /* @@ -218,13 +218,13 @@ ata_intel_chipinit(device_t dev) } static int -ata_intel_allocate(device_t dev) +ata_intel_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; /* if r_res2 is valid it points to SATA interface registers */ @@ -257,7 +257,7 @@ ata_intel_reset(device_t dev) mask = 0x0003; else { mask = (0x0001 << ch->unit); - /* XXX SOS should be in intel_allocate if we grow it */ + /* XXX SOS should be in intel_ch_attach if we grow it */ ch->flags |= ATA_NO_SLAVE; } } @@ -396,7 +396,7 @@ ata_intel_sata_setmode(device_t dev, int mode) } static int -ata_intel_31244_allocate(device_t dev) +ata_intel_31244_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); diff --git a/sys/dev/ata/chipsets/ata-jmicron.c b/sys/dev/ata/chipsets/ata-jmicron.c index 32a9b57..30e334f 100644 --- a/sys/dev/ata/chipsets/ata-jmicron.c +++ b/sys/dev/ata/chipsets/ata-jmicron.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_jmicron_chipinit(device_t dev); -static int ata_jmicron_allocate(device_t dev); +static int ata_jmicron_ch_attach(device_t dev); static void ata_jmicron_reset(device_t dev); static void ata_jmicron_dmainit(device_t dev); static void ata_jmicron_setmode(device_t dev, int mode); @@ -112,9 +112,8 @@ ata_jmicron_chipinit(device_t dev) return 0; /* otherwise we are on the PATA part */ - ctlr->allocate = ata_pci_allocate; + ctlr->ch_attach = ata_pci_ch_attach; ctlr->reset = ata_generic_reset; - ctlr->dmainit = ata_pci_dmainit; ctlr->setmode = ata_jmicron_setmode; ctlr->channels = ctlr->chip->cfg2; } @@ -126,9 +125,8 @@ ata_jmicron_chipinit(device_t dev) if (ctlr->chip->cfg1 && (error = ata_ahci_chipinit(dev))) return error; - ctlr->allocate = ata_jmicron_allocate; + ctlr->ch_attach = ata_jmicron_ch_attach; ctlr->reset = ata_jmicron_reset; - ctlr->dmainit = ata_jmicron_dmainit; ctlr->setmode = ata_jmicron_setmode; /* set the number of HW channels */ @@ -138,19 +136,21 @@ ata_jmicron_chipinit(device_t dev) } static int -ata_jmicron_allocate(device_t dev) +ata_jmicron_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); int error; + ata_jmicron_dmainit(dev); + if (ch->unit >= ctlr->chip->cfg1) { ch->unit -= ctlr->chip->cfg1; - error = ata_pci_allocate(dev); + error = ata_pci_ch_attach(dev); ch->unit += ctlr->chip->cfg1; } else - error = ata_ahci_allocate(dev); + error = ata_ahci_ch_attach(dev); return error; } diff --git a/sys/dev/ata/chipsets/ata-marvell.c b/sys/dev/ata/chipsets/ata-marvell.c index b236bd3..1184a7b 100644 --- a/sys/dev/ata/chipsets/ata-marvell.c +++ b/sys/dev/ata/chipsets/ata-marvell.c @@ -53,9 +53,9 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_marvell_pata_chipinit(device_t dev); -static int ata_marvell_pata_allocate(device_t dev); +static int ata_marvell_pata_ch_attach(device_t dev); static void ata_marvell_pata_setmode(device_t dev, int mode); -static int ata_marvell_edma_allocate(device_t dev); +static int ata_marvell_edma_ch_attach(device_t dev); static int ata_marvell_edma_status(device_t dev); static int ata_marvell_edma_begin_transaction(struct ata_request *request); static int ata_marvell_edma_end_transaction(struct ata_request *request); @@ -135,19 +135,19 @@ ata_marvell_pata_chipinit(device_t dev) if (ata_setup_interrupt(dev, ata_generic_intr)) return ENXIO; - ctlr->allocate = ata_marvell_pata_allocate; + ctlr->ch_attach = ata_marvell_pata_ch_attach; ctlr->setmode = ata_marvell_pata_setmode; ctlr->channels = ctlr->chip->cfg1; return 0; } static int -ata_marvell_pata_allocate(device_t dev) +ata_marvell_pata_ch_attach(device_t dev) { struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; /* dont use 32 bit PIO transfers */ @@ -189,9 +189,8 @@ ata_marvell_edma_chipinit(device_t dev) /* mask all PCI interrupts */ ATA_OUTL(ctlr->r_res1, 0x01d5c, 0x00000000); - ctlr->allocate = ata_marvell_edma_allocate; + ctlr->ch_attach = ata_marvell_edma_ch_attach; ctlr->reset = ata_marvell_edma_reset; - ctlr->dmainit = ata_marvell_edma_dmainit; ctlr->setmode = ata_sata_setmode; ctlr->channels = ctlr->chip->cfg1; @@ -217,13 +216,15 @@ ata_marvell_edma_chipinit(device_t dev) } static int -ata_marvell_edma_allocate(device_t dev) +ata_marvell_edma_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); u_int64_t work = ch->dma.work_bus; int i; + ata_marvell_edma_dmainit(dev); + /* clear work area */ bzero(ch->dma.work, 1024+256); diff --git a/sys/dev/ata/chipsets/ata-netcell.c b/sys/dev/ata/chipsets/ata-netcell.c index 7a446f1..a87458e 100644 --- a/sys/dev/ata/chipsets/ata-netcell.c +++ b/sys/dev/ata/chipsets/ata-netcell.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_netcell_chipinit(device_t dev); -static int ata_netcell_allocate(device_t dev); +static int ata_netcell_ch_attach(device_t dev); static void ata_netcell_setmode(device_t dev, int mode); @@ -81,18 +81,18 @@ ata_netcell_chipinit(device_t dev) if (ata_setup_interrupt(dev, ata_generic_intr)) return ENXIO; - ctlr->allocate = ata_netcell_allocate; + ctlr->ch_attach = ata_netcell_ch_attach; ctlr->setmode = ata_netcell_setmode; return 0; } static int -ata_netcell_allocate(device_t dev) +ata_netcell_ch_attach(device_t dev) { struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; /* the NetCell only supports 16 bit PIO transfers */ diff --git a/sys/dev/ata/chipsets/ata-nvidia.c b/sys/dev/ata/chipsets/ata-nvidia.c index 6042e8d..f8207f7 100644 --- a/sys/dev/ata/chipsets/ata-nvidia.c +++ b/sys/dev/ata/chipsets/ata-nvidia.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_nvidia_chipinit(device_t dev); -static int ata_nvidia_allocate(device_t dev); +static int ata_nvidia_ch_attach(device_t dev); static int ata_nvidia_status(device_t dev); static void ata_nvidia_reset(device_t dev); static void ata_nvidia_setmode(device_t dev, int mode); @@ -130,7 +130,7 @@ ata_nvidia_chipinit(device_t dev) &ctlr->r_rid2, RF_ACTIVE))) { int offset = ctlr->chip->cfg1 & NV4 ? 0x0440 : 0x0010; - ctlr->allocate = ata_nvidia_allocate; + ctlr->ch_attach = ata_nvidia_ch_attach; ctlr->reset = ata_nvidia_reset; /* enable control access */ @@ -171,13 +171,13 @@ ata_nvidia_chipinit(device_t dev) } static int -ata_nvidia_allocate(device_t dev) +ata_nvidia_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; ch->r_io[ATA_SSTATUS].res = ctlr->r_res2; diff --git a/sys/dev/ata/chipsets/ata-promise.c b/sys/dev/ata/chipsets/ata-promise.c index 7d1ec21..080123d 100644 --- a/sys/dev/ata/chipsets/ata-promise.c +++ b/sys/dev/ata/chipsets/ata-promise.c @@ -53,16 +53,16 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_promise_chipinit(device_t dev); -static int ata_promise_allocate(device_t dev); +static int ata_promise_ch_attach(device_t dev); static int ata_promise_status(device_t dev); static int ata_promise_dmastart(struct ata_request *request); static int ata_promise_dmastop(struct ata_request *request); static void ata_promise_dmareset(device_t dev); static void ata_promise_dmainit(device_t dev); static void ata_promise_setmode(device_t dev, int mode); -static int ata_promise_tx2_allocate(device_t dev); +static int ata_promise_tx2_ch_attach(device_t dev); static int ata_promise_tx2_status(device_t dev); -static int ata_promise_mio_allocate(device_t dev); +static int ata_promise_mio_ch_attach(device_t dev); static void ata_promise_mio_intr(void *data); static int ata_promise_mio_status(device_t dev); static int ata_promise_mio_command(struct ata_request *request); @@ -226,19 +226,17 @@ ata_promise_chipinit(device_t dev) case PR_NEW: /* setup clocks */ ATA_OUTB(ctlr->r_res1, 0x11, ATA_INB(ctlr->r_res1, 0x11) | 0x0a); - - ctlr->dmainit = ata_promise_dmainit; /* FALLTHROUGH */ case PR_OLD: /* enable burst mode */ ATA_OUTB(ctlr->r_res1, 0x1f, ATA_INB(ctlr->r_res1, 0x1f) | 0x01); - ctlr->allocate = ata_promise_allocate; + ctlr->ch_attach = ata_promise_ch_attach; ctlr->setmode = ata_promise_setmode; return 0; case PR_TX: - ctlr->allocate = ata_promise_tx2_allocate; + ctlr->ch_attach = ata_promise_tx2_ch_attach; ctlr->setmode = ata_promise_setmode; return 0; @@ -284,9 +282,8 @@ ata_promise_chipinit(device_t dev) TAILQ_INIT(&hpkt->queue); hpkt->busy = 0; device_set_ivars(dev, hpkt); - ctlr->allocate = ata_promise_mio_allocate; + ctlr->ch_attach = ata_promise_mio_ch_attach; ctlr->reset = ata_promise_mio_reset; - ctlr->dmainit = ata_promise_mio_dmainit; ctlr->setmode = ata_promise_setmode; ctlr->channels = 4; return 0; @@ -337,9 +334,8 @@ sataii: if ((ctlr->chip->cfg2 == PR_SATA2) || (ctlr->chip->cfg2 == PR_CMBO2)) ATA_OUTL(ctlr->r_res2, 0x44, ATA_INL(ctlr->r_res2, 0x44) | 0x2000); - ctlr->allocate = ata_promise_mio_allocate; + ctlr->ch_attach = ata_promise_mio_ch_attach; ctlr->reset = ata_promise_mio_reset; - ctlr->dmainit = ata_promise_mio_dmainit; ctlr->setmode = ata_promise_mio_setmode; return 0; @@ -354,11 +350,15 @@ failnfree: } static int -ata_promise_allocate(device_t dev) +ata_promise_ch_attach(device_t dev) { + struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); - if (ata_pci_allocate(dev)) + if (ctlr->chip->cfg1 == PR_NEW) + ata_promise_dmainit(dev); + + if (ata_pci_ch_attach(dev)) return ENXIO; ch->hw.status = ata_promise_status; @@ -521,11 +521,11 @@ ata_promise_setmode(device_t dev, int mode) } static int -ata_promise_tx2_allocate(device_t dev) +ata_promise_tx2_ch_attach(device_t dev) { struct ata_channel *ch = device_get_softc(dev); - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; ch->hw.status = ata_promise_tx2_status; @@ -545,13 +545,15 @@ ata_promise_tx2_status(device_t dev) } static int -ata_promise_mio_allocate(device_t dev) +ata_promise_mio_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); int offset = (ctlr->chip->cfg2 & PR_SX4X) ? 0x000c0000 : 0; int i; - + + ata_promise_mio_dmainit(dev); + for (i = ATA_DATA; i <= ATA_COMMAND; i++) { ch->r_io[i].res = ctlr->r_res2; ch->r_io[i].offset = offset + 0x0200 + (i << 2) + (ch->unit << 7); diff --git a/sys/dev/ata/chipsets/ata-serverworks.c b/sys/dev/ata/chipsets/ata-serverworks.c index 0abdc60..2bd426d 100644 --- a/sys/dev/ata/chipsets/ata-serverworks.c +++ b/sys/dev/ata/chipsets/ata-serverworks.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_serverworks_chipinit(device_t dev); -static int ata_serverworks_allocate(device_t dev); +static int ata_serverworks_ch_attach(device_t dev); static void ata_serverworks_tf_read(struct ata_request *request); static void ata_serverworks_tf_write(struct ata_request *request); static void ata_serverworks_setmode(device_t dev, int mode); @@ -113,7 +113,7 @@ ata_serverworks_chipinit(device_t dev) return ENXIO; ctlr->channels = ctlr->chip->cfg2; - ctlr->allocate = ata_serverworks_allocate; + ctlr->ch_attach = ata_serverworks_ch_attach; ctlr->setmode = ata_sata_setmode; return 0; } @@ -144,7 +144,7 @@ ata_serverworks_chipinit(device_t dev) } static int -ata_serverworks_allocate(device_t dev) +ata_serverworks_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); diff --git a/sys/dev/ata/chipsets/ata-siliconimage.c b/sys/dev/ata/chipsets/ata-siliconimage.c index b3e8358..c13af95 100644 --- a/sys/dev/ata/chipsets/ata-siliconimage.c +++ b/sys/dev/ata/chipsets/ata-siliconimage.c @@ -52,14 +52,14 @@ __FBSDID("$FreeBSD$"); #include <ata_if.h> /* local prototypes */ -static int ata_cmd_allocate(device_t dev); +static int ata_cmd_ch_attach(device_t dev); static int ata_cmd_status(device_t dev); static void ata_cmd_setmode(device_t dev, int mode); -static int ata_sii_allocate(device_t dev); +static int ata_sii_ch_attach(device_t dev); static int ata_sii_status(device_t dev); static void ata_sii_reset(device_t dev); static void ata_sii_setmode(device_t dev, int mode); -static int ata_siiprb_allocate(device_t dev); +static int ata_siiprb_ch_attach(device_t dev); static int ata_siiprb_status(device_t dev); static int ata_siiprb_begin_transaction(struct ata_request *request); static int ata_siiprb_end_transaction(struct ata_request *request); @@ -138,9 +138,8 @@ ata_sii_chipinit(device_t dev) bus_release_resource(dev, ctlr->r_type1, ctlr->r_rid1,ctlr->r_res1); return ENXIO; } - ctlr->allocate = ata_siiprb_allocate; + ctlr->ch_attach = ata_siiprb_ch_attach; ctlr->reset = ata_siiprb_reset; - ctlr->dmainit = ata_siiprb_dmainit; ctlr->setmode = ata_sata_setmode; ctlr->channels = (ctlr->chip->cfg2 == SII_4CH) ? 4 : 2; @@ -187,7 +186,7 @@ ata_sii_chipinit(device_t dev) pci_write_config(dev, 0x8a, (pci_read_config(dev, 0x8a, 1) & 0x3f), 1); if (ctlr->r_res2) - ctlr->allocate = ata_sii_allocate; + ctlr->ch_attach = ata_sii_ch_attach; if (ctlr->chip->max_dma >= ATA_SA150) { ctlr->reset = ata_sii_reset; @@ -206,7 +205,7 @@ ata_sii_chipinit(device_t dev) /* enable interrupt as BIOS might not */ pci_write_config(dev, 0x71, 0x01, 1); - ctlr->allocate = ata_cmd_allocate; + ctlr->ch_attach = ata_cmd_ch_attach; ctlr->setmode = ata_cmd_setmode; break; } @@ -214,13 +213,13 @@ ata_sii_chipinit(device_t dev) } static int -ata_cmd_allocate(device_t dev) +ata_cmd_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; if (ctlr->chip->cfg2 & SII_INTR) @@ -300,7 +299,7 @@ ata_cmd_setmode(device_t dev, int mode) } static int -ata_sii_allocate(device_t dev) +ata_sii_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); @@ -467,12 +466,14 @@ struct ata_siiprb_command { } __packed; static int -ata_siiprb_allocate(device_t dev) +ata_siiprb_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); int offset = ch->unit * 0x2000; + ata_siiprb_dmainit(dev); + /* set the SATA resources */ ch->r_io[ATA_SSTATUS].res = ctlr->r_res2; ch->r_io[ATA_SSTATUS].offset = 0x1f04 + offset; diff --git a/sys/dev/ata/chipsets/ata-sis.c b/sys/dev/ata/chipsets/ata-sis.c index 56b194d..de84c05 100644 --- a/sys/dev/ata/chipsets/ata-sis.c +++ b/sys/dev/ata/chipsets/ata-sis.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_sis_chipinit(device_t dev); -static int ata_sis_allocate(device_t dev); +static int ata_sis_ch_attach(device_t dev); static void ata_sis_reset(device_t dev); static void ata_sis_setmode(device_t dev, int mode); @@ -186,7 +186,7 @@ ata_sis_chipinit(device_t dev) ctlr->r_rid2 = PCIR_BAR(5); if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, &ctlr->r_rid2, RF_ACTIVE))) { - ctlr->allocate = ata_sis_allocate; + ctlr->ch_attach = ata_sis_ch_attach; ctlr->reset = ata_sis_reset; /* enable PCI interrupt */ @@ -203,14 +203,14 @@ ata_sis_chipinit(device_t dev) } static int -ata_sis_allocate(device_t dev) +ata_sis_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); int offset = ch->unit << ((ctlr->chip->chipid == ATA_SIS182) ? 5 : 6); /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; ch->r_io[ATA_SSTATUS].res = ctlr->r_res2; diff --git a/sys/dev/ata/chipsets/ata-via.c b/sys/dev/ata/chipsets/ata-via.c index 04d9904..29146ef 100644 --- a/sys/dev/ata/chipsets/ata-via.c +++ b/sys/dev/ata/chipsets/ata-via.c @@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$"); /* local prototypes */ static int ata_via_chipinit(device_t dev); -static int ata_via_allocate(device_t dev); +static int ata_via_ch_attach(device_t dev); static void ata_via_reset(device_t dev); static void ata_via_old_setmode(device_t dev, int mode); static void ata_via_southbridge_fixup(device_t dev); @@ -139,7 +139,7 @@ ata_via_chipinit(device_t dev) ctlr->r_rid2 = PCIR_BAR(5); if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, &ctlr->r_rid2, RF_ACTIVE))) { - ctlr->allocate = ata_via_allocate; + ctlr->ch_attach = ata_via_ch_attach; ctlr->reset = ata_via_reset; /* enable PCI interrupt */ @@ -184,7 +184,7 @@ ata_via_chipinit(device_t dev) } static int -ata_via_allocate(device_t dev) +ata_via_ch_attach(device_t dev) { struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); @@ -218,7 +218,7 @@ ata_via_allocate(device_t dev) } else { /* setup the usual register normal pci style */ - if (ata_pci_allocate(dev)) + if (ata_pci_ch_attach(dev)) return ENXIO; } |