Author: kevlo
Date: Fri Dec 30 03:08:46 2016
New Revision: 310804
URL: https://svnweb.freebsd.org/changeset/base/310804

Log:
  - Fix incorrect values in the computation of OFDM and MCS Tx power.
  - Make power a uint8_t rather than a uint16_t.
  - Replace the hardcoded RF chains.
  
  Reviewed by:  avos

Modified:
  head/sys/dev/rtwn/rtl8812a/r12a_chan.c

Modified: head/sys/dev/rtwn/rtl8812a/r12a_chan.c
==============================================================================
--- head/sys/dev/rtwn/rtl8812a/r12a_chan.c      Fri Dec 30 02:22:38 2016        
(r310803)
+++ head/sys/dev/rtwn/rtl8812a/r12a_chan.c      Fri Dec 30 03:08:46 2016        
(r310804)
@@ -64,7 +64,7 @@ __FBSDID("$FreeBSD$");
 
 static void
 r12a_write_txpower(struct rtwn_softc *sc, int chain,
-    struct ieee80211_channel *c, uint16_t power[RTWN_RIDX_COUNT])
+    struct ieee80211_channel *c, uint8_t power[RTWN_RIDX_COUNT])
 {
 
        if (IEEE80211_IS_CHAN_2GHZ(c)) {
@@ -163,7 +163,7 @@ r12a_get_power_group(struct rtwn_softc *
 
 static void
 r12a_get_txpower(struct rtwn_softc *sc, int chain,
-    struct ieee80211_channel *c, uint16_t power[RTWN_RIDX_COUNT])
+    struct ieee80211_channel *c, uint8_t power[RTWN_RIDX_COUNT])
 {
        struct r12a_softc *rs = sc->sc_priv;
        int i, ridx, group, max_mcs;
@@ -187,11 +187,8 @@ r12a_get_txpower(struct rtwn_softc *sc, 
                for (ridx = RTWN_RIDX_OFDM6; ridx <= max_mcs; ridx++)
                        power[ridx] = rs->ht40_tx_pwr_2g[chain][group];
 
-               if (RTWN_RATE_IS_OFDM(ridx)) {
-                       uint8_t pwr_diff = rs->ofdm_tx_pwr_diff_2g[chain][0];
-                       for (ridx = RTWN_RIDX_CCK1; ridx <= max_mcs; ridx++)
-                               power[ridx] += pwr_diff;
-               }
+               for (ridx = RTWN_RIDX_OFDM6; ridx <= RTWN_RIDX_OFDM54; ridx++)
+                       power[ridx] += rs->ofdm_tx_pwr_diff_2g[chain][0];
 
                for (i = 0; i < sc->ntxchains; i++) {
                        uint8_t min_mcs;
@@ -208,7 +205,7 @@ r12a_get_txpower(struct rtwn_softc *sc, 
                        else
                                pwr_diff = rs->bw20_tx_pwr_diff_2g[chain][i];
 
-                       min_mcs = RTWN_RIDX_MCS(i * 8 + 7);
+                       min_mcs = RTWN_RIDX_MCS(i * 8);
                        for (ridx = min_mcs; ridx <= max_mcs; ridx++)
                                power[ridx] += pwr_diff;
                }
@@ -216,6 +213,9 @@ r12a_get_txpower(struct rtwn_softc *sc, 
                for (ridx = RTWN_RIDX_OFDM6; ridx <= max_mcs; ridx++)
                        power[ridx] = rs->ht40_tx_pwr_5g[chain][group];
 
+               for (ridx = RTWN_RIDX_OFDM6; ridx <= RTWN_RIDX_OFDM54; ridx++)
+                       power[ridx] += rs->ofdm_tx_pwr_diff_5g[chain][0];
+
                for (i = 0; i < sc->ntxchains; i++) {
                        uint8_t min_mcs;
                        uint8_t pwr_diff;
@@ -231,7 +231,7 @@ r12a_get_txpower(struct rtwn_softc *sc, 
                        else
                                pwr_diff = rs->bw20_tx_pwr_diff_5g[chain][i];
 
-                       min_mcs = RTWN_RIDX_MCS(i * 8 + 7);
+                       min_mcs = RTWN_RIDX_MCS(i * 8);
                        for (ridx = min_mcs; ridx <= max_mcs; ridx++)
                                power[ridx] += pwr_diff;
                }
@@ -256,7 +256,7 @@ r12a_get_txpower(struct rtwn_softc *sc, 
 static void
 r12a_set_txpower(struct rtwn_softc *sc, struct ieee80211_channel *c)
 {
-       uint16_t power[RTWN_RIDX_COUNT];
+       uint8_t power[RTWN_RIDX_COUNT];
        int i;
 
        for (i = 0; i < sc->ntxchains; i++) {
@@ -463,7 +463,7 @@ r12a_set_chan(struct rtwn_softc *sc, str
        /* RTL8812AU-specific */
        rtwn_r12a_fix_spur(sc, c);
 
-       for (i = 0; i < 2; i++)
+       for (i = 0; i < sc->nrxchains; i++)
                rtwn_rf_setbits(sc, i, R92C_RF_CHNLBW, 0xc00, val);
 
        /* Set Tx power for this new channel. */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to