From owner-svn-src-all@FreeBSD.ORG Thu May 7 00:35:33 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 558951065670; Thu, 7 May 2009 00:35:33 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 43A9D8FC17; Thu, 7 May 2009 00:35:33 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n470ZXrp034696; Thu, 7 May 2009 00:35:33 GMT (envelope-from sam@svn.freebsd.org) Received: (from sam@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n470ZX7V034694; Thu, 7 May 2009 00:35:33 GMT (envelope-from sam@svn.freebsd.org) Message-Id: <200905070035.n470ZX7V034694@svn.freebsd.org> From: Sam Leffler Date: Thu, 7 May 2009 00:35:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191866 - head/sys/dev/ath X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 May 2009 00:35:33 -0000 Author: sam Date: Thu May 7 00:35:32 2009 New Revision: 191866 URL: http://svn.freebsd.org/changeset/base/191866 Log: optimize ath_tx_findrix: there's no need to walk the rates table as sc_rixmap is an inverse map NB: could eliminate the check for an invalid rate by filling in 0 for invalid entries but the rate control modules use it to identify bogus rates so leave it for now Modified: head/sys/dev/ath/if_ath.c Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Wed May 6 23:49:55 2009 (r191865) +++ head/sys/dev/ath/if_ath.c Thu May 7 00:35:32 2009 (r191866) @@ -4222,17 +4222,15 @@ ath_tx_cleanup(struct ath_softc *sc) } /* - * Return h/w rate index for an IEEE rate (w/o basic rate bit). + * Return h/w rate index for an IEEE rate (w/o basic rate bit) + * using the current rates in sc_rixmap. */ -static int -ath_tx_findrix(const HAL_RATE_TABLE *rt, int rate) +static __inline int +ath_tx_findrix(const struct ath_softc *sc, uint8_t rate) { - int i; - - for (i = 0; i < rt->rateCount; i++) - if ((rt->info[i].dot11Rate & IEEE80211_RATE_VAL) == rate) - return i; - return 0; /* NB: lowest rate */ + int rix = sc->sc_rixmap[rate]; + /* NB: return lowest rix for invalid rate */ + return (rix == 0xff ? 0 : rix); } /* @@ -5760,8 +5758,8 @@ ath_newassoc(struct ieee80211_node *ni, struct ath_softc *sc = vap->iv_ic->ic_ifp->if_softc; const struct ieee80211_txparam *tp = ni->ni_txparms; - an->an_mcastrix = ath_tx_findrix(sc->sc_currates, tp->mcastrate); - an->an_mgmtrix = ath_tx_findrix(sc->sc_currates, tp->mgmtrate); + an->an_mcastrix = ath_tx_findrix(sc, tp->mcastrate); + an->an_mgmtrix = ath_tx_findrix(sc, tp->mgmtrate); ath_rate_newassoc(sc, an, isnew); if (isnew && @@ -6009,9 +6007,9 @@ ath_setcurmode(struct ath_softc *sc, enu * 11g, otherwise at 1Mb/s. */ if (mode == IEEE80211_MODE_11G) - sc->sc_protrix = ath_tx_findrix(rt, 2*2); + sc->sc_protrix = ath_tx_findrix(sc, 2*2); else - sc->sc_protrix = ath_tx_findrix(rt, 2*1); + sc->sc_protrix = ath_tx_findrix(sc, 2*1); /* NB: caller is responsible for reseting rate control state */ #undef N } @@ -6749,7 +6747,7 @@ ath_tx_raw_start(struct ath_softc *sc, s rt = sc->sc_currates; KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); - rix = ath_tx_findrix(rt, params->ibp_rate0); + rix = ath_tx_findrix(sc, params->ibp_rate0); txrate = rt->info[rix].rateCode; if (params->ibp_flags & IEEE80211_BPF_SHORTPRE) txrate |= rt->info[rix].shortPreamble; @@ -6761,7 +6759,7 @@ ath_tx_raw_start(struct ath_softc *sc, s txantenna = sc->sc_txantenna; ctsduration = 0; if (flags & (HAL_TXDESC_CTSENA | HAL_TXDESC_RTSENA)) { - cix = ath_tx_findrix(rt, params->ibp_ctsrate); + cix = ath_tx_findrix(sc, params->ibp_ctsrate); ctsrate = rt->info[cix].rateCode; if (params->ibp_flags & IEEE80211_BPF_SHORTPRE) { ctsrate |= rt->info[cix].shortPreamble; @@ -6827,19 +6825,19 @@ ath_tx_raw_start(struct ath_softc *sc, s bf->bf_txflags = flags; if (ismrr) { - rix = ath_tx_findrix(rt, params->ibp_rate1); + rix = ath_tx_findrix(sc, params->ibp_rate1); rate1 = rt->info[rix].rateCode; if (params->ibp_flags & IEEE80211_BPF_SHORTPRE) rate1 |= rt->info[rix].shortPreamble; if (params->ibp_try2) { - rix = ath_tx_findrix(rt, params->ibp_rate2); + rix = ath_tx_findrix(sc, params->ibp_rate2); rate2 = rt->info[rix].rateCode; if (params->ibp_flags & IEEE80211_BPF_SHORTPRE) rate2 |= rt->info[rix].shortPreamble; } else rate2 = 0; if (params->ibp_try3) { - rix = ath_tx_findrix(rt, params->ibp_rate3); + rix = ath_tx_findrix(sc, params->ibp_rate3); rate3 = rt->info[rix].rateCode; if (params->ibp_flags & IEEE80211_BPF_SHORTPRE) rate3 |= rt->info[rix].shortPreamble; @@ -7063,9 +7061,9 @@ ath_tdma_config(struct ath_softc *sc, st */ tdma = vap->iv_tdma; if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) - rix = ath_tx_findrix(sc->sc_currates, tp->ucastrate); + rix = ath_tx_findrix(sc, tp->ucastrate); else - rix = ath_tx_findrix(sc->sc_currates, tp->mcastrate); + rix = ath_tx_findrix(sc, tp->mcastrate); /* XXX short preamble assumed */ sc->sc_tdmaguard = ath_hal_computetxtime(ah, sc->sc_currates, ifp->if_mtu + IEEE80211_MAXOVERHEAD, rix, AH_TRUE);