Page MenuHomeFreeBSD

D47899.diff
No OneTemporary

D47899.diff

diff --git a/sys/dev/rtwn/rtl8812a/r12a_chan.c b/sys/dev/rtwn/rtl8812a/r12a_chan.c
--- a/sys/dev/rtwn/rtl8812a/r12a_chan.c
+++ b/sys/dev/rtwn/rtl8812a/r12a_chan.c
@@ -91,6 +91,62 @@
/* TODO: HT MCS 16 -> 31 */
}
+static void
+r12a_write_txpower_vht(struct rtwn_softc *sc, int chain,
+ struct ieee80211_channel *c, uint8_t power[RTWN_RIDX_COUNT])
+{
+
+ /* 1SS, MCS 0..3 */
+ rtwn_bb_write(sc, R12A_TXAGC_NSS1IX3_1IX0(chain),
+ SM(R12A_TXAGC_NSS1_MCS0, power[RTWN_RIDX_VHT_MCS(0, 0)]) |
+ SM(R12A_TXAGC_NSS1_MCS1, power[RTWN_RIDX_VHT_MCS(0, 1)]) |
+ SM(R12A_TXAGC_NSS1_MCS2, power[RTWN_RIDX_VHT_MCS(0, 2)]) |
+ SM(R12A_TXAGC_NSS1_MCS3, power[RTWN_RIDX_VHT_MCS(0, 3)]));
+
+ /* 1SS, MCS 4..7 */
+ rtwn_bb_write(sc, R12A_TXAGC_NSS1IX7_1IX4(chain),
+ SM(R12A_TXAGC_NSS1_MCS4, power[RTWN_RIDX_VHT_MCS(0, 4)]) |
+ SM(R12A_TXAGC_NSS1_MCS5, power[RTWN_RIDX_VHT_MCS(0, 5)]) |
+ SM(R12A_TXAGC_NSS1_MCS6, power[RTWN_RIDX_VHT_MCS(0, 6)]) |
+ SM(R12A_TXAGC_NSS1_MCS7, power[RTWN_RIDX_VHT_MCS(0, 7)]));
+
+ /* 1SS, MCS 8,9 ; 2SS MCS0, 1 */
+ if (sc->ntxchains == 1) {
+ rtwn_bb_write(sc, R12A_TXAGC_NSS2IX1_1IX8(chain),
+ SM(R12A_TXAGC_NSS1_MCS8, power[RTWN_RIDX_VHT_MCS(0, 8)]) |
+ SM(R12A_TXAGC_NSS1_MCS9, power[RTWN_RIDX_VHT_MCS(0, 9)]) |
+ SM(R12A_TXAGC_NSS2_MCS0, 0) |
+ SM(R12A_TXAGC_NSS2_MCS1, 0));
+ } else {
+ rtwn_bb_write(sc, R12A_TXAGC_NSS2IX1_1IX8(chain),
+ SM(R12A_TXAGC_NSS1_MCS8, power[RTWN_RIDX_VHT_MCS(0, 8)]) |
+ SM(R12A_TXAGC_NSS1_MCS9, power[RTWN_RIDX_VHT_MCS(0, 9)]) |
+ SM(R12A_TXAGC_NSS2_MCS0, power[RTWN_RIDX_VHT_MCS(1, 0)]) |
+ SM(R12A_TXAGC_NSS2_MCS1, power[RTWN_RIDX_VHT_MCS(1, 1)]));
+ }
+
+ /* 2SS MCS 2..5 */
+ if (sc->ntxchains > 1) {
+ rtwn_bb_write(sc, R12A_TXAGC_NSS2IX5_2IX2(chain),
+ SM(R12A_TXAGC_NSS2_MCS2, power[RTWN_RIDX_VHT_MCS(1, 2)]) |
+ SM(R12A_TXAGC_NSS2_MCS3, power[RTWN_RIDX_VHT_MCS(1, 3)]) |
+ SM(R12A_TXAGC_NSS2_MCS4, power[RTWN_RIDX_VHT_MCS(1, 4)]) |
+ SM(R12A_TXAGC_NSS2_MCS5, power[RTWN_RIDX_VHT_MCS(1, 5)]));
+ }
+
+ /* 2SS MCS 6..9 */
+ if (sc->ntxchains > 1) {
+ rtwn_bb_write(sc, R12A_TXAGC_NSS2IX9_2IX6(chain),
+ SM(R12A_TXAGC_NSS2_MCS2, power[RTWN_RIDX_VHT_MCS(1, 6)]) |
+ SM(R12A_TXAGC_NSS2_MCS3, power[RTWN_RIDX_VHT_MCS(1, 7)]) |
+ SM(R12A_TXAGC_NSS2_MCS4, power[RTWN_RIDX_VHT_MCS(1, 8)]) |
+ SM(R12A_TXAGC_NSS2_MCS5, power[RTWN_RIDX_VHT_MCS(1, 9)]));
+ }
+
+ /* TODO: 3SS, 4SS VHT rates */
+}
+
+
static void
r12a_write_txpower_cck(struct rtwn_softc *sc, int chain,
struct ieee80211_channel *c, uint8_t power[RTWN_RIDX_COUNT])
@@ -132,7 +188,7 @@
r12a_write_txpower_cck(sc, chain, c, power);
r12a_write_txpower_ofdm(sc, chain, c, power);
r12a_write_txpower_ht(sc, chain, c, power);
- /* TODO: VHT rates */
+ r12a_write_txpower_vht(sc, chain, c, power);
}
static int
diff --git a/sys/dev/rtwn/rtl8812a/r12a_reg.h b/sys/dev/rtwn/rtl8812a/r12a_reg.h
--- a/sys/dev/rtwn/rtl8812a/r12a_reg.h
+++ b/sys/dev/rtwn/rtl8812a/r12a_reg.h
@@ -230,6 +230,56 @@
#define R12A_TXAGC_MCS15_M 0xff000000
#define R12A_TXAGC_MCS15_S 24
+/* Bits for R12A_TXAGC_NSS1IX3_1IX0(i) */
+#define R12A_TXAGC_NSS1_MCS0_M 0x000000ff
+#define R12A_TXAGC_NSS1_MCS0_S 0
+#define R12A_TXAGC_NSS1_MCS1_M 0x0000ff00
+#define R12A_TXAGC_NSS1_MCS1_S 8
+#define R12A_TXAGC_NSS1_MCS2_M 0x00ff0000
+#define R12A_TXAGC_NSS1_MCS2_S 16
+#define R12A_TXAGC_NSS1_MCS3_M 0xff000000
+#define R12A_TXAGC_NSS1_MCS3_S 24
+
+/* Bits for R12A_TXAGC_NSS1IX7_1IX4(i) */
+#define R12A_TXAGC_NSS1_MCS4_M 0x000000ff
+#define R12A_TXAGC_NSS1_MCS4_S 0
+#define R12A_TXAGC_NSS1_MCS5_M 0x0000ff00
+#define R12A_TXAGC_NSS1_MCS5_S 8
+#define R12A_TXAGC_NSS1_MCS6_M 0x00ff0000
+#define R12A_TXAGC_NSS1_MCS6_S 16
+#define R12A_TXAGC_NSS1_MCS7_M 0xff000000
+#define R12A_TXAGC_NSS1_MCS7_S 24
+
+/* Bits for R12A_TXAGC_NSS2IX1_1IX8(i) */
+#define R12A_TXAGC_NSS1_MCS8_M 0x000000ff
+#define R12A_TXAGC_NSS1_MCS8_S 0
+#define R12A_TXAGC_NSS1_MCS9_M 0x0000ff00
+#define R12A_TXAGC_NSS1_MCS9_S 8
+#define R12A_TXAGC_NSS2_MCS0_M 0x00ff0000
+#define R12A_TXAGC_NSS2_MCS0_S 16
+#define R12A_TXAGC_NSS2_MCS1_M 0xff000000
+#define R12A_TXAGC_NSS2_MCS1_S 24
+
+/* Bits for R12A_TXAGC_NSS2IX5_2IX2(i) */
+#define R12A_TXAGC_NSS2_MCS2_M 0x000000ff
+#define R12A_TXAGC_NSS2_MCS2_S 0
+#define R12A_TXAGC_NSS2_MCS3_M 0x0000ff00
+#define R12A_TXAGC_NSS2_MCS3_S 8
+#define R12A_TXAGC_NSS2_MCS4_M 0x00ff0000
+#define R12A_TXAGC_NSS2_MCS4_S 16
+#define R12A_TXAGC_NSS2_MCS5_M 0xff000000
+#define R12A_TXAGC_NSS2_MCS5_S 24
+
+/* Bits for R12A_TXAGC_NSS2IX9_2IX6(i) */
+#define R12A_TXAGC_NSS2_MCS6_M 0x000000ff
+#define R12A_TXAGC_NSS2_MCS6_S 0
+#define R12A_TXAGC_NSS2_MCS7_M 0x0000ff00
+#define R12A_TXAGC_NSS2_MCS7_S 8
+#define R12A_TXAGC_NSS2_MCS8_M 0x00ff0000
+#define R12A_TXAGC_NSS2_MCS8_S 16
+#define R12A_TXAGC_NSS2_MCS9_M 0xff000000
+#define R12A_TXAGC_NSS2_MCS9_S 24
+
/*
* RF (6052) registers.
*/

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 1, 2:51 PM (5 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40020174
Default Alt Text
D47899.diff (4 KB)

Event Timeline