diff options
Diffstat (limited to 'sys/dev/otus/if_otus.c')
-rw-r--r-- | sys/dev/otus/if_otus.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/dev/otus/if_otus.c b/sys/dev/otus/if_otus.c index 5919e75a59cf..f6c4a0118b68 100644 --- a/sys/dev/otus/if_otus.c +++ b/sys/dev/otus/if_otus.c @@ -728,6 +728,12 @@ otus_attachhook(struct otus_softc *sc) IEEE80211_C_SWAMSDUTX | /* Do software A-MSDU TX */ IEEE80211_C_WPA; /* WPA/RSN. */ + /* + * Although A-MPDU RX is fine, A-MPDU TX apparently has some + * hardware bugs. Looking at Linux carl9170, it has a work-around + * that forces all frames into the AC_BE queue regardless of + * the actual QoS queue. + */ ic->ic_htcaps = IEEE80211_HTC_HT | #if 0 @@ -737,6 +743,8 @@ otus_attachhook(struct otus_softc *sc) IEEE80211_HTCAP_MAXAMSDU_3839 | IEEE80211_HTCAP_SMPS_OFF; + ic->ic_flags_ext |= IEEE80211_FEXT_SEQNO_OFFLOAD; + otus_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans, ic->ic_channels); @@ -2232,6 +2240,9 @@ otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m, int hasqos, xferlen, type, ismcast; wh = mtod(m, struct ieee80211_frame *); + + ieee80211_output_seqno_assign(ni, -1, m); + if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) { k = ieee80211_crypto_encap(ni, m); if (k == NULL) { |