sys: convert ni->ni_txrate references use to the new net80211 API

This just mechanically converts things.

* For linuxkpi, it was just used for display.
* For uath, it was just used for display, as firmware
  doesn't report it up.

Differential Revision:	https://reviews.freebsd.org/D48602
Reviewed by:	bz, thj
This commit is contained in:
Adrian Chadd 2025-01-01 20:35:24 -08:00
parent 38075f7d5c
commit 7067450010
26 changed files with 76 additions and 52 deletions

View file

@ -6925,7 +6925,8 @@ linuxkpi_ieee80211_tx_status_ext(struct ieee80211_hw *hw,
#ifdef LINUXKPI_DEBUG_80211
int old_rate;
old_rate = ni->ni_vap->iv_bss->ni_txrate;
old_rate =
ieee80211_node_get_txrate_dot11rate(ni->ni_vap->iv_bss);
#endif
txs.pktlen = skb->len;
txs.flags |= IEEE80211_RATECTL_STATUS_PKTLEN;
@ -6951,7 +6952,8 @@ linuxkpi_ieee80211_tx_status_ext(struct ieee80211_hw *hw,
if (linuxkpi_debug_80211 & D80211_TRACE_TX) {
printf("TX-RATE: %s: old %d new %d ridx %d, "
"long_retries %d\n", __func__,
old_rate, ni->ni_vap->iv_bss->ni_txrate,
old_rate,
ieee80211_node_get_txrate_dot11rate(ni->ni_vap->iv_bss),
ridx, txs.long_retries);
}
#endif

View file

@ -245,8 +245,11 @@ ath_rate_update(struct ath_softc *sc, struct ieee80211_node *ni, int rate)
* lowest hardware rate.
*/
if (ni->ni_rates.rs_nrates > 0) {
ni->ni_txrate = ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL;
amn->amn_tx_rix0 = sc->sc_rixmap[ni->ni_txrate];
uint8_t dot11rate;
dot11rate = ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL;
amn->amn_tx_rix0 = sc->sc_rixmap[dot11rate];
ieee80211_node_set_txrate_dot11rate(ni, dot11rate);
amn->amn_tx_rate0 = rt->info[amn->amn_tx_rix0].rateCode;
amn->amn_tx_rate0sp = amn->amn_tx_rate0 |
rt->info[amn->amn_tx_rix0].shortPreamble;

View file

@ -203,6 +203,7 @@ ath_rate_update(struct ath_softc *sc, struct ieee80211_node *ni, int rate)
struct ieee80211vap *vap = ni->ni_vap;
const HAL_RATE_TABLE *rt = sc->sc_currates;
u_int8_t rix;
uint8_t dot11rate;
KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
@ -221,8 +222,9 @@ ath_rate_update(struct ath_softc *sc, struct ieee80211_node *ni, int rate)
if (ni->ni_rates.rs_nrates == 0)
goto done;
on->on_rix = rate;
ni->ni_txrate = ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL;
on->on_tx_rix0 = sc->sc_rixmap[ni->ni_txrate];
dot11rate = ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL;
ieee80211_node_set_txrate_dot11rate(ni, dot11rate);
on->on_tx_rix0 = sc->sc_rixmap[dot11rate];
on->on_tx_rate0 = rt->info[on->on_tx_rix0].rateCode;
on->on_tx_rate0sp = on->on_tx_rate0 |
@ -389,7 +391,7 @@ ath_rate_ctl(void *arg, struct ieee80211_node *ni)
if (nrate != on->on_rix) {
IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni,
"%s: %dM -> %dM (%d ok, %d err, %d retr)", __func__,
ni->ni_txrate / 2,
ieee80211_node_get_txrate_kbit(ni) / 1000,
(rs->rs_rates[nrate] & IEEE80211_RATE_VAL) / 2,
on->on_tx_ok, on->on_tx_err, on->on_tx_retr);
ath_rate_update(sc, ni, nrate);

View file

@ -855,9 +855,13 @@ ath_rate_findrate(struct ath_softc *sc, struct ath_node *an,
/*
* Set the visible txrate for this node.
*/
an->an_node.ni_txrate =
(rt->info[best_rix].phy == IEEE80211_T_HT) ?
MCS(best_rix) : DOT11RATE(best_rix);
if (rt->info[best_rix].phy == IEEE80211_T_HT)
ieee80211_node_set_txrate_ht_mcsrate(
&an->an_node, MCS(best_rix));
else
ieee80211_node_set_txrate_dot11rate(
&an->an_node,
DOT11RATE(best_rix));
}
rix = sn->current_rix[size_bin];
sn->packets_since_switch[size_bin]++;
@ -1409,9 +1413,10 @@ ath_rate_ctl_reset(struct ath_softc *sc, struct ieee80211_node *ni)
#endif
/* set the visible bit-rate */
if (sn->static_rix != -1)
ni->ni_txrate = DOT11RATE(sn->static_rix);
ieee80211_node_set_txrate_dot11rate(ni,
DOT11RATE(sn->static_rix));
else
ni->ni_txrate = RATE(0);
ieee80211_node_set_txrate_dot11rate(ni, RATE(0));
#undef RATE
#undef DOT11RATE
}

View file

@ -2944,7 +2944,7 @@ bwi_encap(struct bwi_softc *sc, int idx, struct mbuf *m,
rate = rate_fb = tp->ucastrate;
} else {
rix = ieee80211_ratectl_rate(ni, NULL, pkt_len);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
if (rix > 0) {
rate_fb = ni->ni_rates.rs_rates[rix-1] &

View file

@ -6421,7 +6421,7 @@ bwn_set_txhdr(struct bwn_mac *mac, struct ieee80211_node *ni,
rate = rate_fb = tp->ucastrate;
else {
rix = ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
if (rix > 0)
rate_fb = ni->ni_rates.rs_rates[rix - 1] &

View file

@ -838,8 +838,8 @@ ipw_media_status(if_t ifp, struct ifmediareq *imr)
struct ipw_softc *sc = ic->ic_softc;
/* read current transmission rate from adapter */
vap->iv_bss->ni_txrate = ipw_cvtrate(
ipw_read_table1(sc, IPW_INFO_CURRENT_TX_RATE) & 0xf);
ieee80211_node_set_txrate_dot11rate(vap->iv_bss,
ipw_cvtrate(ipw_read_table1(sc, IPW_INFO_CURRENT_TX_RATE) & 0xf));
ieee80211_media_status(ifp, imr);
}

View file

@ -927,8 +927,8 @@ iwi_media_status(if_t ifp, struct ifmediareq *imr)
/* read current transmission rate from adapter */
ni = ieee80211_ref_node(vap->iv_bss);
ni->ni_txrate =
iwi_cvtrate(CSR_READ_4(sc, IWI_CSR_CURRENT_TX_RATE));
ieee80211_node_set_txrate_dot11rate(ni,
iwi_cvtrate(CSR_READ_4(sc, IWI_CSR_CURRENT_TX_RATE)));
ieee80211_free_node(ni);
ieee80211_media_status(ifp, imr);
}

View file

@ -3445,7 +3445,7 @@ iwm_rx_tx_cmd_single(struct iwm_softc *sc, struct iwm_rx_packet *pkt,
struct ieee80211_node *ni = &in->in_ni;
struct ieee80211vap *vap = ni->ni_vap;
int status = le16toh(tx_resp->status.status) & IWM_TX_STATUS_MSK;
int new_rate, cur_rate = vap->iv_bss->ni_txrate;
int new_rate, cur_rate;
boolean_t rate_matched;
uint8_t tx_resp_rate;
@ -3463,6 +3463,7 @@ iwm_rx_tx_cmd_single(struct iwm_softc *sc, struct iwm_rx_packet *pkt,
le32toh(tx_resp->initial_rate),
(int) le16toh(tx_resp->wireless_media_time));
cur_rate = ieee80211_node_get_txrate_dot11rate(vap->iv_bss);
tx_resp_rate = iwm_rate_from_ucode_rate(le32toh(tx_resp->initial_rate));
/* For rate control, ignore frames sent at different initial rate */
@ -3502,7 +3503,7 @@ iwm_rx_tx_cmd_single(struct iwm_softc *sc, struct iwm_rx_packet *pkt,
ieee80211_ratectl_tx_complete(ni, txs);
int rix = ieee80211_ratectl_rate(vap->iv_bss, NULL, 0);
new_rate = vap->iv_bss->ni_txrate;
new_rate = ieee80211_node_get_txrate_dot11rate(vap->iv_bss);
if (new_rate != 0 && new_rate != cur_rate) {
struct iwm_node *in = IWM_NODE(vap->iv_bss);
iwm_setrates(sc, in, rix);
@ -3695,7 +3696,8 @@ iwm_tx_fill_cmd(struct iwm_softc *sc, struct iwm_node *in,
} else {
/* for data frames, use RS table */
IWM_DPRINTF(sc, IWM_DEBUG_TXRATE, "%s: DATA\n", __func__);
ridx = iwm_rate2ridx(sc, ni->ni_txrate);
ridx = iwm_rate2ridx(sc,
ieee80211_node_get_txrate_dot11rate(ni));
if (ridx == -1)
ridx = 0;

View file

@ -4570,7 +4570,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
else {
/* XXX pass pktlen */
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
/*

View file

@ -898,7 +898,7 @@ malo_updatetxrate(struct ieee80211_node *ni, int rix)
static const int ieeerates[] =
{ 2, 4, 11, 22, 44, 12, 18, 24, 36, 48, 96, 108 };
if (rix < nitems(ieeerates))
ni->ni_txrate = ieeerates[rix];
ieee80211_node_set_txrate_dot11rate(ni, ieeerates[rix]);
}
static int

View file

@ -3344,6 +3344,7 @@ mwl_tx_processq(struct mwl_softc *sc, struct mwl_txq *txq)
ni = bf->bf_node;
if (ni != NULL) {
status = le32toh(ds->Status);
int rate;
if (status & EAGLE_TXD_STATUS_OK) {
uint16_t Format = le16toh(ds->Format);
uint8_t txant = _IEEE80211_MASKSHIFT(Format,
@ -3356,14 +3357,14 @@ mwl_tx_processq(struct mwl_softc *sc, struct mwl_txq *txq)
sc->sc_stats.mst_tx_mretries++;
if (txq->qnum >= MWL_WME_AC_VO)
ic->ic_wme.wme_hipri_traffic++;
ni->ni_txrate = _IEEE80211_MASKSHIFT(Format,
rate = _IEEE80211_MASKSHIFT(Format,
EAGLE_TXD_RATE);
if ((Format & EAGLE_TXD_FORMAT_HT) == 0) {
ni->ni_txrate = mwl_cvtlegacyrix(
ni->ni_txrate);
rate = mwl_cvtlegacyrix(rate);
} else
ni->ni_txrate |= IEEE80211_RATE_MCS;
sc->sc_stats.mst_tx_rate = ni->ni_txrate;
rate |= IEEE80211_RATE_MCS;
sc->sc_stats.mst_tx_rate = rate;
ieee80211_node_set_txrate_dot11rate(ni, rate);
} else {
if (status & EAGLE_TXD_STATUS_FAILED_LINK_ERROR)
sc->sc_stats.mst_tx_linkerror++;

View file

@ -2281,7 +2281,8 @@ otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m,
rate = otus_rate_to_hw_rate(sc, tp->ucastrate);
else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = otus_rate_to_hw_rate(sc, ni->ni_txrate);
rate = otus_rate_to_hw_rate(sc,
ieee80211_node_get_txrate_dot11rate(ni));
}
phyctl = 0;
@ -2346,9 +2347,11 @@ otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m,
data->m = m;
OTUS_DPRINTF(sc, OTUS_DEBUG_XMIT,
"%s: tx: m=%p; data=%p; len=%d mac=0x%04x phy=0x%08x rate=0x%02x, ni_txrate=%d\n",
"%s: tx: m=%p; data=%p; len=%d mac=0x%04x phy=0x%08x "
"rate=0x%02x, dot11rate=%d\n",
__func__, m, data, le16toh(head->len), macctl, phyctl,
(int) rate, (int) ni->ni_txrate);
(int) rate,
(int) ieee80211_node_get_txrate_dot11rate(ni));
/* Submit transfer */
STAILQ_INSERT_TAIL(&sc->sc_tx_pending[OTUS_BULK_TX], data, next);

View file

@ -1740,7 +1740,7 @@ rt2560_tx_data(struct rt2560_softc *sc, struct mbuf *m0,
rate = tp->ucastrate;
} else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
@ -1821,7 +1821,7 @@ rt2560_tx_data(struct rt2560_softc *sc, struct mbuf *m0,
/* remember link conditions for rate adaptation algorithm */
if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE) {
data->rix = ni->ni_txrate;
data->rix = ieee80211_node_get_txrate_dot11rate(ni);
/* XXX probably need last rssi value and not avg */
data->rssi = ic->ic_node_getrssi(ni);
} else

View file

@ -1431,7 +1431,7 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m0,
rate = tp->ucastrate;
} else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
rate &= IEEE80211_RATE_VAL;
@ -1515,7 +1515,7 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m0,
/* remember link conditions for rate adaptation algorithm */
if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE) {
data->rix = ni->ni_txrate;
data->rix = ieee80211_node_get_txrate_dot11rate(ni);
/* XXX probably need last rssi value and not avg */
data->rssi = ic->ic_node_getrssi(ni);
} else

View file

@ -1493,7 +1493,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
rate = tp->ucastrate;
} else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
rate &= IEEE80211_RATE_VAL;

View file

@ -143,7 +143,7 @@ rtwn_tx_data(struct rtwn_softc *sc, struct ieee80211_node *ni,
if (sc->sc_ratectl == RTWN_RATECTL_NET80211) {
/* XXX pass pktlen */
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
} else {
if (ni->ni_flags & IEEE80211_NODE_HT)
rate = IEEE80211_RATE_MCS | 0x4; /* MCS4 */

View file

@ -2155,7 +2155,7 @@ mtw_iter_func(void *arg, struct ieee80211_node *ni)
uint32_t sta[3];
uint16_t(*wstat)[3];
int error, ridx;
uint8_t txrate = 0;
/* Check for special case */
if (sc->rvp_cnt <= 1 && vap->iv_opmode == IEEE80211_M_STA &&
@ -2208,11 +2208,13 @@ mtw_iter_func(void *arg, struct ieee80211_node *ni)
ieee80211_ratectl_tx_update(vap, txs);
ieee80211_ratectl_rate(ni, NULL, 0);
txrate = ieee80211_node_get_txrate_dot11rate(ni);
/* XXX TODO: methodize with MCS rates */
for (ridx = 0; ridx < MTW_RIDX_MAX; ridx++) {
MTW_DPRINTF(sc, MTW_DEBUG_RATE, "ni_txrate=0x%x\n",
ni->ni_txrate);
if (rt2860_rates[ridx].rate == ni->ni_txrate) {
txrate);
if (rt2860_rates[ridx].rate == txrate) {
break;
}
}
@ -2221,7 +2223,7 @@ fail:
MTW_UNLOCK(sc);
MTW_DPRINTF(sc, MTW_DEBUG_RATE, "rate=%d, ridx=%d\n",
ni->ni_txrate, rn->amrr_ridx);
txrate, rn->amrr_ridx);
}
static void

View file

@ -1500,7 +1500,8 @@ rsu_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
ni = ieee80211_ref_node(vap->iv_bss);
rs = &ni->ni_rates;
/* Indicate highest supported rate. */
ni->ni_txrate = rs->rs_rates[rs->rs_nrates - 1];
ieee80211_node_set_txrate_dot11rate(ni,
rs->rs_rates[rs->rs_nrates - 1]);
(void) rsu_set_fw_power_state(sc, RSU_PWR_SLEEP);
ieee80211_free_node(ni);
startcal = 1;

View file

@ -1646,7 +1646,7 @@ rum_tx_data(struct rum_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
rate = tp->ucastrate;
else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {

View file

@ -2685,6 +2685,7 @@ run_iter_func(void *arg, struct ieee80211_node *ni)
union run_stats sta[2];
uint16_t (*wstat)[3];
int error, ridx;
uint8_t dot11rate;
RUN_LOCK(sc);
@ -2737,15 +2738,17 @@ run_iter_func(void *arg, struct ieee80211_node *ni)
ieee80211_ratectl_tx_update(vap, txs);
ieee80211_ratectl_rate(ni, NULL, 0);
/* XXX TODO: methodize with MCS rates */
dot11rate = ieee80211_node_get_txrate_dot11rate(ni);
for (ridx = 0; ridx < RT2860_RIDX_MAX; ridx++)
if (rt2860_rates[ridx].rate == ni->ni_txrate)
if (rt2860_rates[ridx].rate == dot11rate)
break;
rn->amrr_ridx = ridx;
fail:
RUN_UNLOCK(sc);
RUN_DPRINTF(sc, RUN_DEBUG_RATE, "rate=%d, ridx=%d\n", ni->ni_txrate, rn->amrr_ridx);
RUN_DPRINTF(sc, RUN_DEBUG_RATE, "rate=0x%02x, ridx=%d\n",
ieee80211_node_get_txrate_dot11rate(ni), rn->amrr_ridx);
}
static void

View file

@ -2058,7 +2058,8 @@ uath_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
* Tx rate is controlled by firmware, report the maximum
* negotiated rate in ifconfig output.
*/
ni->ni_txrate = ni->ni_rates.rs_rates[ni->ni_rates.rs_nrates-1];
ieee80211_node_set_txrate_dot11rate(ni,
ni->ni_rates.rs_rates[ni->ni_rates.rs_nrates-1]);
if (uath_write_associd(sc) != 0) {
device_printf(sc->sc_dev,

View file

@ -1227,7 +1227,7 @@ ural_tx_data(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
rate = tp->ucastrate;
else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {

View file

@ -2460,7 +2460,7 @@ zyd_tx_start(struct zyd_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
rate = tp->ucastrate;
else {
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
}

View file

@ -2821,7 +2821,7 @@ wpi_tx_data(struct wpi_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
else {
/* XXX pass pktlen */
(void) ieee80211_ratectl_rate(ni, NULL, 0);
rate = ni->ni_txrate;
rate = ieee80211_node_get_txrate_dot11rate(ni);
}
/* Encrypt the frame if need be. */

View file

@ -401,7 +401,7 @@ wtap_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ],
/* TODO this is a hack to force it to choose the rate we want */
ni = ieee80211_ref_node(vap->iv_bss);
ni->ni_txrate = 130;
ieee80211_node_set_txrate_ht_mcsrate(ni, 2);
ieee80211_free_node(ni);
return vap;
}
@ -617,8 +617,7 @@ wtap_node_alloc(struct ieee80211vap *vap, const uint8_t mac[IEEE80211_ADDR_LEN])
M_NOWAIT|M_ZERO);
if (ni == NULL)
return (NULL);
ni->ni_txrate = 130;
ieee80211_node_set_txrate_ht_mcsrate(ni, 2);
return ni;
}