diff --git a/src/add-ons/kernel/drivers/network/wlan/Jamfile b/src/add-ons/kernel/drivers/network/wlan/Jamfile index 2ab5e30a16..ef4e08c303 100644 --- a/src/add-ons/kernel/drivers/network/wlan/Jamfile +++ b/src/add-ons/kernel/drivers/network/wlan/Jamfile @@ -8,7 +8,6 @@ SubInclude HAIKU_TOP src add-ons kernel drivers network wlan iprowifi2100 ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan marvell88w8335 ; # FreeBSD 9.3 drivers -SubInclude HAIKU_TOP src add-ons kernel drivers network wlan aironetwifi ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan atheroswifi ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan broadcom43xx ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan iprowifi2200 ; @@ -17,6 +16,7 @@ SubInclude HAIKU_TOP src add-ons kernel drivers network wlan ralinkwifi ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan wavelanwifi ; # FreeBSD 11.1 drivers +SubInclude HAIKU_TOP src add-ons kernel drivers network wlan aironetwifi ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan iprowifi3945 ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan iprowifi4965 ; diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/Jamfile b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/Jamfile index 6bfde8113a..c43c0f31ec 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/Jamfile +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/Jamfile @@ -1,18 +1,14 @@ SubDir HAIKU_TOP src add-ons kernel drivers network wlan aironetwifi ; -UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] +UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd11_network compat ] : true ; -UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_wlan ] : true ; +UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd11_wlan ] : true ; UsePrivateHeaders net system ; UsePrivateKernelHeaders ; -# Enabling C++ structures in C only code -Includes [ FGristFiles kernel_c++_structs.h ] - : kernel_c++_struct_sizes.h ; - -SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] - -Wno-format - -Wno-unused +SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] + -Wno-format + -Wno-unused -Wno-uninitialized ; UseHeaders [ FDirName $(SUBDIR) ] : true ; @@ -24,6 +20,6 @@ KernelAddon aironetwifi : if_an_pci.c glue.c : - libfreebsd_wlan.a - libfreebsd_network.a + libfreebsd11_wlan.a + libfreebsd11_network.a ; diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_aironet_ieee.h b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_aironet_ieee.h index 28e4f72148..02a7ec9df9 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_aironet_ieee.h +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_aironet_ieee.h @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD$ + * $FreeBSD: releng/11.1/sys/dev/an/if_aironet_ieee.h 139749 2005-01-06 01:43:34Z imp $ */ #ifndef _IF_AIRONET_IEEE_H diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an.c b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an.c index a583023d92..f0a7188669 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an.c +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an.c @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/an/if_an.c 315221 2017-03-14 02:06:03Z pfg $"); /* * The Aironet 4500/4800 series cards come in PCMCIA, ISA and PCI form. @@ -111,6 +111,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -269,9 +270,7 @@ SYSCTL_PROC(_hw_an, OID_AUTO, an_dump, CTLTYPE_STRING | CTLFLAG_RW, static int sysctl_an_cache_mode(SYSCTL_HANDLER_ARGS) { - int error, last; - - last = an_cache_mode; + int error; switch (an_cache_mode) { case 1: @@ -304,23 +303,6 @@ sysctl_an_cache_mode(SYSCTL_HANDLER_ARGS) SYSCTL_PROC(_hw_an, OID_AUTO, an_cache_mode, CTLTYPE_STRING | CTLFLAG_RW, 0, sizeof(an_conf_cache), sysctl_an_cache_mode, "A", ""); -/* - * Setup the lock for PCI attachment since it skips the an_probe - * function. We need to setup the lock in an_probe since some - * operations need the lock. So we might as well create the - * lock in the probe. - */ -int -an_pci_probe(device_t dev) -{ - struct an_softc *sc = device_get_softc(dev); - - mtx_init(&sc->an_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, - MTX_DEF); - - return(0); -} - /* * We probe for an Aironet 4500/4800 card by attempting to * read the default SSID list. On reset, the first entry in @@ -395,8 +377,8 @@ an_alloc_port(device_t dev, int rid, int size) struct an_softc *sc = device_get_softc(dev); struct resource *res; - res = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, - 0ul, ~0ul, size, RF_ACTIVE); + res = bus_alloc_resource_anywhere(dev, SYS_RES_IOPORT, &rid, + size, RF_ACTIVE); if (res) { sc->port_rid = rid; sc->port_res = res; @@ -414,8 +396,8 @@ int an_alloc_memory(device_t dev, int rid, int size) struct an_softc *sc = device_get_softc(dev); struct resource *res; - res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, - 0ul, ~0ul, size, RF_ACTIVE); + res = bus_alloc_resource_anywhere(dev, SYS_RES_MEMORY, &rid, + size, RF_ACTIVE); if (res) { sc->mem_rid = rid; sc->mem_res = res; @@ -427,15 +409,15 @@ int an_alloc_memory(device_t dev, int rid, int size) } /* - * Allocate a auxilary memory resource with the given resource id. + * Allocate a auxiliary memory resource with the given resource id. */ int an_alloc_aux_memory(device_t dev, int rid, int size) { struct an_softc *sc = device_get_softc(dev); struct resource *res; - res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, - 0ul, ~0ul, size, RF_ACTIVE); + res = bus_alloc_resource_anywhere(dev, SYS_RES_MEMORY, &rid, + size, RF_ACTIVE); if (res) { sc->mem_aux_rid = rid; sc->mem_aux_res = res; @@ -482,10 +464,6 @@ an_dma_malloc(struct an_softc *sc, bus_size_t size, struct an_dma_alloc *dma, { int r; - r = bus_dmamap_create(sc->an_dtag, BUS_DMA_NOWAIT, &dma->an_dma_map); - if (r != 0) - goto fail_0; - r = bus_dmamem_alloc(sc->an_dtag, (void**) &dma->an_dma_vaddr, BUS_DMA_NOWAIT, &dma->an_dma_map); if (r != 0) @@ -506,9 +484,6 @@ fail_2: bus_dmamap_unload(sc->an_dtag, dma->an_dma_map); fail_1: bus_dmamem_free(sc->an_dtag, dma->an_dma_vaddr, dma->an_dma_map); -fail_0: - bus_dmamap_destroy(sc->an_dtag, dma->an_dma_map); - dma->an_dma_map = NULL; return (r); } @@ -518,7 +493,6 @@ an_dma_free(struct an_softc *sc, struct an_dma_alloc *dma) bus_dmamap_unload(sc->an_dtag, dma->an_dma_map); bus_dmamem_free(sc->an_dtag, dma->an_dma_vaddr, dma->an_dma_map); dma->an_dma_vaddr = 0; - bus_dmamap_destroy(sc->an_dtag, dma->an_dma_map); } /* @@ -762,7 +736,6 @@ an_attach(struct an_softc *sc, int flags) #endif AN_UNLOCK(sc); - ifp->if_mtu = ETHERMTU; ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = an_ioctl; ifp->if_start = an_start; @@ -882,7 +855,7 @@ an_rxeof(struct an_softc *sc) /* read header */ if (an_read_data(sc, id, 0x0, (caddr_t)&rx_frame, sizeof(rx_frame))) { - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } @@ -905,7 +878,7 @@ an_rxeof(struct an_softc *sc) if_printf(ifp, "oversized packet " "received (%d, %d)\n", len, MCLBYTES); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } @@ -931,7 +904,7 @@ an_rxeof(struct an_softc *sc) if_printf(ifp, "oversized packet " "received (%d, %d)\n", len, MCLBYTES); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } @@ -950,13 +923,12 @@ an_rxeof(struct an_softc *sc) } else { MGETHDR(m, M_NOWAIT, MT_DATA); if (m == NULL) { - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } m->m_pkthdr.rcvif = ifp; @@ -967,7 +939,7 @@ an_rxeof(struct an_softc *sc) if (an_read_data(sc, id, 0, (caddr_t)&rx_frame, sizeof(rx_frame))) { m_freem(m); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } #endif @@ -976,12 +948,12 @@ an_rxeof(struct an_softc *sc) (caddr_t)&rx_frame_802_3, sizeof(rx_frame_802_3))) { m_freem(m); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } if (rx_frame_802_3.an_rx_802_3_status != 0) { m_freem(m); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } /* Check for insane frame length */ @@ -991,7 +963,7 @@ an_rxeof(struct an_softc *sc) if_printf(ifp, "oversized packet " "received (%d, %d)\n", len, MCLBYTES); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } m->m_pkthdr.len = m->m_len = @@ -1011,10 +983,10 @@ an_rxeof(struct an_softc *sc) if (error) { m_freem(m); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } - ifp->if_ipackets++; + if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); /* Receive packet. */ #ifdef ANCACHE @@ -1041,13 +1013,12 @@ an_rxeof(struct an_softc *sc) MGETHDR(m, M_NOWAIT, MT_DATA); if (m == NULL) { - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } - MCLGET(m, M_NOWAIT); - if (!(m->m_flags & M_EXT)) { + if (!(MCLGET(m, M_NOWAIT))) { m_freem(m); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } m->m_pkthdr.rcvif = ifp; @@ -1071,7 +1042,7 @@ an_rxeof(struct an_softc *sc) if_printf(ifp, "oversized packet " "received (%d, %d)\n", len, MCLBYTES); - ifp->if_ierrors++; + if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); return; } @@ -1083,7 +1054,7 @@ an_rxeof(struct an_softc *sc) bcopy(buf, (char *)eh, m->m_pkthdr.len); - ifp->if_ipackets++; + if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); /* Receive packet. */ #if 0 @@ -1136,9 +1107,9 @@ an_txeof(struct an_softc *sc, int status) id = CSR_READ_2(sc, AN_TX_CMP_FID(sc->mpi350)); if (status & AN_EV_TX_EXC) { - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); } else - ifp->if_opackets++; + if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); for (i = 0; i < AN_TX_RING_CNT; i++) { if (id == sc->an_rdata.an_tx_ring[i]) { @@ -1152,9 +1123,9 @@ an_txeof(struct an_softc *sc, int status) id = CSR_READ_2(sc, AN_TX_CMP_FID(sc->mpi350)); if (!sc->an_rdata.an_tx_empty){ if (status & AN_EV_TX_EXC) { - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); } else - ifp->if_opackets++; + if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); AN_INC(sc->an_rdata.an_tx_cons, AN_MAX_TX_DESC); if (sc->an_rdata.an_tx_prod == sc->an_rdata.an_tx_cons) @@ -2972,7 +2943,7 @@ an_watchdog(struct an_softc *sc) an_init_mpi350_desc(sc); an_init_locked(sc); - ifp->if_oerrors++; + if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); } int @@ -3086,7 +3057,7 @@ static void an_cache_store(struct an_softc *sc, struct ether_header *eh, struct mbuf *m, u_int8_t rx_rssi, u_int8_t rx_quality) { - struct ip *ip = 0; + struct ip *ip = NULL; int i; static int cache_slot = 0; /* use this cache entry */ static int wrapindex = 0; /* next "free" cache entry */ @@ -3778,6 +3749,9 @@ flashcard(struct ifnet *ifp, struct aironet_ioctl *l_ioctl) return ENOBUFS; break; case AIROFLSHGCHR: /* Get char from aux */ + if (l_ioctl->len > sizeof(sc->areq)) { + return -EINVAL; + } AN_UNLOCK(sc); status = copyin(l_ioctl->data, &sc->areq, l_ioctl->len); AN_LOCK(sc); @@ -3789,6 +3763,9 @@ flashcard(struct ifnet *ifp, struct aironet_ioctl *l_ioctl) else return -1; case AIROFLSHPCHR: /* Send char to card. */ + if (l_ioctl->len > sizeof(sc->areq)) { + return -EINVAL; + } AN_UNLOCK(sc); status = copyin(l_ioctl->data, &sc->areq, l_ioctl->len); AN_LOCK(sc); diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_isa.c b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_isa.c index 19e5cd0755..81b278df88 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_isa.c +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_isa.c @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/an/if_an_isa.c 199756 2009-11-24 16:54:54Z jhb $"); #include "opt_inet.h" diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pccard.c b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pccard.c index e9485eac58..2572d406fe 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pccard.c +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pccard.c @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/an/if_an_pccard.c 292079 2015-12-11 05:27:56Z imp $"); #include "opt_inet.h" @@ -108,6 +108,7 @@ static const struct pccard_product an_pccard_products[] = { PCMCIA_CARD(XIRCOM, CWE1130), { NULL } }; +PCCARD_PNP_INFO(an_pccard_products); static int an_pccard_probe(device_t dev) diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pci.c b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pci.c index 1c3032c942..978e9cc170 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pci.c +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_an_pci.c @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: releng/11.1/sys/dev/an/if_an_pci.c 299544 2016-05-12 17:47:30Z scottl $"); /* * This is a PCI shim for the Aironet PC4500/4800 wireless network @@ -119,16 +119,16 @@ static int an_probe_pci(device_t dev) { struct an_type *t; - struct an_softc *sc = device_get_softc(dev); + uint16_t vid, did; - bzero(sc, sizeof(struct an_softc)); t = an_devs; + vid = pci_get_vendor(dev); + did = pci_get_device(dev); while (t->an_name != NULL) { - if (pci_get_vendor(dev) == t->an_vid && - pci_get_device(dev) == t->an_did) { + if (vid == t->an_vid && + did == t->an_did) { device_set_desc(dev, t->an_name); - an_pci_probe(dev); return(BUS_PROBE_DEFAULT); } t++; @@ -145,8 +145,16 @@ an_attach_pci(dev) int flags, error = 0; sc = device_get_softc(dev); + bzero(sc, sizeof(struct an_softc)); flags = device_get_flags(dev); + /* + * Setup the lock in PCI attachment since it skips the an_probe + * function. + */ + mtx_init(&sc->an_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, + MTX_DEF); + if (pci_get_vendor(dev) == AIRONET_VENDORID && pci_get_device(dev) == AIRONET_DEVICEID_MPI350) { sc->mpi350 = 1; diff --git a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_anreg.h b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_anreg.h index 279e65b8e1..e22ad3ad99 100644 --- a/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_anreg.h +++ b/src/add-ons/kernel/drivers/network/wlan/aironetwifi/dev/an/if_anreg.h @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD$ + * $FreeBSD: releng/11.1/sys/dev/an/if_anreg.h 299544 2016-05-12 17:47:30Z scottl $ */ #define AN_TIMEOUT 65536 @@ -276,7 +276,7 @@ struct an_reply { #define AN_EV_ALLOC 0x0008 /* async alloc/reclaim completed */ #define AN_EV_TX_CPY 0x0400 #define AN_EV_TX_EXC 0x0004 /* async xmit completed with failure */ -#define AN_EV_TX 0x0002 /* async xmit completed succesfully */ +#define AN_EV_TX 0x0002 /* async xmit completed successfully */ #define AN_EV_RX 0x0001 /* async rx completed */ #define AN_INTRS(x) \ @@ -500,7 +500,6 @@ int an_alloc_port (device_t, int, int); int an_alloc_memory (device_t, int, int); int an_alloc_aux_memory (device_t, int, int); int an_alloc_irq (device_t, int, int); -int an_pci_probe (device_t); int an_probe (device_t); int an_shutdown (device_t); void an_resume (device_t);