Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Feb 2025 19:31:35 GMT
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 706745001093 - main - sys: convert ni->ni_txrate references use to the new net80211 API
Message-ID:  <202502261931.51QJVZKf017509@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by adrian:

URL: https://cgit.FreeBSD.org/src/commit/?id=7067450010931479f8dd97e51e4c5bf6a4d34c7e

commit 7067450010931479f8dd97e51e4c5bf6a4d34c7e
Author:     Adrian Chadd <adrian@FreeBSD.org>
AuthorDate: 2025-01-02 04:35:24 +0000
Commit:     Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2025-02-26 19:29:18 +0000

    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
---
 sys/compat/linuxkpi/common/src/linux_80211.c |  6 ++++--
 sys/dev/ath/ath_rate/amrr/amrr.c             |  7 +++++--
 sys/dev/ath/ath_rate/onoe/onoe.c             |  8 +++++---
 sys/dev/ath/ath_rate/sample/sample.c         | 15 ++++++++++-----
 sys/dev/bwi/if_bwi.c                         |  2 +-
 sys/dev/bwn/if_bwn.c                         |  2 +-
 sys/dev/ipw/if_ipw.c                         |  4 ++--
 sys/dev/iwi/if_iwi.c                         |  4 ++--
 sys/dev/iwm/if_iwm.c                         |  8 +++++---
 sys/dev/iwn/if_iwn.c                         |  2 +-
 sys/dev/malo/if_malo.c                       |  2 +-
 sys/dev/mwl/if_mwl.c                         | 11 ++++++-----
 sys/dev/otus/if_otus.c                       |  9 ++++++---
 sys/dev/ral/rt2560.c                         |  4 ++--
 sys/dev/ral/rt2661.c                         |  4 ++--
 sys/dev/ral/rt2860.c                         |  2 +-
 sys/dev/rtwn/if_rtwn_tx.c                    |  2 +-
 sys/dev/usb/wlan/if_mtw.c                    | 10 ++++++----
 sys/dev/usb/wlan/if_rsu.c                    |  3 ++-
 sys/dev/usb/wlan/if_rum.c                    |  2 +-
 sys/dev/usb/wlan/if_run.c                    |  7 +++++--
 sys/dev/usb/wlan/if_uath.c                   |  3 ++-
 sys/dev/usb/wlan/if_ural.c                   |  2 +-
 sys/dev/usb/wlan/if_zyd.c                    |  2 +-
 sys/dev/wpi/if_wpi.c                         |  2 +-
 sys/dev/wtap/if_wtap.c                       |  5 ++---
 26 files changed, 76 insertions(+), 52 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c
index 894d0db39677..72227378b097 100644
--- a/sys/compat/linuxkpi/common/src/linux_80211.c
+++ b/sys/compat/linuxkpi/common/src/linux_80211.c
@@ -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
diff --git a/sys/dev/ath/ath_rate/amrr/amrr.c b/sys/dev/ath/ath_rate/amrr/amrr.c
index 81bd03484de5..8f696eba23eb 100644
--- a/sys/dev/ath/ath_rate/amrr/amrr.c
+++ b/sys/dev/ath/ath_rate/amrr/amrr.c
@@ -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;
diff --git a/sys/dev/ath/ath_rate/onoe/onoe.c b/sys/dev/ath/ath_rate/onoe/onoe.c
index 8d86f13ef703..035d54b00b62 100644
--- a/sys/dev/ath/ath_rate/onoe/onoe.c
+++ b/sys/dev/ath/ath_rate/onoe/onoe.c
@@ -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);
diff --git a/sys/dev/ath/ath_rate/sample/sample.c b/sys/dev/ath/ath_rate/sample/sample.c
index 58df9ad1c1cd..8fba3c68099f 100644
--- a/sys/dev/ath/ath_rate/sample/sample.c
+++ b/sys/dev/ath/ath_rate/sample/sample.c
@@ -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
 }
diff --git a/sys/dev/bwi/if_bwi.c b/sys/dev/bwi/if_bwi.c
index f9a6b2357cc0..079dac73ea43 100644
--- a/sys/dev/bwi/if_bwi.c
+++ b/sys/dev/bwi/if_bwi.c
@@ -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] &
diff --git a/sys/dev/bwn/if_bwn.c b/sys/dev/bwn/if_bwn.c
index 0f44c3c94672..571482afda70 100644
--- a/sys/dev/bwn/if_bwn.c
+++ b/sys/dev/bwn/if_bwn.c
@@ -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] &
diff --git a/sys/dev/ipw/if_ipw.c b/sys/dev/ipw/if_ipw.c
index 68662f378933..01d713cdae18 100644
--- a/sys/dev/ipw/if_ipw.c
+++ b/sys/dev/ipw/if_ipw.c
@@ -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);
 }
 
diff --git a/sys/dev/iwi/if_iwi.c b/sys/dev/iwi/if_iwi.c
index 4d71550f512e..3a410a5cbf2c 100644
--- a/sys/dev/iwi/if_iwi.c
+++ b/sys/dev/iwi/if_iwi.c
@@ -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);
 }
