Deleted Added
full compact
47c47
< * $FreeBSD: head/sys/dev/advansys/adv_isa.c 56178 2000-01-17 12:49:54Z nyan $
---
> * $FreeBSD: head/sys/dev/advansys/adv_isa.c 59082 2000-04-07 11:32:42Z nyan $
51a52
> #include <sys/kernel.h>
54a56,58
> #include <machine/resource.h>
> #include <sys/bus.h>
> #include <sys/rman.h>
56c60
< #include <i386/isa/isa_device.h>
---
> #include <isa/isavar.h>
94,95c98,99
< static int advisaprobe(struct isa_device *id);
< static int advisaattach(struct isa_device *id);
---
> static int adv_isa_probe(device_t dev);
> static int adv_isa_attach(device_t dev);
100,108d103
< static void adv_isa_intr(void *unit);
<
< struct isa_driver advdriver =
< {
< advisaprobe,
< advisaattach,
< "adv"
< };
<
110c105
< advisaprobe(struct isa_device *id)
---
> adv_isa_probe(device_t dev)
113a109,112
> u_long iobase, irq;
> int rid = 0;
> void *ih;
> struct resource *iores, *irqres;
121c120
< if (id->id_iobase > 0) {
---
> if (bus_get_resource(dev, SYS_RES_IOPORT, 0, &iobase, NULL) == 0) {
123c122
< if (id->id_iobase <= adv_isa_ioports[port_index])
---
> if (iobase <= adv_isa_ioports[port_index])
126,127c125,126
< || (id->id_iobase != adv_isa_ioports[port_index])) {
< printf("adv%d: Invalid baseport of 0x%x specified. "
---
> || (iobase != adv_isa_ioports[port_index])) {
> printf("adv%d: Invalid baseport of 0x%lx specified. "
129c128
< "probe.\n", id->id_unit, id->id_iobase,
---
> "probe.\n", device_get_unit(dev), iobase,
133c132
< return 0;
---
> return ENXIO;
150,151c149,150
< id->id_iobase = port_addr;
< if (haveseen_iobase(id, 1)) /* XXX real portsize? */
---
>
> if (bus_set_resource(dev, SYS_RES_IOPORT, 0, port_addr, 1))
154c153,160
< if (adv_find_signature(I386_BUS_SPACE_IO, port_addr)) {
---
> /* XXX what is the real portsize? */
> iores = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 1,
> RF_ACTIVE);
> if (iores == NULL)
> continue;
>
> if (adv_find_signature(rman_get_bustag(iores),
> rman_get_bushandle(iores))) {
160,161c166,167
< adv = adv_alloc(id->id_unit, I386_BUS_SPACE_IO,
< port_addr);
---
> adv = adv_alloc(dev, rman_get_bustag(iores),
> rman_get_bushandle(iores));
163c169
< return (0);
---
> return ENXIO;
165,168d170
< adv_unit++;
<
< id->id_iobase = adv->bsh;
<
185c187
< id->id_drq = -1;
---
> bus_delete_resource(dev, SYS_RES_DRQ, 0);
201c203,204
< id->id_drq = adv->isa_dma_channel;
---
> bus_set_resource(dev, SYS_RES_DRQ, 0,
> adv->isa_dma_channel, 1);
229c232
< return (0);
---
> return ENXIO;
249c252
< return (0);
---
> return ENXIO;
257c260
< return (0);
---
> return ENXIO;
270c273
< return (0);
---
> return ENXIO;
296,297c299,301
< if (id->id_irq == 0 /* irq ? */)
< id->id_irq = 1 << adv_get_chip_irq(adv);
---
> if (bus_get_resource(dev, SYS_RES_IRQ, 0, &irq, NULL))
> bus_set_resource(dev, SYS_RES_IRQ, 0,
> adv_get_chip_irq(adv), 1);
299c303
< adv_set_chip_irq(adv, ffs(id->id_irq) - 1);
---
> adv_set_chip_irq(adv, irq);
301,302c305,313
< id->id_intr = adv_isa_intr;
<
---
> irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &rid,
> 0, ~0, 1, RF_ACTIVE);
> if (irqres == NULL ||
> bus_setup_intr(dev, irqres, INTR_TYPE_CAM,
> adv_intr, adv, &ih)) {
> adv_free(adv);
> return ENXIO;
> }
>
305c316
< return 1; /* XXX what is the real portsize? */
---
> return 0;
309c320
< return 0;
---
> return ENXIO;
313c324
< advisaattach(struct isa_device *id)
---
> adv_isa_attach(device_t dev)
315c326
< struct adv_softc *adv;
---
> struct adv_softc *adv = device_get_softc(dev);
317d327
< adv = advsoftcs[id->id_unit];
368d377
< return;
371,381c380,392
< /*
< * Handle an ISA interrupt.
< * XXX should go away as soon as ISA interrupt handlers
< * take a (void *) arg.
< */
< static void
< adv_isa_intr(void *unit)
< {
< struct adv_softc *arg = advsoftcs[(int)unit];
< adv_intr((void *)arg);
< }
---
> static device_method_t adv_isa_methods[] = {
> /* Device interface */
> DEVMETHOD(device_probe, adv_isa_probe),
> DEVMETHOD(device_attach, adv_isa_attach),
> { 0, 0 }
> };
>
> static driver_t adv_isa_driver = {
> "adv", adv_isa_methods, sizeof(struct adv_softc)
> };
>
> static devclass_t adv_isa_devclass;
> DRIVER_MODULE(adv, isa, adv_isa_driver, adv_isa_devclass, 0, 0);