--- src/sys/dev/disk/aic/aic_isa.c 2006/10/25 20:55:53 1.7 +++ src/sys/dev/disk/aic/aic_isa.c 2008/01/05 07:27:09 1.8 @@ -28,7 +28,6 @@ */ #include -#include #include #include #include @@ -55,6 +54,12 @@ static u_int aic_isa_ports[] = { 0x340, #define AIC_ISA_NUMPORTS (sizeof(aic_isa_ports) / sizeof(aic_isa_ports[0])) #define AIC_ISA_PORTSIZE 0x20 +static struct isa_pnp_id aic_ids[] = { + { 0x15309004, "Adaptec AHA-1530P" }, + { 0x15209004, "Adaptec AHA-1520P" }, + { 0 } +}; + static int aic_isa_alloc_resources(device_t dev) { @@ -66,14 +71,17 @@ aic_isa_alloc_resources(device_t dev) rid = 0; sc->sc_port = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0ul, ~0ul, AIC_ISA_PORTSIZE, RF_ACTIVE); - if (!sc->sc_port) + if (!sc->sc_port) { + device_printf(dev, "I/O port allocation failed\n"); return (ENOMEM); + } if (isa_get_irq(dev) != -1) { rid = 0; - sc->sc_irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, - 0ul, ~0ul, 1, RF_ACTIVE); + sc->sc_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + RF_ACTIVE); if (!sc->sc_irq) { + device_printf(dev, "IRQ allocation failed\n"); aic_isa_release_resources(dev); return (ENOMEM); } @@ -81,9 +89,10 @@ aic_isa_alloc_resources(device_t dev) if (isa_get_drq(dev) != -1) { rid = 0; - sc->sc_drq = bus_alloc_resource(dev, SYS_RES_DRQ, &rid, - 0ul, ~0ul, 1, RF_ACTIVE); + sc->sc_drq = bus_alloc_resource_any(dev, SYS_RES_DRQ, &rid, + RF_ACTIVE); if (!sc->sc_drq) { + device_printf(dev, "DRQ allocation failed\n"); aic_isa_release_resources(dev); return (ENOMEM); } @@ -118,7 +127,7 @@ aic_isa_probe(device_t dev) u_int port, *ports; u_int8_t porta; - if (isa_get_vendorid(dev)) + if (ISA_PNP_PROBE(device_get_parent(dev), dev, aic_ids) == ENXIO) return (ENXIO); port = isa_get_port(dev); @@ -222,4 +231,5 @@ static driver_t aic_isa_driver = { extern devclass_t aic_devclass; +MODULE_DEPEND(aic, cam, 1,1,1); DRIVER_MODULE(aic, isa, aic_isa_driver, aic_devclass, 0, 0);