Date: Thu, 21 Apr 2016 20:34:38 +0000 (UTC) From: Andriy Voskoboinyk <avos@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r298436 - head/sys/dev/urtwn Message-ID: <201604212034.u3LKYcbY029119@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: avos Date: Thu Apr 21 20:34:38 2016 New Revision: 298436 URL: https://svnweb.freebsd.org/changeset/base/298436 Log: urtwn: optimize rate lookup in the urtwn_ra_init() Replace loop with switch statement (rate2ridx()) (should be noop). Tested with RTL8188EU / RTL8188CUS, STA mode. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D4848 (rebased) Modified: head/sys/dev/urtwn/if_urtwn.c head/sys/dev/urtwn/if_urtwnreg.h Modified: head/sys/dev/urtwn/if_urtwn.c ============================================================================== --- head/sys/dev/urtwn/if_urtwn.c Thu Apr 21 20:30:38 2016 (r298435) +++ head/sys/dev/urtwn/if_urtwn.c Thu Apr 21 20:34:38 2016 (r298436) @@ -1944,6 +1944,32 @@ urtwn_r88e_read_rom(struct urtwn_softc * return (0); } +static __inline uint8_t +rate2ridx(uint8_t rate) +{ + if (rate & IEEE80211_RATE_MCS) { + /* 11n rates start at idx 12 */ + return ((rate & 0xf) + 12); + } + switch (rate) { + /* 11g */ + case 12: return 4; + case 18: return 5; + case 24: return 6; + case 36: return 7; + case 48: return 8; + case 72: return 9; + case 96: return 10; + case 108: return 11; + /* 11b */ + case 2: return 0; + case 4: return 1; + case 11: return 2; + case 22: return 3; + default: return URTWN_RIDX_UNKNOWN; + } +} + /* * Initialize rate adaptation in firmware. */ @@ -1956,8 +1982,8 @@ urtwn_ra_init(struct urtwn_softc *sc) struct ieee80211_rateset *rs, *rs_ht; struct r92c_fw_cmd_macid_cfg cmd; uint32_t rates, basicrates; - uint8_t mode; - int maxrate, maxbasicrate, error, i, j; + uint8_t mode, ridx; + int maxrate, maxbasicrate, error, i; ni = ieee80211_ref_node(vap->iv_bss); rs = &ni->ni_rates; @@ -1970,19 +1996,16 @@ urtwn_ra_init(struct urtwn_softc *sc) /* This is for 11bg */ for (i = 0; i < rs->rs_nrates; i++) { /* Convert 802.11 rate to HW rate index. */ - for (j = 0; j < nitems(ridx2rate); j++) - if ((rs->rs_rates[i] & IEEE80211_RATE_VAL) == - ridx2rate[j]) - break; - if (j == nitems(ridx2rate)) /* Unknown rate, skip. */ + ridx = rate2ridx(IEEE80211_RV(rs->rs_rates[i])); + if (ridx == URTWN_RIDX_UNKNOWN) /* Unknown rate, skip. */ continue; - rates |= 1 << j; - if (j > maxrate) - maxrate = j; + rates |= 1 << ridx; + if (ridx > maxrate) + maxrate = ridx; if (rs->rs_rates[i] & IEEE80211_RATE_BASIC) { - basicrates |= 1 << j; - if (j > maxbasicrate) - maxbasicrate = j; + basicrates |= 1 << ridx; + if (ridx > maxbasicrate) + maxbasicrate = ridx; } } @@ -1992,12 +2015,12 @@ urtwn_ra_init(struct urtwn_softc *sc) if ((rs_ht->rs_rates[i] & 0x7f) > 0xf) continue; /* 11n rates start at index 12 */ - j = ((rs_ht->rs_rates[i]) & 0xf) + 12; - rates |= (1 << j); + ridx = ((rs_ht->rs_rates[i]) & 0xf) + 12; + rates |= (1 << ridx); /* Guard against the rate table being oddly ordered */ - if (j > maxrate) - maxrate = j; + if (ridx > maxrate) + maxrate = ridx; } } @@ -2802,32 +2825,6 @@ urtwn_r88e_get_rssi(struct urtwn_softc * return (rssi); } -static __inline uint8_t -rate2ridx(uint8_t rate) -{ - if (rate & IEEE80211_RATE_MCS) { - /* 11n rates start at idx 12 */ - return ((rate & 0xf) + 12); - } - switch (rate) { - /* 11g */ - case 12: return 4; - case 18: return 5; - case 24: return 6; - case 36: return 7; - case 48: return 8; - case 72: return 9; - case 96: return 10; - case 108: return 11; - /* 11b */ - case 2: return 0; - case 4: return 1; - case 11: return 2; - case 22: return 3; - default: return 0; - } -} - static int urtwn_tx_data(struct urtwn_softc *sc, struct ieee80211_node *ni, struct mbuf *m, struct urtwn_data *data) Modified: head/sys/dev/urtwn/if_urtwnreg.h ============================================================================== --- head/sys/dev/urtwn/if_urtwnreg.h Thu Apr 21 20:30:38 2016 (r298435) +++ head/sys/dev/urtwn/if_urtwnreg.h Thu Apr 21 20:34:38 2016 (r298436) @@ -1242,6 +1242,7 @@ static const uint8_t ridx2rate[] = #define URTWN_RIDX_OFDM54 11 #define URTWN_RIDX_COUNT 28 +#define URTWN_RIDX_UNKNOWN (uint8_t)-1 /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201604212034.u3LKYcbY029119>