Deleted Added
full compact
24c24
< * $FreeBSD: head/sys/dev/pdq/if_fpa.c 70594 2001-01-02 09:30:48Z peter $
---
> * $FreeBSD: head/sys/dev/pdq/if_fpa.c 93383 2002-03-29 11:22:22Z mdodd $
34a35
> #include <sys/systm.h>
38c39,40
< #include <net/if.h>
---
> #include <sys/module.h>
> #include <sys/bus.h>
40,43c42,43
< #include <net/ethernet.h>
< #include <net/if_arp.h>
< #include <dev/pdq/pdqvar.h>
< #include <dev/pdq/pdqreg.h>
---
> #include <machine/bus_memio.h>
> #include <machine/bus_pio.h>
46,49c46
< #include <sys/bus.h>
< #include <sys/rman.h>
< #include <pci/pcivar.h>
< #include <pci/pcireg.h>
---
> #include <sys/rman.h>
50a48,51
> #include <net/if.h>
> #include <net/if_arp.h>
> #include <net/if_media.h>
> #include <net/fddi.h>
51a53,58
> #include <dev/pci/pcivar.h>
> #include <dev/pci/pcireg.h>
>
> #include <dev/pdq/pdq_freebsd.h>
> #include <dev/pdq/pdqreg.h>
>
60a68,73
> static int pdq_pci_probe (device_t);
> static int pdq_pci_attach (device_t);
> static int pdq_pci_detach (device_t);
> static void pdq_pci_shutdown (device_t);
> static void pdq_pci_ifintr (void *);
>
63a77
> device_t dev;
66c80,83
< sc = device_get_softc(arg);
---
> dev = (device_t)arg;
> sc = device_get_softc(dev);
>
> PDQ_LOCK(sc);
67a85,87
> PDQ_UNLOCK(sc);
>
> return;
79c99
< return 0;
---
> return (0);
81c101,102
< return ENXIO;
---
>
> return (ENXIO);
88,91c109,111
< int data;
< struct resource *memres, *irqres;
< int rid;
< void *ih;
---
> struct ifnet *ifp;
> u_int32_t command;
> int error;
93,94d112
< memres = NULL;
< irqres = NULL;
95a114
> ifp = &sc->arpcom.ac_if;
97,100c116,129
< data = pci_read_config(dev, PCIR_LATTIMER, 1);
< if (data < DEFPA_LATENCY) {
< data = DEFPA_LATENCY;
< pci_write_config(dev, PCIR_LATTIMER, data, 1);
---
> sc->dev = dev;
>
> /*
> * Map control/status registers.
> */
> pci_enable_busmaster(dev);
> pci_enable_io(dev, SYS_RES_IOPORT);
> pci_enable_io(dev, SYS_RES_MEMORY);
> command = pci_read_config(dev, PCIR_COMMAND, 4);
>
> if (!(command & PCIM_CMD_PORTEN)) {
> device_printf(dev, "Failed to enable PCI I/O ports.\n");
> error = ENXIO;
> goto bad;
103,105c132,134
< rid = PCI_CBMA;
< memres = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, 0, ~0, 1, RF_ACTIVE);
< if (!memres)
---
> if (!(command & PCIM_CMD_MEMEN)) {
> device_printf(dev, "Failed to enable PCI memory mapping.\n");
> error = ENXIO;
106a136
> }
108,114c138,150
< sc->sc_if.if_name = "fpa";
< sc->sc_if.if_unit = device_get_unit(dev);
< sc->sc_membase = (pdq_bus_memaddr_t) rman_get_virtual(memres);
< sc->sc_pdq = pdq_initialize(PDQ_BUS_PCI, sc->sc_membase,
< sc->sc_if.if_name, sc->sc_if.if_unit,
< (void *) sc, PDQ_DEFPA);
< if (sc->sc_pdq == NULL)
---
> command = pci_read_config(dev, PCIR_LATTIMER, 1);
> if (command < DEFPA_LATENCY) {
> command = DEFPA_LATENCY;
> pci_write_config(dev, PCIR_LATTIMER, command, 1);
> }
>
> sc->mem_rid = PCI_CBMA;
> sc->mem_type = SYS_RES_MEMORY;
> sc->mem = bus_alloc_resource(dev, sc->mem_type, &sc->mem_rid,
> 0, ~0, 1, RF_ACTIVE);
> if (!sc->mem) {
> device_printf(dev, "Unable to allocate I/O space resource.\n");
> error = ENXIO;
116,121c152,161
< bcopy((caddr_t) sc->sc_pdq->pdq_hwaddr.lanaddr_bytes, sc->sc_ac.ac_enaddr, 6);
< pdq_ifattach(sc, NULL);
< rid = 0;
< irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1,
< RF_SHAREABLE | RF_ACTIVE);
< if (!irqres)
---
> }
> sc->mem_bsh = rman_get_bushandle(sc->mem);
> sc->mem_bst = rman_get_bustag(sc->mem);
>
> sc->irq_rid = 0;
> sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->irq_rid,
> 0, ~0, 1, RF_SHAREABLE | RF_ACTIVE);
> if (!sc->irq) {
> device_printf(dev, "Unable to allocate interrupt resource.\n");
> error = ENXIO;
123,124c163,173
< if (bus_setup_intr(dev, irqres, INTR_TYPE_NET, pdq_pci_ifintr,
< (void *)dev, &ih))
---
> }
>
> ifp->if_name = "fpa";
> ifp->if_unit = device_get_unit(dev);
>
> sc->sc_pdq = pdq_initialize(sc->mem_bst, sc->mem_bsh,
> ifp->if_name, ifp->if_unit,
> (void *)sc, PDQ_DEFPA);
> if (sc->sc_pdq == NULL) {
> device_printf(dev, "Initialization failed.\n");
> error = ENXIO;
126c175
< return 0;
---
> }
127a177,189
> error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET,
> pdq_pci_ifintr, dev, &sc->irq_ih);
> if (error) {
> device_printf(dev, "Failed to setup interrupt handler.\n");
> error = ENXIO;
> goto bad;
> }
>
> bcopy((caddr_t) sc->sc_pdq->pdq_hwaddr.lanaddr_bytes,
> (caddr_t) sc->arpcom.ac_enaddr, FDDI_ADDR_LEN);
> pdq_ifattach(sc);
>
> return (0);
129,133c191,192
< if (memres)
< bus_release_resource(dev, SYS_RES_MEMORY, PCI_CBMA, memres);
< if (irqres)
< bus_release_resource(dev, SYS_RES_IRQ, 0, irqres);
< return ENXIO;
---
> pdq_free(dev);
> return (error);
135a195,206
> static int
> pdq_pci_detach (dev)
> device_t dev;
> {
> pdq_softc_t *sc;
>
> sc = device_get_softc(dev);
> pdq_ifdetach(sc);
>
> return (0);
> }
>
142a214,215
>
> return;
148a222
> DEVMETHOD(device_detach, pdq_pci_detach),
149a224
>
151a227
>
157c233
< static devclass_t pdq_devclass;
---
>
158a235,236
> /* MODULE_DEPEND(if_fpa, pci, 1, 1, 1); */
> MODULE_DEPEND(if_fpa, fddi, 1, 1, 1);