qcacld-3.0: fix bug on 2x2 DBS utility function

Fix the macros in wma_is_hw_dbs_2x2_capable to return the HW capability
correctly for DBS mode.

Change-Id: I592ccef901866aba54bda6c4a6f07215f1c437f7
CRs-Fixed: 1068000
Cette révision appartient à :
Tushnim Bhattacharyya
2017-01-13 16:23:34 -08:00
révisé par qcabuildsw
Parent dee5d4341d
révision db55e2c365

Voir le fichier

@@ -3871,12 +3871,11 @@ bool wma_is_p2p_lo_capable(void)
bool wma_is_hw_dbs_2x2_capable(void)
{
tp_wma_handle wma;
int i, j = 0, max_mac;
uint32_t ht_2g, ht_5g;
struct extended_caps *phy_caps;
WMI_MAC_PHY_CAPABILITIES *mac_cap;
uint32_t tx_chain, rx_chain, final_min_rf_chains = 2;
uint32_t min_rf_chains, min_2g_rf_chains, min_5g_rf_chains;
int i, param;
uint32_t dbs, tx_chain0, rx_chain0, tx_chain1, rx_chain1;
uint32_t final_min_rf_chains = 2;
uint32_t min_rf_chains, min_mac0_rf_chains, min_mac1_rf_chains;
bool is_dbs_found = false;
wma = cds_get_context(QDF_MODULE_ID_WMA);
if (!wma) {
@@ -3884,35 +3883,28 @@ bool wma_is_hw_dbs_2x2_capable(void)
return false;
}
phy_caps = &wma->phy_caps;
for (i = 0; i < phy_caps->num_hw_modes.num_hw_modes; i++) {
if (phy_caps->each_hw_mode_cap[i].phy_id_map == PHY1_PHY2)
max_mac = j + 2;
else
max_mac = j + 1;
for ( ; j < max_mac; j++) {
mac_cap = &phy_caps->each_phy_cap_per_hwmode[j];
ht_2g = mac_cap->ht_cap_info_2G;
ht_5g = mac_cap->ht_cap_info_5G;
if (ht_5g && ht_2g) {
tx_chain = mac_cap->tx_chain_mask_2G;
rx_chain = mac_cap->rx_chain_mask_2G;
min_2g_rf_chains = QDF_MIN(
wma_get_num_of_setbits_from_bitmask(tx_chain),
wma_get_num_of_setbits_from_bitmask(rx_chain));
tx_chain = mac_cap->tx_chain_mask_5G;
rx_chain = mac_cap->rx_chain_mask_5G;
min_5g_rf_chains = QDF_MIN(
wma_get_num_of_setbits_from_bitmask(tx_chain),
wma_get_num_of_setbits_from_bitmask(rx_chain));
min_rf_chains = QDF_MIN(min_2g_rf_chains,
min_5g_rf_chains);
} else {
continue;
}
final_min_rf_chains = QDF_MIN(final_min_rf_chains,
min_rf_chains);
for (i = 0; i < wma->num_dbs_hw_modes; i++) {
param = wma->hw_mode.hw_mode_list[i];
tx_chain0 = WMA_HW_MODE_MAC0_TX_STREAMS_GET(param);
rx_chain0 = WMA_HW_MODE_MAC0_RX_STREAMS_GET(param);
dbs = WMA_HW_MODE_DBS_MODE_GET(param);
tx_chain1 = WMA_HW_MODE_MAC1_TX_STREAMS_GET(param);
rx_chain1 = WMA_HW_MODE_MAC1_RX_STREAMS_GET(param);
if (dbs) {
min_mac0_rf_chains = QDF_MIN(tx_chain0, rx_chain0);
min_mac1_rf_chains = QDF_MIN(tx_chain1, rx_chain1);
min_rf_chains = QDF_MIN(min_mac0_rf_chains,
min_mac1_rf_chains);
is_dbs_found = true;
} else {
continue;
}
final_min_rf_chains = QDF_MIN(final_min_rf_chains,
min_rf_chains);
}
if (false == is_dbs_found)
final_min_rf_chains = 0;
return (final_min_rf_chains == 2) ? true : false;
}