mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-11-10 12:52:37 -05:00
qcacld-3.0: Associate in 1x1 when connected to a certain Vendor AP
When connected to a certain Vendor AP that cannot handle SMPS frame, only connect in 1x1. Change-Id: Ieae25191df8340a582e81dc716b9a1aee6a71921 CRs-Fixed: 2047347
This commit is contained in:
parent
b2fc41317f
commit
42dade0dd8
4 changed files with 54 additions and 3 deletions
|
|
@ -9281,6 +9281,10 @@ int hdd_wlan_startup(struct device *dev)
|
|||
set_value, PDEV_CMD);
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->is_force_1x1)
|
||||
wma_cli_set_command(0, (int)WMI_PDEV_PARAM_SET_IOT_PATTERN,
|
||||
1, PDEV_CMD);
|
||||
|
||||
qdf_mc_timer_start(&hdd_ctx->iface_change_timer,
|
||||
hdd_ctx->config->iface_change_wait_time * 5000);
|
||||
|
||||
|
|
|
|||
|
|
@ -617,6 +617,8 @@
|
|||
#define BA_INITIATOR 2
|
||||
#define BA_BOTH_DIRECTIONS 3
|
||||
|
||||
#define SIR_MAC_VENDOR_AP_1_OUI "\x00\x0C\x43"
|
||||
#define SIR_MAC_VENDOR_AP_1_OUI_LEN 3
|
||||
/* / Status Code (present in Management response frames) enum */
|
||||
|
||||
typedef enum eSirMacStatusCodes {
|
||||
|
|
|
|||
|
|
@ -88,6 +88,39 @@ static void get_local_power_constraint_probe_response(
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* lim_get_nss_supported_by_beacon() - finds out nss from beacom
|
||||
* @bcn: beacon structure pointer
|
||||
* @session: pointer to pe session
|
||||
*
|
||||
* Return: number of nss advertised by beacon
|
||||
*/
|
||||
static uint8_t lim_get_nss_supported_by_beacon(tpSchBeaconStruct bcn,
|
||||
tpPESession session)
|
||||
{
|
||||
if (session->vhtCapability && bcn->VHTCaps.present) {
|
||||
if ((bcn->VHTCaps.rxMCSMap & 0xC0) != 0xC0)
|
||||
return 4;
|
||||
|
||||
if ((bcn->VHTCaps.rxMCSMap & 0x30) != 0x30)
|
||||
return 3;
|
||||
|
||||
if ((bcn->VHTCaps.rxMCSMap & 0x0C) != 0x0C)
|
||||
return 2;
|
||||
} else if (session->htCapability && bcn->HTCaps.present) {
|
||||
if (bcn->HTCaps.supportedMCSSet[3])
|
||||
return 4;
|
||||
|
||||
if (bcn->HTCaps.supportedMCSSet[2])
|
||||
return 3;
|
||||
|
||||
if (bcn->HTCaps.supportedMCSSet[1])
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_extract_ap_capability() - extract AP's HCF/WME/WSM capability
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
|
|
@ -138,6 +171,18 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
|
|||
qdf_mem_free(beacon_struct);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mac_ctx->roam.configParam.is_force_1x1 &&
|
||||
cfg_get_vendor_ie_ptr_from_oui(mac_ctx, SIR_MAC_VENDOR_AP_1_OUI,
|
||||
SIR_MAC_VENDOR_AP_1_OUI_LEN, p_ie, ie_len) &&
|
||||
lim_get_nss_supported_by_beacon(beacon_struct, session) == 2) {
|
||||
session->supported_nss_1x1 = true;
|
||||
session->vdev_nss = 1;
|
||||
session->nss = 1;
|
||||
pe_debug("For special ap, NSS: %d", session->nss);
|
||||
}
|
||||
|
||||
|
||||
if (beacon_struct->wmeInfoPresent ||
|
||||
beacon_struct->wmeEdcaPresent ||
|
||||
beacon_struct->HTCaps.present)
|
||||
|
|
|
|||
|
|
@ -3157,7 +3157,7 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss)
|
|||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
WMA_LOGE("policy_mgr_get_current_hw_mode failed");
|
||||
|
||||
if ((add_bss->nss == 2) && !hw_mode.dbs_cap) {
|
||||
if (add_bss->nss == 2) {
|
||||
req.preferred_rx_streams = 2;
|
||||
req.preferred_tx_streams = 2;
|
||||
} else {
|
||||
|
|
@ -3306,7 +3306,7 @@ static void wma_add_bss_ibss_mode(tp_wma_handle wma, tpAddBssParams add_bss)
|
|||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
WMA_LOGE("policy_mgr_get_current_hw_mode failed");
|
||||
|
||||
if ((add_bss->nss == 2) && !hw_mode.dbs_cap) {
|
||||
if (add_bss->nss == 2) {
|
||||
req.preferred_rx_streams = 2;
|
||||
req.preferred_tx_streams = 2;
|
||||
} else {
|
||||
|
|
@ -3491,7 +3491,7 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss)
|
|||
if (!QDF_IS_STATUS_SUCCESS(status))
|
||||
WMA_LOGE("policy_mgr_get_current_hw_mode failed");
|
||||
|
||||
if ((add_bss->nss == 2) && !hw_mode.dbs_cap) {
|
||||
if (add_bss->nss == 2) {
|
||||
req.preferred_rx_streams = 2;
|
||||
req.preferred_tx_streams = 2;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue