Page MenuHomeFreeBSD

D48103.diff
No OneTemporary

D48103.diff

diff --git a/sys/dev/rtwn/if_rtwn.c b/sys/dev/rtwn/if_rtwn.c
--- a/sys/dev/rtwn/if_rtwn.c
+++ b/sys/dev/rtwn/if_rtwn.c
@@ -436,6 +436,29 @@
ieee80211_resume_all(ic);
}
+void
+rtwn_attach_vht_cap_info_mcs(struct rtwn_softc *sc)
+{
+ struct ieee80211com *ic = &sc->sc_ic;
+ uint32_t rx_mcs = 0, tx_mcs = 0;
+
+ for (int i = 0 ; i < 8; i++) {
+ if (i < sc->ntxchains)
+ tx_mcs |= (IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2));
+ else
+ tx_mcs |= (IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2));
+
+ if (i < sc->nrxchains)
+ rx_mcs |= (IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2));
+ else
+ rx_mcs |= (IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2));
+ }
+ ic->ic_vht_cap.supp_mcs.rx_mcs_map = rx_mcs;
+ ic->ic_vht_cap.supp_mcs.rx_highest = 0;
+ ic->ic_vht_cap.supp_mcs.tx_mcs_map = tx_mcs;
+ ic->ic_vht_cap.supp_mcs.tx_highest = 0;
+}
+
static void
rtwn_vap_decrement_counters(struct rtwn_softc *sc,
enum ieee80211_opmode opmode, int id)
diff --git a/sys/dev/rtwn/if_rtwnvar.h b/sys/dev/rtwn/if_rtwnvar.h
--- a/sys/dev/rtwn/if_rtwnvar.h
+++ b/sys/dev/rtwn/if_rtwnvar.h
@@ -436,6 +436,8 @@
void rtwn_resume(struct rtwn_softc *);
void rtwn_suspend(struct rtwn_softc *);
+void rtwn_attach_vht_cap_info_mcs(struct rtwn_softc *);
+
/* Interface-specific. */
#define rtwn_write_1(_sc, _addr, _val) \
(((_sc)->sc_write_1)((_sc), (_addr), (_val)))
diff --git a/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c b/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
--- a/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
+++ b/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
@@ -175,11 +175,24 @@
}
ic->ic_htcaps |=
- IEEE80211_HTCAP_CHWIDTH40 /* 40 MHz channel width */
- | IEEE80211_HTCAP_SHORTGI40 /* short GI in 40MHz */
+ IEEE80211_HTCAP_CHWIDTH40 | /* 40 MHz channel width */
+ IEEE80211_HTCAP_SHORTGI40 /* short GI in 40MHz */
;
- /* TODO: STBC, VHT etc */
+ /* TODO: STBC */
+
+ /* VHT config */
+ ic->ic_flags_ext |= IEEE80211_FEXT_VHT;
+ ic->ic_vht_cap.vht_cap_info =
+ IEEE80211_VHTCAP_MAX_MPDU_LENGTH_11454 |
+ IEEE80211_VHTCAP_SHORT_GI_80 |
+ IEEE80211_VHTCAP_TXSTBC |
+ IEEE80211_VHTCAP_RXSTBC_1 |
+ IEEE80211_VHTCAP_HTC_VHT |
+ _IEEE80211_SHIFTMASK(7,
+ IEEE80211_VHTCAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK);
+
+ rtwn_attach_vht_cap_info_mcs(sc);
}
void
diff --git a/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c b/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
--- a/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
+++ b/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
@@ -160,11 +160,22 @@
ic->ic_caps |= IEEE80211_C_DFS;
ic->ic_htcaps |=
- IEEE80211_HTCAP_CHWIDTH40 /* 40 MHz channel width */
- | IEEE80211_HTCAP_SHORTGI40 /* short GI in 40MHz */
+ IEEE80211_HTCAP_CHWIDTH40 | /* 40 MHz channel width */
+ IEEE80211_HTCAP_SHORTGI40 /* short GI in 40MHz */
;
- /* TODO: VHT */
+ /* VHT config */
+ ic->ic_flags_ext |= IEEE80211_FEXT_VHT;
+ ic->ic_vht_cap.vht_cap_info =
+ IEEE80211_VHTCAP_MAX_MPDU_LENGTH_11454 |
+ IEEE80211_VHTCAP_SHORT_GI_80 |
+ IEEE80211_VHTCAP_TXSTBC |
+ IEEE80211_VHTCAP_RXSTBC_1 |
+ IEEE80211_VHTCAP_HTC_VHT |
+ _IEEE80211_SHIFTMASK(7,
+ IEEE80211_VHTCAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK);
+
+ rtwn_attach_vht_cap_info_mcs(sc);
}
void

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 25, 6:44 PM (14 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16159281
Default Alt Text
D48103.diff (3 KB)

Event Timeline