Date: Thu, 22 Oct 2015 15:42:54 +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: r289758 - head/sys/dev/usb/wlan Message-ID: <201510221542.t9MFgsi4038128@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: avos Date: Thu Oct 22 15:42:53 2015 New Revision: 289758 URL: https://svnweb.freebsd.org/changeset/base/289758 Log: urtwn(4): replace hardcoded rate indices with their names Reviewed by: kevlo Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D3967 Modified: head/sys/dev/usb/wlan/if_urtwn.c head/sys/dev/usb/wlan/if_urtwnreg.h head/sys/dev/usb/wlan/if_urtwnvar.h Modified: head/sys/dev/usb/wlan/if_urtwn.c ============================================================================== --- head/sys/dev/usb/wlan/if_urtwn.c Thu Oct 22 15:20:33 2015 (r289757) +++ head/sys/dev/usb/wlan/if_urtwn.c Thu Oct 22 15:42:53 2015 (r289758) @@ -665,22 +665,7 @@ urtwn_rx_frame(struct urtwn_softc *sc, u tap->wr_flags = 0; /* Map HW rate index to 802.11 rate. */ if (!(rxdw3 & R92C_RXDW3_HT)) { - switch (rate) { - /* CCK. */ - case 0: tap->wr_rate = 2; break; - case 1: tap->wr_rate = 4; break; - case 2: tap->wr_rate = 11; break; - case 3: tap->wr_rate = 22; break; - /* OFDM. */ - case 4: tap->wr_rate = 12; break; - case 5: tap->wr_rate = 18; break; - case 6: tap->wr_rate = 24; break; - case 7: tap->wr_rate = 36; break; - case 8: tap->wr_rate = 48; break; - case 9: tap->wr_rate = 72; break; - case 10: tap->wr_rate = 96; break; - case 11: tap->wr_rate = 108; break; - } + tap->wr_rate = ridx2rate[rate]; } else if (rate >= 12) { /* MCS0~15. */ /* Bit 7 set means HT MCS instead of rate. */ tap->wr_rate = 0x80 | (rate - 12); @@ -1411,8 +1396,6 @@ urtwn_r88e_read_rom(struct urtwn_softc * static int urtwn_ra_init(struct urtwn_softc *sc) { - static const uint8_t map[] = - { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; struct ieee80211com *ic = &sc->sc_ic; struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps); struct ieee80211_node *ni; @@ -1430,10 +1413,11 @@ urtwn_ra_init(struct urtwn_softc *sc) maxrate = maxbasicrate = 0; for (i = 0; i < rs->rs_nrates; i++) { /* Convert 802.11 rate to HW rate index. */ - for (j = 0; j < nitems(map); j++) - if ((rs->rs_rates[i] & IEEE80211_RATE_VAL) == map[j]) + for (j = 0; j < nitems(ridx2rate); j++) + if ((rs->rs_rates[i] & IEEE80211_RATE_VAL) == + ridx2rate[j]) break; - if (j == nitems(map)) /* Unknown rate, skip. */ + if (j == nitems(ridx2rate)) /* Unknown rate, skip. */ continue; rates |= 1 << j; if (j > maxrate) @@ -1740,7 +1724,7 @@ urtwn_update_avgrssi(struct urtwn_softc else pwdb = 100 + rssi; if (!(sc->chip & URTWN_CHIP_88E)) { - if (rate <= 3) { + if (rate <= URTWN_RIDX_CCK11) { /* CCK gain is smaller than OFDM/MCS gain. */ pwdb += 6; if (pwdb > 100) @@ -1773,7 +1757,7 @@ urtwn_get_rssi(struct urtwn_softc *sc, i uint8_t rpt; int8_t rssi; - if (rate <= 3) { + if (rate <= URTWN_RIDX_CCK11) { cck = (struct r92c_rx_cck *)physt; if (sc->sc_flags & URTWN_FLAG_CCK_HIPWR) { rpt = (cck->agc_rpt >> 5) & 0x3; @@ -1799,7 +1783,7 @@ urtwn_r88e_get_rssi(struct urtwn_softc * int8_t rssi; rssi = 0; - if (rate <= 3) { + if (rate <= URTWN_RIDX_CCK11) { cck = (struct r88e_rx_cck *)physt; cck_agc_rpt = cck->agc_rpt; lna_idx = (cck_agc_rpt & 0xe0) >> 5; @@ -1932,10 +1916,12 @@ urtwn_tx_start(struct urtwn_softc *sc, s } } /* Send RTS at OFDM24. */ - txd->txdw4 |= htole32(SM(R92C_TXDW4_RTSRATE, 8)); + txd->txdw4 |= htole32(SM(R92C_TXDW4_RTSRATE, + URTWN_RIDX_OFDM24)); txd->txdw5 |= htole32(0x0001ff00); /* Send data at OFDM54. */ - txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 11)); + txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, + URTWN_RIDX_OFDM54)); } else { txd->txdw1 |= htole32( SM(R92C_TXDW1_MACID, 0) | @@ -1944,7 +1930,8 @@ urtwn_tx_start(struct urtwn_softc *sc, s /* Force CCK1. */ txd->txdw4 |= htole32(R92C_TXDW4_DRVRATE); - txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 0)); + txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, + URTWN_RIDX_CCK1)); } /* Set sequence number (already little endian). */ txd->txdseq |= *(uint16_t *)wh->i_seq; @@ -2930,10 +2917,10 @@ urtwn_get_txpower(struct urtwn_softc *sc memset(power, 0, URTWN_RIDX_COUNT * sizeof(power[0])); if (sc->regulatory == 0) { - for (ridx = 0; ridx <= 3; ridx++) + for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) power[ridx] = base->pwr[0][ridx]; } - for (ridx = 4; ridx < URTWN_RIDX_COUNT; ridx++) { + for (ridx = URTWN_RIDX_OFDM6; ridx < URTWN_RIDX_COUNT; ridx++) { if (sc->regulatory == 3) { power[ridx] = base->pwr[0][ridx]; /* Apply vendor limits. */ @@ -2953,7 +2940,7 @@ urtwn_get_txpower(struct urtwn_softc *sc /* Compute per-CCK rate Tx power. */ cckpow = rom->cck_tx_pwr[chain][group]; - for (ridx = 0; ridx <= 3; ridx++) { + for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) { power[ridx] += cckpow; if (power[ridx] > R92C_MAX_TX_PWR) power[ridx] = R92C_MAX_TX_PWR; @@ -2971,7 +2958,7 @@ urtwn_get_txpower(struct urtwn_softc *sc diff = rom->ofdm_tx_pwr_diff[group]; diff = (diff >> (chain * 4)) & 0xf; ofdmpow = htpow + diff; /* HT->OFDM correction. */ - for (ridx = 4; ridx <= 11; ridx++) { + for (ridx = URTWN_RIDX_OFDM6; ridx <= URTWN_RIDX_OFDM54; ridx++) { power[ridx] += ofdmpow; if (power[ridx] > R92C_MAX_TX_PWR) power[ridx] = R92C_MAX_TX_PWR; @@ -2992,7 +2979,7 @@ urtwn_get_txpower(struct urtwn_softc *sc if (urtwn_debug >= 4) { /* Dump per-rate Tx power values. */ printf("Tx power for chain %d:\n", chain); - for (ridx = 0; ridx < URTWN_RIDX_COUNT; ridx++) + for (ridx = URTWN_RIDX_CCK1; ridx < URTWN_RIDX_COUNT; ridx++) printf("Rate %d = %u\n", ridx, power[ridx]); } #endif @@ -3028,10 +3015,10 @@ urtwn_r88e_get_txpower(struct urtwn_soft memset(power, 0, URTWN_RIDX_COUNT * sizeof(power[0])); if (sc->regulatory == 0) { - for (ridx = 0; ridx <= 3; ridx++) + for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) power[ridx] = base->pwr[0][ridx]; } - for (ridx = 4; ridx < URTWN_RIDX_COUNT; ridx++) { + for (ridx = URTWN_RIDX_OFDM6; ridx < URTWN_RIDX_COUNT; ridx++) { if (sc->regulatory == 3) power[ridx] = base->pwr[0][ridx]; else if (sc->regulatory == 1) { @@ -3043,7 +3030,7 @@ urtwn_r88e_get_txpower(struct urtwn_soft /* Compute per-CCK rate Tx power. */ cckpow = sc->cck_tx_pwr[group]; - for (ridx = 0; ridx <= 3; ridx++) { + for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) { power[ridx] += cckpow; if (power[ridx] > R92C_MAX_TX_PWR) power[ridx] = R92C_MAX_TX_PWR; @@ -3053,7 +3040,7 @@ urtwn_r88e_get_txpower(struct urtwn_soft /* Compute per-OFDM rate Tx power. */ ofdmpow = htpow + sc->ofdm_tx_pwr_diff; - for (ridx = 4; ridx <= 11; ridx++) { + for (ridx = URTWN_RIDX_OFDM6; ridx <= URTWN_RIDX_OFDM54; ridx++) { power[ridx] += ofdmpow; if (power[ridx] > R92C_MAX_TX_PWR) power[ridx] = R92C_MAX_TX_PWR; Modified: head/sys/dev/usb/wlan/if_urtwnreg.h ============================================================================== --- head/sys/dev/usb/wlan/if_urtwnreg.h Thu Oct 22 15:20:33 2015 (r289757) +++ head/sys/dev/usb/wlan/if_urtwnreg.h Thu Oct 22 15:42:53 2015 (r289758) @@ -1060,6 +1060,19 @@ struct r92c_tx_desc { } __packed __attribute__((aligned(4))); +static const uint8_t ridx2rate[] = + { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; + +/* HW rate indices. */ +#define URTWN_RIDX_CCK1 0 +#define URTWN_RIDX_CCK11 3 +#define URTWN_RIDX_OFDM6 4 +#define URTWN_RIDX_OFDM24 8 +#define URTWN_RIDX_OFDM54 11 + +#define URTWN_RIDX_COUNT 28 + + /* * MAC initialization values. */ Modified: head/sys/dev/usb/wlan/if_urtwnvar.h ============================================================================== --- head/sys/dev/usb/wlan/if_urtwnvar.h Thu Oct 22 15:20:33 2015 (r289757) +++ head/sys/dev/usb/wlan/if_urtwnvar.h Thu Oct 22 15:42:53 2015 (r289758) @@ -26,8 +26,6 @@ #define URTWN_RX_DESC_SIZE (sizeof(struct r92c_rx_stat)) #define URTWN_TX_DESC_SIZE (sizeof(struct r92c_tx_desc)) -#define URTWN_RIDX_COUNT 28 - #define URTWN_TX_TIMEOUT 5000 /* ms */ #define URTWN_LED_LINK 0
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510221542.t9MFgsi4038128>