Merge a diff that Soren sent me to resolve some lun / unit problems.
While here, also fix my additions to use naming that's more consistant with Sorens. (ie: s/softc/scp/)
This commit is contained in:
parent
0b200cc726
commit
b8759ee827
@ -25,7 +25,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: ata-all.c,v 1.8 1999/04/18 20:48:15 sos Exp $
|
* $Id: ata-all.c,v 1.9 1999/04/21 07:26:25 peter Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ata.h"
|
#include "ata.h"
|
||||||
@ -76,12 +76,8 @@ static void promise_intr(void *);
|
|||||||
static int32_t ata_probe(int32_t, int32_t, int32_t, device_t, int32_t *);
|
static int32_t ata_probe(int32_t, int32_t, int32_t, device_t, int32_t *);
|
||||||
static void ataintr(void *);
|
static void ataintr(void *);
|
||||||
|
|
||||||
/*
|
|
||||||
* Ought to be handled by the devclass.
|
|
||||||
*/
|
|
||||||
static int32_t atanlun = 0;
|
static int32_t atanlun = 0;
|
||||||
struct ata_softc *atadevices[MAXATA];
|
struct ata_softc *atadevices[MAXATA];
|
||||||
|
|
||||||
static devclass_t ata_devclass;
|
static devclass_t ata_devclass;
|
||||||
|
|
||||||
#if NISA > 0
|
#if NISA > 0
|
||||||
@ -92,7 +88,7 @@ ata_isaprobe(device_t dev)
|
|||||||
struct resource *port;
|
struct resource *port;
|
||||||
int rid;
|
int rid;
|
||||||
int32_t ctlr, res;
|
int32_t ctlr, res;
|
||||||
int unit;
|
int32_t lun;
|
||||||
|
|
||||||
/* Allocate the port range */
|
/* Allocate the port range */
|
||||||
rid = 0;
|
rid = 0;
|
||||||
@ -109,14 +105,9 @@ ata_isaprobe(device_t dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
lun = 0;
|
||||||
* XXX not sure what to do with the unit. The new bus code will
|
|
||||||
* automatically assign unit numbers for both pci and isa. For
|
|
||||||
* now, store it in the softc.
|
|
||||||
*/
|
|
||||||
res = ata_probe(rman_get_start(port), rman_get_start(port) + ATA_ALTPORT,
|
res = ata_probe(rman_get_start(port), rman_get_start(port) + ATA_ALTPORT,
|
||||||
0, dev, &unit);
|
0, dev, &lun);
|
||||||
*(int *) device_get_softc(dev) = unit;
|
|
||||||
|
|
||||||
bus_release_resource(dev, SYS_RES_IOPORT, 0, port);
|
bus_release_resource(dev, SYS_RES_IOPORT, 0, port);
|
||||||
|
|
||||||
@ -131,11 +122,11 @@ ata_isaprobe(device_t dev)
|
|||||||
static int
|
static int
|
||||||
ata_isaattach(device_t dev)
|
ata_isaattach(device_t dev)
|
||||||
{
|
{
|
||||||
|
struct ata_softc *scp;
|
||||||
struct resource *port;
|
struct resource *port;
|
||||||
struct resource *irq;
|
struct resource *irq;
|
||||||
void *ih;
|
void *ih;
|
||||||
int rid;
|
int rid;
|
||||||
struct ata_softc *softc;
|
|
||||||
|
|
||||||
/* Allocate the port range and interrupt */
|
/* Allocate the port range and interrupt */
|
||||||
rid = 0;
|
rid = 0;
|
||||||
@ -149,8 +140,8 @@ ata_isaattach(device_t dev)
|
|||||||
bus_release_resource(dev, SYS_RES_IOPORT, 0, port);
|
bus_release_resource(dev, SYS_RES_IOPORT, 0, port);
|
||||||
return (ENOMEM);
|
return (ENOMEM);
|
||||||
}
|
}
|
||||||
softc = device_get_softc(dev);
|
scp = device_get_softc(dev);
|
||||||
return bus_setup_intr(dev, irq, ataintr, softc, &ih);
|
return bus_setup_intr(dev, irq, ataintr, scp, &ih);
|
||||||
}
|
}
|
||||||
|
|
||||||
static device_method_t ata_isa_methods[] = {
|
static device_method_t ata_isa_methods[] = {
|
||||||
@ -161,7 +152,7 @@ static device_method_t ata_isa_methods[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static driver_t ata_isa_driver = {
|
static driver_t ata_isa_driver = {
|
||||||
"ata",
|
"ata-isa",
|
||||||
ata_isa_methods,
|
ata_isa_methods,
|
||||||
DRIVER_TYPE_BIO,
|
DRIVER_TYPE_BIO,
|
||||||
sizeof(int),
|
sizeof(int),
|
||||||
@ -228,7 +219,7 @@ static int
|
|||||||
ata_pciattach(device_t dev)
|
ata_pciattach(device_t dev)
|
||||||
{
|
{
|
||||||
int unit = device_get_unit(dev);
|
int unit = device_get_unit(dev);
|
||||||
struct ata_softc *softc;
|
struct ata_softc *scp;
|
||||||
u_int32_t type;
|
u_int32_t type;
|
||||||
u_int8_t class, subclass;
|
u_int8_t class, subclass;
|
||||||
u_int32_t cmd;
|
u_int32_t cmd;
|
||||||
@ -243,7 +234,7 @@ ata_pciattach(device_t dev)
|
|||||||
cmd = pci_read_config(dev, PCIR_COMMAND, 4);
|
cmd = pci_read_config(dev, PCIR_COMMAND, 4);
|
||||||
|
|
||||||
#ifdef ATA_DEBUG
|
#ifdef ATA_DEBUG
|
||||||
printf("ata%d: type=%08x class=%02x subclass=%02x cmd=%08x\n",
|
printf("ata-pci%d: type=%08x class=%02x subclass=%02x cmd=%08x\n",
|
||||||
unit, type, class, subclass, cmd);
|
unit, type, class, subclass, cmd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -307,14 +298,14 @@ ata_pciattach(device_t dev)
|
|||||||
/* now probe the addresse found for "real" ATA/ATAPI hardware */
|
/* now probe the addresse found for "real" ATA/ATAPI hardware */
|
||||||
lun = 0;
|
lun = 0;
|
||||||
if (ata_probe(iobase_1, altiobase_1, bmaddr_1, dev, &lun)) {
|
if (ata_probe(iobase_1, altiobase_1, bmaddr_1, dev, &lun)) {
|
||||||
softc = atadevices[lun];
|
scp = atadevices[lun];
|
||||||
if (iobase_1 == IO_WD1)
|
if (iobase_1 == IO_WD1)
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
inthand_add(device_get_nameunit(dev), irq1, ataintr, softc,
|
inthand_add(device_get_nameunit(dev), irq1, ataintr, scp,
|
||||||
&bio_imask, INTR_EXCL);
|
&bio_imask, INTR_EXCL);
|
||||||
#endif
|
#endif
|
||||||
#ifdef __alpha__
|
#ifdef __alpha__
|
||||||
alpha_platform_setup_ide_intr(0, ataintr, softc);
|
alpha_platform_setup_ide_intr(0, ataintr, scp);
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
struct resource *irq;
|
struct resource *irq;
|
||||||
@ -323,23 +314,23 @@ ata_pciattach(device_t dev)
|
|||||||
|
|
||||||
irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0,1,RF_ACTIVE);
|
irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0,1,RF_ACTIVE);
|
||||||
if (sysctrl)
|
if (sysctrl)
|
||||||
bus_setup_intr(dev, irq, promise_intr, softc, &ih);
|
bus_setup_intr(dev, irq, promise_intr, scp, &ih);
|
||||||
else
|
else
|
||||||
bus_setup_intr(dev, irq, ataintr, softc, &ih);
|
bus_setup_intr(dev, irq, ataintr, scp, &ih);
|
||||||
}
|
}
|
||||||
printf("ata%d at 0x%04x irq %d on ata-pci%d\n",
|
printf("ata%d at 0x%04x irq %d on ata-pci%d\n",
|
||||||
lun, iobase_1, isa_apic_irq(irq1), unit);
|
lun, iobase_1, isa_apic_irq(irq1), unit);
|
||||||
}
|
}
|
||||||
lun = 1;
|
lun = 1;
|
||||||
if (ata_probe(iobase_2, altiobase_2, bmaddr_2, dev, &lun)) {
|
if (ata_probe(iobase_2, altiobase_2, bmaddr_2, dev, &lun)) {
|
||||||
softc = atadevices[lun];
|
scp = atadevices[lun];
|
||||||
if (iobase_2 == IO_WD2)
|
if (iobase_2 == IO_WD2)
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
inthand_add(device_get_nameunit(dev), irq2, ataintr, softc,
|
inthand_add(device_get_nameunit(dev), irq2, ataintr, scp,
|
||||||
&bio_imask, INTR_EXCL);
|
&bio_imask, INTR_EXCL);
|
||||||
#endif
|
#endif
|
||||||
#ifdef __alpha__
|
#ifdef __alpha__
|
||||||
alpha_platform_setup_ide_intr(1, ataintr, softc);
|
alpha_platform_setup_ide_intr(1, ataintr, scp);
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
struct resource *irq;
|
struct resource *irq;
|
||||||
@ -348,7 +339,7 @@ ata_pciattach(device_t dev)
|
|||||||
|
|
||||||
irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0,1,RF_ACTIVE);
|
irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0,1,RF_ACTIVE);
|
||||||
if (!sysctrl)
|
if (!sysctrl)
|
||||||
bus_setup_intr(dev, irq, ataintr, softc, &ih);
|
bus_setup_intr(dev, irq, ataintr, scp, &ih);
|
||||||
}
|
}
|
||||||
printf("ata%d at 0x%04x irq %d on ata-pci%d\n",
|
printf("ata%d at 0x%04x irq %d on ata-pci%d\n",
|
||||||
lun, iobase_2, isa_apic_irq(irq2), unit);
|
lun, iobase_2, isa_apic_irq(irq2), unit);
|
||||||
@ -364,7 +355,7 @@ static device_method_t ata_pci_methods[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static driver_t ata_pci_driver = {
|
static driver_t ata_pci_driver = {
|
||||||
"ata",
|
"ata-pci",
|
||||||
ata_pci_methods,
|
ata_pci_methods,
|
||||||
DRIVER_TYPE_BIO,
|
DRIVER_TYPE_BIO,
|
||||||
sizeof(int),
|
sizeof(int),
|
||||||
|
Loading…
Reference in New Issue
Block a user