iwi driver for dragonfly

看板DFBSD_submit作者時間21年前 (2004/11/18 05:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
--nextPart8878189.mqq7noVXHc Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8Bit Patch against - MD5 (iwi-freebsd-1.1.tgz) = d66b432d730a23e7e92e0934db248d1b Downloadable from http://damien.bergamini.free.fr/ipw/ My patch is based on Johannes Hofmann's port. Compiles cleanly and loads, but is not yet tested ( my card should arrive in the next two weeks, I plan to do some testing then ). Andrew. --nextPart8878189.mqq7noVXHc Content-Type: text/x-diff; name="iwi-dragonfly-1.1.diff" Content-Transfer-Encoding: 8Bit Content-Disposition: attachment; filename="iwi-dragonfly-1.1.diff" diff -u -r iwi-freebsd-1.1/src/sys/dev/iwi/if_iwi.c iwi-dragonfly-1.1/src/sys/dev/iwi/if_iwi.c --- iwi-freebsd-1.1/src/sys/dev/iwi/if_iwi.c 2004-10-17 14:51:34.000000000 -0400 +++ iwi-dragonfly-1.1/src/sys/dev/iwi/if_iwi.c 2004-11-17 15:21:12.000000000 -0500 @@ -28,7 +28,6 @@ */ #include <sys/cdefs.h> -__FBSDID("$Id: if_iwi.c,v 1.4 2004/10/17 18:51:34 damien Exp $"); /*- * Intel(R) PRO/Wireless 2200BG/2915ABG driver @@ -46,14 +45,16 @@ #include <sys/module.h> #include <sys/bus.h> #include <sys/endian.h> +#include <sys/proc.h> +#include <sys/ucred.h> #include <machine/bus.h> #include <machine/resource.h> #include <machine/clock.h> #include <sys/rman.h> -#include <dev/pci/pcireg.h> -#include <dev/pci/pcivar.h> +#include <bus/pci/pcireg.h> +#include <bus/pci/pcivar.h> #include <net/bpf.h> #include <net/if.h> @@ -69,8 +70,10 @@ #include <netinet/ip.h> #include <netinet/if_ether.h> -#include <net80211/ieee80211_var.h> -#include <net80211/ieee80211_radiotap.h> +#include <netproto/802_11/ieee80211_var.h> +#include <netproto/802_11/ieee80211_ioctl.h> +#include <netproto/802_11/ieee80211_radiotap.h> +#include <netproto/802_11/if_wavelan_ieee.h> #include <../../dev/iwi/if_iwireg.h> #include <../../dev/iwi/if_iwivar.h> @@ -125,7 +128,7 @@ static void iwi_watchdog(struct ifnet *); static int iwi_get_table0(struct iwi_softc *, u_int32_t *); static int iwi_get_radio(struct iwi_softc *, int *); -static int iwi_ioctl(struct ifnet *, u_long, caddr_t); +static int iwi_ioctl(struct ifnet *, u_long, caddr_t, struct ucred *cr); static int iwi_init_buffers(struct iwi_softc *, int); static void iwi_free_buffers(struct iwi_softc *); static int iwi_init_tx_queue(struct iwi_softc *, int, int); @@ -216,9 +219,6 @@ sc->sc_dev = dev; - mtx_init(&sc->sc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, - MTX_DEF | MTX_RECURSE); - if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) { device_printf(dev, "chip is in D%d power mode " "-- setting to D0\n", pci_get_powerstate(dev)); @@ -314,7 +314,6 @@ ifp->if_start = iwi_start; ifp->if_watchdog = iwi_watchdog; IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN); - ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN; IFQ_SET_READY(&ifp->if_snd); ieee80211_ifattach(ifp); @@ -323,7 +322,7 @@ ic->ic_newstate = iwi_newstate; ieee80211_media_init(ifp, iwi_media_change, iwi_media_status); -#if NBPFILTER > 0 +#ifdef WI_RAWBPF bpfattach2(ifp, DLT_IEEE802_11_RADIO, sizeof (struct ieee80211_frame) + 64, &sc->sc_drvbpf); @@ -357,7 +356,7 @@ IWI_UNLOCK(sc); -#if NBPFILTER > 0 +#if WI_RAWBPF bpfdetach(ifp); #endif ieee80211_ifdetach(ifp); @@ -371,8 +370,6 @@ bus_release_resource(dev, SYS_RES_MEMORY, IWI_PCI_BAR0, sc->mem); - mtx_destroy(&sc->sc_mtx); - return 0; } @@ -661,7 +658,7 @@ wh = mtod(m, struct ieee80211_frame *); } -#if NBPFILTER > 0 +#ifdef WI_RAWBPF if (sc->sc_drvbpf != NULL) { struct iwi_rx_radiotap_header *tap = &sc->sc_rxtap; @@ -702,7 +699,7 @@ else ieee80211_free_node(ic, ni); - m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + m = m_getcl(MB_DONTWAIT, MT_DATA, M_PKTHDR); if (m == NULL) { device_printf(sc->sc_dev, "could not allocate rx mbuf\n"); return; @@ -992,7 +989,7 @@ if (flags & IWI_ASYNC_CMD) return 0; - return msleep(sc, &sc->sc_mtx, 0, "iwicmd", hz); + return tsleep(sc, 0, "iwicmd", hz); } static int @@ -1010,7 +1007,7 @@ struct mbuf *mnew; int error, i; -#if NBPFILTER > 0 +#ifdef WI_RAWBPF if (sc->sc_drvbpf != NULL) { struct iwi_tx_radiotap_header *tap = &sc->sc_txtap; @@ -1038,7 +1035,7 @@ return error; } if (error != 0) { - mnew = m_defrag(m, M_DONTWAIT); + mnew = m_defrag(m, MB_DONTWAIT); if (mnew == NULL) { device_printf(sc->sc_dev, "could not defragment mbuf\n"); @@ -1118,7 +1115,7 @@ } for (;;) { - IFQ_DRV_DEQUEUE(&ifp->if_snd, m); + IFQ_DEQUEUE(&ifp->if_snd, m); if (m == NULL) break; @@ -1128,7 +1125,7 @@ break; } -#if NBPFILTER > 0 +#ifdef WI_RAWBPF BPF_MTAP(ifp, m); #endif @@ -1136,7 +1133,7 @@ if (m == NULL) continue; -#if NBPFILTER > 0 +#ifdef WI_RAWBPF if (ic->ic_rawbpf != NULL) bpf_mtap(ic->ic_rawbpf, m); #endif @@ -1198,7 +1195,7 @@ } static int -iwi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +iwi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data, struct ucred *cr) { struct iwi_softc *sc = ifp->if_softc; struct ieee80211com *ic = &sc->sc_ic; @@ -1260,7 +1257,7 @@ break; default: - error = ieee80211_ioctl(ifp, cmd, data); + error = ieee80211_ioctl(ifp, cmd, data, cr); } break; @@ -1276,12 +1273,12 @@ break; default: - error = ieee80211_ioctl(ifp, cmd, data); + error = ieee80211_ioctl(ifp, cmd, data, cr); } break; default: - error = ieee80211_ioctl(ifp, cmd, data); + error = ieee80211_ioctl(ifp, cmd, data, cr); } if (error == ENETRESET) { @@ -1303,8 +1300,8 @@ int error, i; error = bus_dma_tag_create(NULL, 4, 0, BUS_SPACE_MAXADDR_32BIT, - BUS_SPACE_MAXADDR, NULL, NULL, nbuf * MCLBYTES, nbuf, MCLBYTES, 0, - NULL, NULL, &sc->buf_dmat); + BUS_SPACE_MAXADDR, NULL, NULL, nbuf * MCLBYTES, nbuf, MCLBYTES, BUS_DMA_ALLOCNOW, + &sc->buf_dmat); if (error != 0) { device_printf(sc->sc_dev, "could not create buffers dma tag\n"); goto fail; @@ -1370,7 +1367,7 @@ /* Allocate DMA memory for transmission slots */ error = bus_dma_tag_create(NULL, 4, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, size * IWI_TX_SLOT_SIZE, 1, - size * IWI_TX_SLOT_SIZE, 0, NULL, NULL, &q->dmat); + size * IWI_TX_SLOT_SIZE, BUS_DMA_ALLOCNOW, &q->dmat); if (error != 0) { device_printf(sc->sc_dev, "could not create dma tag\n"); goto fail; @@ -1460,7 +1457,7 @@ buf = slot->buf = TAILQ_FIRST(&sc->sc_free_buf); TAILQ_REMOVE(&sc->sc_free_buf, buf, next); - buf->m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + buf->m = m_getcl(MB_DONTWAIT, MT_DATA, M_PKTHDR); if (buf->m == NULL) { device_printf(sc->sc_dev, "could not allocate rx mbuf\n"); @@ -1680,7 +1677,7 @@ /* Allocate DMA memory for storing firmware image */ error = bus_dma_tag_create(NULL, 4, 0, BUS_SPACE_MAXADDR_32BIT, - BUS_SPACE_MAXADDR, NULL, NULL, size, 1, size, 0, NULL, NULL, &dmat); + BUS_SPACE_MAXADDR, NULL, NULL, size, 1, size, BUS_DMA_ALLOCNOW, &dmat); if (error != 0) { device_printf(sc->sc_dev, "could not create fw dma tag\n"); goto fail1; @@ -1779,7 +1776,7 @@ IWI_CTL_ALLOW_STANDBY); /* Wait at most 1 s for firmware initialization to complete */ - if ((error = msleep(sc, &sc->sc_mtx, 0, "iwiinit", hz)) != 0) { + if ((error = tsleep(sc, 0, "iwiinit", hz)) != 0) { device_printf(sc->sc_dev, "timeout waiting for firmware " "initialization to complete\n"); goto fail4; diff -u -r iwi-freebsd-1.1/src/sys/dev/iwi/if_iwivar.h iwi-dragonfly-1.1/src/sys/dev/iwi/if_iwivar.h --- iwi-freebsd-1.1/src/sys/dev/iwi/if_iwivar.h 2004-10-17 14:51:34.000000000 -0400 +++ iwi-dragonfly-1.1/src/sys/dev/iwi/if_iwivar.h 2004-11-17 14:51:22.000000000 -0500 @@ -108,7 +108,7 @@ enum ieee80211_state, int); device_t sc_dev; - struct mtx sc_mtx; + intrmask_t sc_intrmask; struct iwi_firmware fw; u_int32_t flags; @@ -159,5 +159,5 @@ #define SIOCGRADIO _IOWR('i', 139, struct ifreq) #define SIOCGTABLE0 _IOWR('i', 140, struct ifreq) -#define IWI_LOCK(sc) mtx_lock(&(sc)->sc_mtx) -#define IWI_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) +#define IWI_LOCK(SC) SC->sc_intrmask = splimp() +#define IWI_UNLOCK(SC) splx(SC->sc_intrmask) --nextPart8878189.mqq7noVXHc--
文章代碼(AID): #11cxmI00 (DFBSD_submit)