Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src-draft/trunk]: src/sys/dev/pci Attempt at improving iwn tx/rx rates by re...



details:   https://anonhg.NetBSD.org/src-all/rev/e3ceef6cfd70
branches:  trunk
changeset: 947752:e3ceef6cfd70
user:      Nathanial Sloss <nat%netbsd.org@localhost>
date:      Fri Aug 14 02:26:26 2020 +1000

description:
Attempt at improving iwn tx/rx rates by renabling rates to be configured for
the wifi node.

diffstat:

 sys/dev/pci/if_iwn.c |  29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diffs (65 lines):

diff -r c19452bd13d2 -r e3ceef6cfd70 sys/dev/pci/if_iwn.c
--- a/sys/dev/pci/if_iwn.c      Fri Aug 14 02:25:10 2020 +1000
+++ b/sys/dev/pci/if_iwn.c      Fri Aug 14 02:26:26 2020 +1000
@@ -2123,26 +2123,31 @@
 static int
 iwn_media_change(struct ifnet *ifp)
 {
-       //struct iwn_softc *sc = ifp->if_softc;
-//     struct ieee80211com *ic = &sc->sc_ic;
-//     uint8_t rate, ridx;
+       struct ieee80211vap *vap = ifp->if_softc;
+       struct ieee80211com *ic = vap->iv_ic;
+       struct iwn_softc *sc = ic->ic_softc;
+       uint8_t rate, ridx, i;
        int error;
 
        error = ieee80211_media_change(ifp);
        if (error != ENETRESET)
                return error;
 
-#if 0
-       if (ic->ic_fixed_rate != -1) {
+//     if (ic->ic_fixed_rate != -1) {
+               /* Find the highest rate */
+               i = 0;
+               for (rate = 1; rate != 0; i++) {
+                       rate = ic->ic_sup_rates[ic->ic_curmode].
+                           rs_rates[i] & IEEE80211_RATE_VAL;
+               }
                rate = ic->ic_sup_rates[ic->ic_curmode].
-                   rs_rates[ic->ic_fixed_rate] & IEEE80211_RATE_VAL;
+                   rs_rates[i - 1] & IEEE80211_RATE_VAL;
                /* Map 802.11 rate to HW rate index. */
                for (ridx = 0; ridx <= IWN_RIDX_MAX; ridx++)
                        if (iwn_rates[ridx].rate == rate)
                                break;
                sc->fixed_ridx = ridx;
-       }
-#endif
+//     }
 
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
            (IFF_UP | IFF_RUNNING)) {
@@ -3369,16 +3374,18 @@
        data = &ring->data[ring->cur];
 
        /* Choose a TX rate index. */
+#if 0
        if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
            type != IEEE80211_FC0_TYPE_DATA) {
                ridx = (ic->ic_curmode == IEEE80211_MODE_11A) ?
                    IWN_RIDX_OFDM6 : IWN_RIDX_CCK1;
+       } else if (ic->ic_fixed_rate != -1) {
+#endif
+               ridx = sc->fixed_ridx;
 #if 0
-       } else if (ic->ic_fixed_rate != -1) {
-               ridx = sc->fixed_ridx;
-#endif
        } else
                ridx = wn->ridx[ni->ni_txrate];
+#endif
        rinfo = &iwn_rates[ridx];
 
        if (sc->sc_drvbpf != NULL) {



Home | Main Index | Thread Index | Old Index