diff options
Diffstat (limited to 'sys/dev/cy/cy_pci.c')
-rw-r--r-- | sys/dev/cy/cy_pci.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/sys/dev/cy/cy_pci.c b/sys/dev/cy/cy_pci.c index ef5cccd..faa660b 100644 --- a/sys/dev/cy/cy_pci.c +++ b/sys/dev/cy/cy_pci.c @@ -66,8 +66,8 @@ __FBSDID("$FreeBSD$"); #define PLX_9060 0x0c #define PLX_9080 0x0d -extern int cyattach_common(void *, int); /* Not exactly correct */ -extern void cyintr(int); +void *cyattach_common(u_char volatile *iobase, int cy_align); +driver_intr_t cyintr; static int cy_pci_attach(device_t dev); static int cy_pci_probe(device_t dev); @@ -110,9 +110,9 @@ cy_pci_attach(dev) device_t dev; { struct resource *ioport_res, *irq_res, *mem_res; - void *irq_cookie, *vaddr; + void *irq_cookie, *vaddr, *vsc; u_int32_t ioport; - int adapter, irq_setup, ioport_rid, irq_rid, mem_rid; + int irq_setup, ioport_rid, irq_rid, mem_rid; u_char plx_ver; ioport_res = NULL; @@ -137,21 +137,12 @@ cy_pci_attach(dev) } vaddr = rman_get_virtual(mem_res); - adapter = cyattach_common(vaddr, 1); - if (adapter < 0) { + vsc = cyattach_common(vaddr, 1); + if (vsc == NULL) { device_printf(dev, "no ports found!\n"); goto fail; } - /* - * Allocate our interrupt. - * XXX Using the ISA interrupt handler directly is a bit of a violation - * since it doesn't actually take the same argument. For PCI, the - * argument is a void * token, but for ISA it is a unit. Since - * there is no overlap in PCI/ISA unit numbers for this driver, and - * since the ISA driver must handle the interrupt anyway, we use - * the unit number as the token even for PCI. - */ irq_rid = 0; irq_res = bus_alloc_resource(dev, SYS_RES_IRQ, &irq_rid, 0ul, ~0ul, 0ul, RF_SHAREABLE | RF_ACTIVE); @@ -161,13 +152,13 @@ cy_pci_attach(dev) } #ifdef CY_PCI_FASTINTR irq_setup = bus_setup_intr(dev, irq_res, INTR_TYPE_TTY | INTR_FAST, - (driver_intr_t *)cyintr, (void *)adapter, &irq_cookie); + cyintr, vsc, &irq_cookie); #else irq_setup = ENXIO; #endif if (irq_setup != 0) irq_setup = bus_setup_intr(dev, irq_res, INTR_TYPE_TTY, - (driver_intr_t *)cyintr, (void *)adapter, &irq_cookie); + cyintr, vsc, &irq_cookie); if (irq_setup != 0) { device_printf(dev, "interrupt setup failed\n"); goto fail; |