return pCap->halBssIdMaskSupport ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_VEOL:
return pCap->halVEOLSupport ? HAL_OK : HAL_ENOTSUPP;
-#ifdef MAGPIE_MERLIN
- case HAL_CAP_RX_STBC:
- return HAL_ENOTSUPP;
- case HAL_CAP_TX_STBC:
- return HAL_ENOTSUPP;
-#endif
default:
return HAL_EINVAL;
}
HAL_CAP_VEOL = 0,
HAL_CAP_BSSIDMASK = 1,
HAL_CAP_TSF_ADJUST = 2,
- HAL_CAP_RX_STBC = 3,
- HAL_CAP_TX_STBC = 4,
HAL_CAP_HT = 5,
HAL_CAP_RTS_AGGR_LIMIT = 6,
} HAL_CAPABILITY_TYPE;
halChanHalfRate : 1,
halChanQuarterRate : 1,
halHTSupport : 1,
- halRxStbcSupport : 1,
- halTxStbcSupport : 1,
halGTTSupport : 1,
halFastCCSupport : 1,
halExtChanDfsSupport : 1,
a_uint32_t capability, a_uint32_t *result)
{
- HAL_CAPABILITIES *pCap = &AH_PRIVATE(ah)->ah_caps;
-#ifndef MAGPIE_MERLIN // K2
- pCap->halRxStbcSupport = 1; /* K2 supports STBC Rx only */
- pCap->halTxStbcSupport = 0;
-#else
- pCap->halRxStbcSupport = 1; /* number of streams for STBC recieve. */
- pCap->halTxStbcSupport = 1;
-#endif
-
- switch (type) {
-#ifdef MAGPIE_MERLIN
- case HAL_CAP_RX_STBC:
- {
- *result = pCap->halRxStbcSupport;
- return HAL_OK;
- }
- case HAL_CAP_TX_STBC:
- {
- *result = pCap->halTxStbcSupport;
- return HAL_OK;
- }
-#endif
- default:
- return ath_hal_getcapability(ah, type, capability, result);
- }
+ return ath_hal_getcapability(ah, type, capability, result);
}
/****************/
if (ath_hal_htsupported(ah))
sc->sc_imask |= HAL_INT_CST;
-#ifdef MAGPIE_MERLIN
- {
- a_uint32_t stbcsupport;
- if (ath_hal_txstbcsupport(ah, &stbcsupport))
- sc->sc_txstbcsupport = stbcsupport;
-
- if (ath_hal_rxstbcsupport(ah, &stbcsupport))
- sc->sc_rxstbcsupport = stbcsupport;
- }
-#endif
adf_os_setup_intr(sc->sc_dev, ath_intr);
ath_hal_intrset(ah, sc->sc_imask);
struct ath_ratectrl *sc_rc;
a_uint32_t sc_invalid : 1,
- sc_txstbcsupport : 1,
- sc_rxstbcsupport : 2,
sc_tx_draining : 1,
sc_enable_coex : 1;
((*(_ah)->ah_stopPcuReceive)((_ah)))
#define ath_hal_htsupported(_ah) \
(ath_hal_getcapability(_ah, HAL_CAP_HT, 0, NULL) == HAL_OK)
-#define ath_hal_rxstbcsupport(_ah, _rxstbc) \
- (ath_hal_getcapability(_ah, HAL_CAP_RX_STBC, 0, _rxstbc) == HAL_OK)
-#define ath_hal_txstbcsupport(_ah, _txstbc) \
- (ath_hal_getcapability(_ah, HAL_CAP_TX_STBC, 0, _txstbc) == HAL_OK)
#define ath_hal_getrtsaggrlimit(_ah, _pv) \
(ath_hal_getcapability(_ah, HAL_CAP_RTS_AGGR_LIMIT, 0, _pv) == HAL_OK)
#define ath_hal_puttxbuf(_ah, _q, _bufaddr) \
struct atheros_node {
TX_RATE_CTRL txRateCtrl; /* rate control state proper */
A_UINT32 lastRateKbps; /* last rate in Kb/s */
- A_UINT32 htcap; /* ht capabilites */
A_UINT8 singleStream :1, /* When TRUE, only single stream Tx possible */
stbc :2; /* Rx stbc capability */
rc11n_info_t info[];
} RATE_TABLE_11N;
-/*
- * Update the SIB's rate control information
- *
- * This should be called when the supported rates change
- * (e.g. SME operation, wireless mode change)
- *
- * It will determine which rates are valid for use.
- */
-void rcSibUpdate_11n(struct ath_softc_tgt *,
- struct ath_node_target *,
- A_UINT32 capflag,
- A_BOOL keepState,
- struct ieee80211_rate *rs);
-
/*
* Determines and returns the new Tx rate index.
*/
rcSortValidRates(pRateTable, pRc);
}
-void
-rcSibUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *pSib,
- A_UINT32 capflag, A_BOOL keepState, struct ieee80211_rate *pRateSet)
-{
- rcSibUpdate_ht(sc,
- 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),
- keepState,
- pRateSet);
-}
+
/*
* Return the median of three numbers
unsigned int capflag, struct ieee80211_rate *rs)
{
if (isnew) {
- struct atheros_node *oan = ATH_NODE_ATHEROS(an);
-
- oan->htcap = ((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_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;
- }
-
+ struct atheros_node *oan = ATH_NODE_ATHEROS(an);
+ /* Only MERLIN can send STBC */
+ oan->stbc = (capflag & ATH_RC_TX_STBC_FLAG) ? 1 : 0;
#endif
- rcSibUpdate_11n(sc, an, oan->htcap, 0, rs);
+ rcSibUpdate_ht(sc, an, capflag, 0, rs);
}
}