simplify STBC handling
[open-ath9k-htc-firmware.git] / target_firmware / wlan / ratectrl_11n_ln.c
index 5e123764c4f3f8194b8df1a768c78d7236b477dc..788822c487edab5475e504481a7e47fcd9641e6c 100755 (executable)
@@ -246,14 +246,14 @@ rcSibSetValidRates(const RATE_TABLE_11N *pRateTable,
        A_UINT8 i, j, hi = 0;
        A_UINT8 singleStream = (capflag & WLAN_RC_DS_FLAG) ? 0 : 1;
        A_UINT32 valid;
-       struct atheros_node *pSib = ATH_NODE_ATHEROS(an);
        
        /* Use intersection of working rates and valid rates */
        for (i = 0; i < pRateSet->rs_nrates; i++) {
                for (j = 0; j < pRateTable->rateCount; j++) {
                        A_UINT32 phy = pRateTable->info[j].phy;
-
 #ifdef MAGPIE_MERLIN
+                       struct atheros_node *pSib = ATH_NODE_ATHEROS(an);
+
                        if (pSib->stbc) {
                                valid = pRateTable->info[j].validSTBC;
                        } else if (singleStream) {
@@ -300,14 +300,14 @@ rcSibSetValidHtRates(const RATE_TABLE_11N *pRateTable,
        A_UINT8 i, j, hi = 0;
        A_UINT8 singleStream = (capflag & WLAN_RC_DS_FLAG) ? 0 : 1;
        A_UINT8 valid;
-       struct atheros_node *pSib = ATH_NODE_ATHEROS(an);
     
        /* Use intersection of working rates and valid rates */
        for (i = 0; i <  ((struct ieee80211_rateset *)pMcsSet)->rs_nrates; i++) {
                for (j = 0; j < pRateTable->rateCount; j++) {
                        A_UINT32 phy = pRateTable->info[j].phy;
-
 #ifdef MAGPIE_MERLIN
+                       struct atheros_node *pSib = ATH_NODE_ATHEROS(an);
+
                        if (pSib->stbc) {
                                valid = pRateTable->info[j].validSTBC;
                        } else if (singleStream) {
@@ -438,8 +438,7 @@ rcSibUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *pSib,
                       ((capflag & ATH_RC_DS_FLAG)   ? WLAN_RC_DS_FLAG  : 0) |
                       ((capflag & ATH_RC_HT40_SGI_FLAG)  ? WLAN_RC_HT40_SGI_FLAG : 0) | 
                       ((capflag & ATH_RC_HT_FLAG)   ? WLAN_RC_HT_FLAG  : 0) |
-                      ((capflag & ATH_RC_CW40_FLAG) ? WLAN_RC_40_FLAG  : 0) |
-                      ((capflag & ATH_RC_TX_STBC_FLAG)   ? WLAN_RC_STBC_FLAG  : 0), 
+                      ((capflag & ATH_RC_CW40_FLAG) ? WLAN_RC_40_FLAG  : 0),
                       keepState,
                       pRateSet);
 }
@@ -1161,7 +1160,7 @@ ath_rate_newstate(struct ath_softc_tgt *sc,
        struct atheros_softc *asc = (struct atheros_softc *) sc->sc_rc;
 
        asc->tx_chainmask = sc->sc_ic.ic_tx_chainmask;
-       ath_rate_newassoc(sc, ni, 1, capflag, rs);    
+       ath_rate_newassoc(sc, ATH_NODE_TARGET(ni), 1, capflag, rs);
 }
 
 static void
@@ -1220,18 +1219,8 @@ ath_rate_newassoc_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int
                        ((capflag & ATH_RC_WEP_TKIP_FLAG) ? WLAN_RC_WEP_TKIP_FLAG : 0);    
     
 #ifdef MAGPIE_MERLIN
-               /* Rx STBC is a 2-bit mask. Needs to convert from ath definition to wlan definition. */
-        
-               oan->htcap |= (((capflag & ATH_RC_RX_STBC_FLAG) >> ATH_RC_RX_STBC_FLAG_S)
-                              << WLAN_RC_STBC_FLAG_S);
-                       
-               /* If only one chain is enabled, do not do stbc. */
-               if (sc->sc_txstbcsupport) {
-                       oan->stbc = (capflag & ATH_RC_RX_STBC_FLAG) >> ATH_RC_RX_STBC_FLAG_S;
-               } else {
-                       oan->stbc = 0;
-               }
-        
+               /* Only MERLIN can send STBC */
+               oan->stbc = (capflag & ATH_RC_TX_STBC_FLAG) ? 1 : 0;
 #endif
                rcSibUpdate_11n(sc, an, oan->htcap, 0, rs);
        }