The branch main has been updated by adrian:

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

commit cce278510a820785d883e2c9b19a95c176427880
Author:     Adrian Chadd <adr...@freebsd.org>
AuthorDate: 2025-06-09 19:52:35 +0000
Commit:     Adrian Chadd <adr...@freebsd.org>
CommitDate: 2025-09-20 00:42:07 +0000

    usb: update wifi drivers to use IEEE80211_FEXT_SEQNO_OFFLOAD
    
    Migrate the following wifi drivers to use the seqno offload option.
    
    Locally tested (STA mode) on:
    
    * mtw
    * uath
    * upgt
    * ural
    * urtw
    * uzyd
    
    Differential Revision:  https://reviews.freebsd.org/D50771
    Okayed by: bz
---
 sys/dev/usb/wlan/if_mtw.c  | 5 +++++
 sys/dev/usb/wlan/if_uath.c | 4 ++++
 sys/dev/usb/wlan/if_upgt.c | 5 +++++
 sys/dev/usb/wlan/if_ural.c | 6 ++++++
 sys/dev/usb/wlan/if_urtw.c | 6 ++++++
 sys/dev/usb/wlan/if_zyd.c  | 4 ++++
 6 files changed, 30 insertions(+)

diff --git a/sys/dev/usb/wlan/if_mtw.c b/sys/dev/usb/wlan/if_mtw.c
index 137590651948..6967e5081542 100644
--- a/sys/dev/usb/wlan/if_mtw.c
+++ b/sys/dev/usb/wlan/if_mtw.c
@@ -638,6 +638,7 @@ mtw_attach(device_t self)
 
        ic->ic_flags |= IEEE80211_F_DATAPAD;
        ic->ic_flags_ext |= IEEE80211_FEXT_SWBMISS;
+       ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD;
 
        mtw_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
            ic->ic_channels);
@@ -3131,6 +3132,8 @@ mtw_tx(struct mtw_softc *sc, struct mbuf *m, struct 
ieee80211_node *ni)
        data->ni = ni;
        data->ridx = ridx;
 
+       ieee80211_output_seqno_assign(ni, -1, m);
+
        mtw_set_tx_desc(sc, data);
 
        /*
@@ -3390,6 +3393,8 @@ mtw_tx_param(struct mtw_softc *sc, struct mbuf *m, struct 
ieee80211_node *ni,
                        break;
        data->ridx = ridx;
 
+       ieee80211_output_seqno_assign(ni, -1, m);
+
        mtw_set_tx_desc(sc, data);
 
        MTW_DPRINTF(sc, MTW_DEBUG_XMIT, "sending raw frame len=%u rate=%u\n",
diff --git a/sys/dev/usb/wlan/if_uath.c b/sys/dev/usb/wlan/if_uath.c
index b49c75032d77..cc303e565bca 100644
--- a/sys/dev/usb/wlan/if_uath.c
+++ b/sys/dev/usb/wlan/if_uath.c
@@ -432,6 +432,8 @@ uath_attach(device_t dev)
        /* put a regulatory domain to reveal informations.  */
        uath_regdomain = sc->sc_devcap.regDomain;
 
+       ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD;
+
        memset(bands, 0, sizeof(bands));
        setbit(bands, IEEE80211_MODE_11B);
        setbit(bands, IEEE80211_MODE_11G);
@@ -1548,6 +1550,8 @@ uath_tx_start(struct uath_softc *sc, struct mbuf *m0, 
struct ieee80211_node *ni,
                ieee80211_radiotap_tx(vap, m0);
        }
 
+       ieee80211_output_seqno_assign(ni, -1, m0);
+
        wh = mtod(m0, struct ieee80211_frame *);
        if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
                k = ieee80211_crypto_encap(ni, m0);
diff --git a/sys/dev/usb/wlan/if_upgt.c b/sys/dev/usb/wlan/if_upgt.c
index 642631ae34b7..1ab833301b3c 100644
--- a/sys/dev/usb/wlan/if_upgt.c
+++ b/sys/dev/usb/wlan/if_upgt.c
@@ -354,6 +354,8 @@ upgt_attach(device_t dev)
        ic->ic_transmit = upgt_transmit;
        ic->ic_parent = upgt_parent;
 
