diff options
Diffstat (limited to 'sys/dev/iwi/if_iwi.c')
-rw-r--r-- | sys/dev/iwi/if_iwi.c | 75 |
1 files changed, 11 insertions, 64 deletions
diff --git a/sys/dev/iwi/if_iwi.c b/sys/dev/iwi/if_iwi.c index b6de4b6..e6ee051 100644 --- a/sys/dev/iwi/if_iwi.c +++ b/sys/dev/iwi/if_iwi.c @@ -64,7 +64,6 @@ __FBSDID("$FreeBSD$"); #include <net/bpf.h> #include <net/if.h> -#include <net/if_var.h> #include <net/if_arp.h> #include <net/ethernet.h> #include <net/if_dl.h> @@ -84,7 +83,6 @@ __FBSDID("$FreeBSD$"); #include <dev/iwi/if_iwireg.h> #include <dev/iwi/if_iwivar.h> -#include <dev/iwi/if_iwi_ioctl.h> #define IWI_DEBUG #ifdef IWI_DEBUG @@ -938,13 +936,10 @@ iwi_media_status(struct ifnet *ifp, struct ifmediareq *imr) struct ieee80211vap *vap = ifp->if_softc; struct ieee80211com *ic = vap->iv_ic; struct iwi_softc *sc = ic->ic_ifp->if_softc; - struct ieee80211_node *ni; /* read current transmission rate from adapter */ - ni = ieee80211_ref_node(vap->iv_bss); - ni->ni_txrate = + vap->iv_bss->ni_txrate = iwi_cvtrate(CSR_READ_4(sc, IWI_CSR_CURRENT_TX_RATE)); - ieee80211_free_node(ni); ieee80211_media_status(ifp, imr); } @@ -1235,7 +1230,7 @@ iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_data *data, int i, */ mnew = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); if (mnew == NULL) { - if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); + ifp->if_ierrors++; return; } @@ -1256,7 +1251,7 @@ iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_data *data, int i, panic("%s: could not load old rx mbuf", device_get_name(sc->sc_dev)); } - if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); + ifp->if_ierrors++; return; } @@ -1363,44 +1358,16 @@ iwi_checkforqos(struct ieee80211vap *vap, frm += frm[1] + 2; } - ni = ieee80211_ref_node(vap->iv_bss); + ni = vap->iv_bss; ni->ni_capinfo = capinfo; ni->ni_associd = associd & 0x3fff; if (wme != NULL) ni->ni_flags |= IEEE80211_NODE_QOS; else ni->ni_flags &= ~IEEE80211_NODE_QOS; - ieee80211_free_node(ni); #undef SUBTYPE } -static void -iwi_notif_link_quality(struct iwi_softc *sc, struct iwi_notif *notif) -{ - struct iwi_notif_link_quality *lq; - int len; - - len = le16toh(notif->len); - - DPRINTFN(5, ("Notification (%u) - len=%d, sizeof=%zu\n", - notif->type, - len, - sizeof(struct iwi_notif_link_quality) - )); - - /* enforce length */ - if (len != sizeof(struct iwi_notif_link_quality)) { - DPRINTFN(5, ("Notification: (%u) too short (%d)\n", - notif->type, - len)); - return; - } - - lq = (struct iwi_notif_link_quality *)(notif + 1); - memcpy(&sc->sc_linkqual, lq, sizeof(sc->sc_linkqual)); - sc->sc_linkqual_valid = 1; -} - /* * Task queue callbacks for iwi_notification_intr used to avoid LOR's. */ @@ -1570,11 +1537,8 @@ iwi_notification_intr(struct iwi_softc *sc, struct iwi_notif *notif) case IWI_NOTIF_TYPE_CALIBRATION: case IWI_NOTIF_TYPE_NOISE: - /* XXX handle? */ - DPRINTFN(5, ("Notification (%u)\n", notif->type)); - break; case IWI_NOTIF_TYPE_LINK_QUALITY: - iwi_notif_link_quality(sc, notif); + DPRINTFN(5, ("Notification (%u)\n", notif->type)); break; default: @@ -1651,7 +1615,7 @@ iwi_tx_intr(struct iwi_softc *sc, struct iwi_tx_ring *txq) DPRINTFN(15, ("tx done idx=%u\n", txq->next)); - if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); + ifp->if_opackets++; txq->queued--; txq->next = (txq->next + 1) % IWI_TX_RING_COUNT; @@ -1852,7 +1816,7 @@ iwi_tx_start(struct ifnet *ifp, struct mbuf *m0, struct ieee80211_node *ni, /* h/w table is full */ m_freem(m0); ieee80211_free_node(ni); - if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); + ifp->if_oerrors++; return 0; } iwi_write_ibssnode(sc, @@ -2007,7 +1971,7 @@ iwi_start_locked(struct ifnet *ifp) ni = (struct ieee80211_node *) m->m_pkthdr.rcvif; if (iwi_tx_start(ifp, m, ni, ac) != 0) { ieee80211_free_node(ni); - if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); + ifp->if_oerrors++; break; } @@ -2038,7 +2002,7 @@ iwi_watchdog(void *arg) if (sc->sc_tx_timer > 0) { if (--sc->sc_tx_timer == 0) { if_printf(ifp, "device timeout\n"); - if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); + ifp->if_oerrors++; ieee80211_runtask(ic, &sc->sc_restarttask); } } @@ -2094,25 +2058,11 @@ iwi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCGIFADDR: error = ether_ioctl(ifp, cmd, data); break; - case SIOCGIWISTATS: - IWI_LOCK(sc); - /* XXX validate permissions/memory/etc? */ - error = copyout(&sc->sc_linkqual, ifr->ifr_data, - sizeof(struct iwi_notif_link_quality)); - IWI_UNLOCK(sc); - break; - case SIOCZIWISTATS: - IWI_LOCK(sc); - memset(&sc->sc_linkqual, 0, - sizeof(struct iwi_notif_link_quality)); - IWI_UNLOCK(sc); - error = 0; - break; default: error = EINVAL; break; } - return error; + return error; } static void @@ -2853,7 +2803,7 @@ iwi_auth_and_assoc(struct iwi_softc *sc, struct ieee80211vap *vap) { struct ieee80211com *ic = vap->iv_ic; struct ifnet *ifp = vap->iv_ifp; - struct ieee80211_node *ni; + struct ieee80211_node *ni = vap->iv_bss; struct iwi_configuration config; struct iwi_associate *assoc = &sc->assoc; struct iwi_rateset rs; @@ -2863,8 +2813,6 @@ iwi_auth_and_assoc(struct iwi_softc *sc, struct ieee80211vap *vap) IWI_LOCK_ASSERT(sc); - ni = ieee80211_ref_node(vap->iv_bss); - if (sc->flags & IWI_FLAG_ASSOCIATED) { DPRINTF(("Already associated\n")); return (-1); @@ -3023,7 +2971,6 @@ iwi_auth_and_assoc(struct iwi_softc *sc, struct ieee80211vap *vap) le16toh(assoc->intval))); error = iwi_cmd(sc, IWI_CMD_ASSOCIATE, assoc, sizeof *assoc); done: - ieee80211_free_node(ni); if (error) IWI_STATE_END(sc, IWI_FW_ASSOCIATING); |