diff --git a/sys/dev/iwm/if_iwm.c b/sys/dev/iwm/if_iwm.c
index 248bfd056580..bfe8c3635c7c 100644
--- a/sys/dev/iwm/if_iwm.c
+++ b/sys/dev/iwm/if_iwm.c
@@ -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;
 
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index b887ebf842e1..b7c452a4f074 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -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);
 	}
 
 	/*
diff --git a/sys/dev/malo/if_malo.c b/sys/dev/malo/if_malo.c
index 52419f377bb6..79a3213c6802 100644
--- a/sys/dev/malo/if_malo.c
+++ b/sys/dev/malo/if_malo.c
@@ -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
diff --git a/sys/dev/mwl/if_mwl.c b/sys/dev/mwl/if_mwl.c
index d0d13e576d31..2570cbce525b 100644
--- a/sys/dev/mwl/if_mwl.c
+++ b/sys/dev/mwl/if_mwl.c
@@ -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++;
diff --git a/sys/dev/otus/if_otus.c b/sys/dev/otus/if_otus.c
index a620a400bfd6..5919e75a59cf 100644
--- a/sys/dev/otus/if_otus.c
+++ b/sys/dev/otus/if_otus.c
@@ -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);
diff --git a/sys/dev/ral/rt2560.c b/sys/dev/ral/rt2560.c
index aaae1245a9a1..09b01ea55be9 100644
--- a/sys/dev/ral/rt2560.c
+++ b/sys/dev/ral/rt2560.c
@@ -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
diff --git a/sys/dev/ral/rt2661.c b/sys/dev/ral/rt2661.c
index 4912e1106fa6..38cd99d899ed 100644
--- a/sys/dev/ral/rt2661.c
+++ b/sys/dev/ral/rt2661.c
@@ -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
diff --git a/sys/dev/ral/rt2860.c b/sys/dev/ral/rt2860.c
index e928de084bcb..1449df683a93 100644
--- a/sys/dev/ral/rt2860.c
+++ b/sys/dev/ral/rt2860.c
@@ -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;
 
diff --git a/sys/dev/rtwn/if_rtwn_tx.c b/sys/dev/rtwn/if_rtwn_tx.c
index c59d1de1dea8..f355bc589143 100644
--- a/sys/dev/rtwn/if_rtwn_tx.c
+++ b/sys/dev/rtwn/if_rtwn_tx.c
@@ -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 */
diff --git a/sys/dev/usb/wlan/if_mtw.c b/sys/dev/usb/wlan/if_mtw.c
index 51398134ff9d..b42ed336d18e 100644
--- a/sys/dev/usb/wlan/if_mtw.c
+++ b/sys/dev/usb/wlan/if_mtw.c
@@ -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
diff --git a/sys/dev/usb/wlan/if_rsu.c b/sys/dev/usb/wlan/if_rsu.c
index c967435250ee..997a739562f6 100644
--- a/sys/dev/usb/wlan/if_rsu.c
+++ b/sys/dev/usb/wlan/if_rsu.c
@@ -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;
diff --git a/sys/dev/usb/wlan/if_rum.c b/sys/dev/usb/wlan/if_rum.c
index fc83409543ec..48674d84ffe3 100644
--- a/sys/dev/usb/wlan/if_rum.c
+++ b/sys/dev/usb/wlan/if_rum.c
@@ -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) {
diff --git a/sys/dev/usb/wlan/if_run.c b/sys/dev/usb/wlan/if_run.c
index e709ceff8849..81f4d172241f 100644
--- a/sys/dev/usb/wlan/if_run.c
+++ b/sys/dev/usb/wlan/if_run.c
@@ -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
diff --git a/sys/dev/usb/wlan/if_uath.c b/sys/dev/usb/wlan/if_uath.c
index 10e3b50eaeb3..e4493ba50a30 100644
--- a/sys/dev/usb/wlan/if_uath.c
+++ b/sys/dev/usb/wlan/if_uath.c
@@ -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,
diff --git a/sys/dev/usb/wlan/if_ural.c b/sys/dev/usb/wlan/if_ural.c
index 6e01592da44f..c47b8cbeb3ae 100644
--- a/sys/dev/usb/wlan/if_ural.c
+++ b/sys/dev/usb/wlan/if_ural.c
@@ -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) {
diff --git a/sys/dev/usb/wlan/if_zyd.c b/sys/dev/usb/wlan/if_zyd.c
index 76e7d4312040..1815dc04cd09 100644
--- a/sys/dev/usb/wlan/if_zyd.c
+++ b/sys/dev/usb/wlan/if_zyd.c
@@ -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);
 		}
 	}
 
diff --git a/sys/dev/wpi/if_wpi.c b/sys/dev/wpi/if_wpi.c
index 11b8a749090d..471700ca9f5c 100644
--- a/sys/dev/wpi/if_wpi.c
+++ b/sys/dev/wpi/if_wpi.c
@@ -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. */
diff --git a/sys/dev/wtap/if_wtap.c b/sys/dev/wtap/if_wtap.c
index f9e0c2a7e5c4..3aa3831e72c2 100644
--- a/sys/dev/wtap/if_wtap.c
+++ b/sys/dev/wtap/if_wtap.c
@@ -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;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202502261931.51QJVZKf017509>