+       ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD;
+
        ieee80211_radiotap_attach(ic,
            &sc->sc_txtap.wt_ihdr, sizeof(sc->sc_txtap),
                UPGT_TX_RADIOTAP_PRESENT,
@@ -2116,6 +2118,9 @@ upgt_tx_start(struct upgt_softc *sc, struct mbuf *m, 
struct ieee80211_node *ni,
 
        upgt_set_led(sc, UPGT_LED_BLINK);
 
+       /* Assign sequence number */
+       ieee80211_output_seqno_assign(ni, -1, m);
+
        /*
         * Software crypto.
         */
diff --git a/sys/dev/usb/wlan/if_ural.c b/sys/dev/usb/wlan/if_ural.c
index 260d75a9821d..adef924a085c 100644
--- a/sys/dev/usb/wlan/if_ural.c
+++ b/sys/dev/usb/wlan/if_ural.c
@@ -473,6 +473,8 @@ ural_attach(device_t self)
            | IEEE80211_C_WPA           /* 802.11i */
            ;
 
+       ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD;
+
        ural_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
            ic->ic_channels);
 
@@ -1073,6 +1075,8 @@ ural_tx_mgt(struct ural_softc *sc, struct mbuf *m0, 
struct ieee80211_node *ni)
        STAILQ_REMOVE_HEAD(&sc->tx_free, next);
        sc->tx_nfree--;
 
+       ieee80211_output_seqno_assign(ni, -1, m0);
+
        wh = mtod(m0, struct ieee80211_frame *);
        if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
                k = ieee80211_crypto_encap(ni, m0);
@@ -1229,6 +1233,8 @@ ural_tx_data(struct ural_softc *sc, struct mbuf *m0, 
struct ieee80211_node *ni)
                rate = ieee80211_node_get_txrate_dot11rate(ni);
        }
 
+       ieee80211_output_seqno_assign(ni, -1, m0);
+
        if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
                k = ieee80211_crypto_encap(ni, m0);
                if (k == NULL) {
diff --git a/sys/dev/usb/wlan/if_urtw.c b/sys/dev/usb/wlan/if_urtw.c
index 439faeefc408..86cf4c653ae7 100644
--- a/sys/dev/usb/wlan/if_urtw.c
+++ b/sys/dev/usb/wlan/if_urtw.c
@@ -884,6 +884,8 @@ urtw_attach(device_t dev)
 
        /* XXX TODO: setup regdomain if URTW_EPROM_CHANPLAN_BY_HW bit is set.*/
 
+       ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD;
+
        urtw_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
            ic->ic_channels);
 
@@ -1699,6 +1701,10 @@ urtw_tx_start(struct urtw_softc *sc, struct 
ieee80211_node *ni, struct mbuf *m0,
        ismcast = IEEE80211_IS_MULTICAST(wh->i_addr1);
        type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
 
+
+       /* Assign sequence number */
+       ieee80211_output_seqno_assign(ni, -1, m0);
+
        /*
         * Software crypto.
         */
diff --git a/sys/dev/usb/wlan/if_zyd.c b/sys/dev/usb/wlan/if_zyd.c
index 1a698caef3c5..7affdcdce089 100644
--- a/sys/dev/usb/wlan/if_zyd.c
+++ b/sys/dev/usb/wlan/if_zyd.c
@@ -384,6 +384,8 @@ zyd_attach(device_t dev)
                | IEEE80211_C_WPA               /* 802.11i */
                ;
 
+       ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD;
+
        zyd_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans,
            ic->ic_channels);
 
@@ -2463,6 +2465,8 @@ zyd_tx_start(struct zyd_softc *sc, struct mbuf *m0, 
struct ieee80211_node *ni)
                }
        }
 
+       ieee80211_output_seqno_assign(ni, -1, m0);
+
        if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
                k = ieee80211_crypto_encap(ni, m0);
                if (k == NULL) {

Reply via email to