The branch main has been updated by adrian:

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

commit ea347b7fda20e1437c1b2c363e12a4f29d8ca8f0
Author:     Adrian Chadd <adr...@freebsd.org>
AuthorDate: 2024-12-19 02:43:47 +0000
Commit:     Adrian Chadd <adr...@freebsd.org>
CommitDate: 2025-01-14 04:33:56 +0000

    rtwn: refactor out datarate and short preamble setup
    
    Refactor out the datarate setup and short preamble setup.
    These will eventually be slightly different based on whether
    firmware rate control is being performed or not.
    
    Locally tested:
    
    * RTL8192CU, STA mode
    
    Differential Revision:  https://reviews.freebsd.org/D48141
---
 sys/dev/rtwn/rtl8192c/r92c_tx.c | 47 +++++++++++++++++++++++++++++------------
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/sys/dev/rtwn/rtl8192c/r92c_tx.c b/sys/dev/rtwn/rtl8192c/r92c_tx.c
index d5cbc3ad9db9..9d975e98d95b 100644
--- a/sys/dev/rtwn/rtl8192c/r92c_tx.c
+++ b/sys/dev/rtwn/rtl8192c/r92c_tx.c
@@ -257,6 +257,34 @@ r92c_check_enable_ccx_report(struct rtwn_softc *sc, int 
macid)
        return true;
 }
 
+static void
+r92c_fill_tx_desc_datarate(struct rtwn_softc *sc, struct r92c_tx_desc *txd,
+    uint8_t ridx, bool force_rate)
+{
+
+       /* Force this rate if needed. */
+       if (sc->sc_ratectl == RTWN_RATECTL_FW && !force_rate) {
+               txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 0));
+       } else {
+               txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, ridx));
+               txd->txdw4 |= htole32(R92C_TXDW4_DRVRATE);
+       }
+
+       /* Data rate fallback limit (max). */
+       txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE_FB_LMT, 0x1f));
+}
+
+static void
+r92c_fill_tx_desc_shpreamble(struct rtwn_softc *sc, struct r92c_tx_desc *txd,
+    uint8_t ridx, bool force_rate)
+{
+       const struct ieee80211com *ic = &sc->sc_ic;
+
+       if (RTWN_RATE_IS_CCK(ridx) && ridx != RTWN_RIDX_CCK1 &&
+           (ic->ic_flags & IEEE80211_F_SHPREAMBLE))
+               txd->txdw4 |= htole32(R92C_TXDW4_DATA_SHPRE);
+}
+
 void
 r92c_fill_tx_desc(struct rtwn_softc *sc, struct ieee80211_node *ni,
     struct mbuf *m, void *buf, uint8_t ridx, bool force_rate, int maxretry)
@@ -327,9 +355,7 @@ r92c_fill_tx_desc(struct rtwn_softc *sc, struct 
ieee80211_node *ni,
 #endif
                        }
 
-                       if (RTWN_RATE_IS_CCK(ridx) && ridx != RTWN_RIDX_CCK1 &&
-                           (ic->ic_flags & IEEE80211_F_SHPREAMBLE))
-                               txd->txdw4 |= htole32(R92C_TXDW4_DATA_SHPRE);
+                       r92c_fill_tx_desc_shpreamble(sc, txd, ridx, force_rate);
 
                        prot = IEEE80211_PROT_NONE;
                        if (RTWN_RATE_IS_HT(ridx)) {
@@ -359,16 +385,13 @@ r92c_fill_tx_desc(struct rtwn_softc *sc, struct 
ieee80211_node *ni,
        txd->txdw1 |= htole32(SM(R92C_TXDW1_QSEL, qsel));
 
        rtwn_r92c_tx_setup_macid(sc, txd, macid);
-       txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, ridx));
-       /* Data rate fallback limit (max). */
-       txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE_FB_LMT, 0x1f));
+
+       /* Fill in data rate, data retry */
+       r92c_fill_tx_desc_datarate(sc, txd, ridx, force_rate);
+
        txd->txdw4 |= htole32(SM(R92C_TXDW4_PORT_ID, uvp->id));
        r92c_tx_raid(sc, txd, ni, ismcast);
 
-       /* Force this rate if needed. */
-       if (sc->sc_ratectl != RTWN_RATECTL_FW)
-               txd->txdw4 |= htole32(R92C_TXDW4_DRVRATE);
-
        if (!hasqos) {
                /* Use HW sequence numbering for non-QoS frames. */
                rtwn_r92c_tx_setup_hwseq(sc, txd);
@@ -423,10 +446,8 @@ r92c_fill_tx_desc_raw(struct rtwn_softc *sc, struct 
ieee80211_node *ni,
        txd->txdw1 |= htole32(SM(R92C_TXDW1_QSEL, R92C_TXDW1_QSEL_MGNT));
 
        /* Set TX rate index. */
-       txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, ridx));
-       txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE_FB_LMT, 0x1f));
+       r92c_fill_tx_desc_datarate(sc, txd, ridx, true); /* force rate */
        txd->txdw4 |= htole32(SM(R92C_TXDW4_PORT_ID, uvp->id));
-       txd->txdw4 |= htole32(R92C_TXDW4_DRVRATE);
        r92c_tx_raid(sc, txd, ni, ismcast);
 
        if (!IEEE80211_QOS_HAS_SEQ(wh)) {

Reply via email to