qcacld-3.0: Igonre HT BW change if channel switch is in progress

If channel switch is in progress and if the HT IE received in
beacon has the BW change then do not send the bandwidth update
request to FW. After the channel switch response is received and
beacon has different BW bandwidth a new BW update request will
be sent to FW.

Change-Id: Id41bd0523f821d2b81e132318230492fda79f32a
CRs-Fixed: 2068906
Bu işleme şunda yer alıyor:
Kiran Kumar Lokere
2017-06-28 18:10:58 -07:00
işlemeyi yapan: snandini
ebeveyn 8251886f0c
işleme f9dc79123c
8 değiştirilmiş dosya ile 25 ekleme ve 0 silme

Dosyayı Görüntüle

@@ -516,6 +516,7 @@ typedef struct sPESession /* Added to Support BT-AMP */
#endif
bool enable_bcast_probe_rsp;
uint8_t ht_client_cnt;
bool ch_switch_in_progress;
} tPESession, *tpPESession;
/*-------------------------------------------------------------------------

Dosyayı Görüntüle

@@ -3097,6 +3097,7 @@ void lim_process_switch_channel_rsp(tpAniSirGlobal pMac, void *body)
pe_err("session does not exist for given sessionId");
return;
}
psessionEntry->ch_switch_in_progress = false;
/* HAL fills in the tx power used for mgmt frames in this field. */
/* Store this value to use in TPC report IE. */
rrm_cache_mgmt_tx_power(pMac, pChnlParams->txMgmtPower, psessionEntry);

Dosyayı Görüntüle

@@ -288,6 +288,7 @@ tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac,
pe_err("Posting CH_SWITCH_REQ to WMA failed");
return eSIR_FAILURE;
}
pSessionEntry->ch_switch_in_progress = true;
return eSIR_SUCCESS;
}

Dosyayı Görüntüle

@@ -4333,6 +4333,11 @@ void lim_update_sta_run_time_ht_switch_chnl_params(tpAniSirGlobal pMac,
return;
}
if (psessionEntry->ch_switch_in_progress == true) {
pe_debug("ch switch is in progress, ignore HT IE BW update");
return;
}
if (!pHTInfo->primaryChannel) {
pe_debug("Ignore as primary channel is 0 in HT info");
return;

Dosyayı Görüntüle

@@ -1084,6 +1084,8 @@ struct wma_txrx_node {
uint32_t he_ops;
#endif
bool in_bmps;
struct beacon_filter_param beacon_filter;
bool beacon_filter_enabled;
};
#if defined(QCA_WIFI_FTM)

Dosyayı Görüntüle

@@ -1099,6 +1099,9 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info,
} else {
wma_vdev_set_mlme_state(wma,
resp_event->vdev_id, WLAN_VDEV_S_RUN);
if (iface->beacon_filter_enabled)
wma_add_beacon_filter(wma,
&iface->beacon_filter);
}
}

Dosyayı Görüntüle

@@ -842,7 +842,9 @@ QDF_STATUS wma_add_beacon_filter(WMA_HANDLE handle,
u_int8_t *buf;
A_UINT32 *ie_map;
int ret;
struct wma_txrx_node *iface;
tp_wma_handle wma = (tp_wma_handle) handle;
wmi_add_bcn_filter_cmd_fixed_param *cmd;
int len = sizeof(wmi_add_bcn_filter_cmd_fixed_param);
@@ -855,6 +857,11 @@ QDF_STATUS wma_add_beacon_filter(WMA_HANDLE handle,
return QDF_STATUS_E_INVAL;
}
iface = &wma->interfaces[filter_params->vdev_id];
qdf_mem_copy(&iface->beacon_filter, filter_params,
sizeof(struct beacon_filter_param));
iface->beacon_filter_enabled = true;
wmi_buf = wmi_buf_alloc(wma->wmi_handle, len);
if (!wmi_buf) {
WMA_LOGE("%s: wmi_buf_alloc failed", __func__);

Dosyayı Görüntüle

@@ -3026,6 +3026,11 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
(params->restart_on_chan_switch == true))
wma->interfaces[req.vdev_id].is_channel_switch = true;
if (params->restart_on_chan_switch == true &&
wma->interfaces[req.vdev_id].beacon_filter_enabled)
wma_remove_beacon_filter(wma,
&wma->interfaces[req.vdev_id].beacon_filter);
if (QDF_GLOBAL_MONITOR_MODE == cds_get_conparam() &&
wma_is_vdev_up(vdev_id)) {
status = wma_switch_channel(wma, &req);