qcacld-3.0: Process update ch_width request as per omn ie
AP sends "Operating Mode Notification" IE having max supported channel width (say ap operating bw) via beacon/probe response/ association/re-association response frame. When datapath detect leaky AP, to enable/disable, userspace sends ch_width update to host. Step 1. If STA founds OMN IE present in above frame, host sends update channel width (say new AP operating BW is 80 MHz) ind via WMI_PEER_SET_PARAM_CMDID with param id 4 (WMI_HOST_PEER_CHWIDTH). Step 2: After ch_width update to 80 MHz in FW at step 1, if host receives a update ch_width (to 160 MHz) request from userspace on leaky AP detection disable. Host updates its internal channel info structure with new BW and sends update indication to FW via WMI_VDEV_SET_PARAM_CMDID with param id WMI_VDEV_PARAM_CHWIDTH_WITH_NOTIFY. In case, if host allows ch_width update greater than ch_width present in OMN IE (ap operating bw), FW only disable leaky detection but did not update Rx/Tx BW as per new ch_width as ap operating bw is still 80 MHz (configured at step 1). This leads to out of sync for value of ch_width in host and FW and IOT issues. To keep host and FW in sync with current AP's operating BW, add a sanity check and reject request before updating internal channel info structure in host if new ch_width (coming from user space) is greater than ap operating bw present OMN IE. Change-Id: Iedc1706e32b9e08512ca6c9b98162902cd32f976 CRs-Fixed: 3732557
This commit is contained in:

committed by
Ravindra Konda

parent
6da4ac706f
commit
36b79ad01e
@@ -7852,7 +7852,7 @@ wlan_mlme_send_ch_width_update_with_notify(struct wlan_objmgr_psoc *psoc,
|
||||
{
|
||||
QDF_STATUS status;
|
||||
wmi_host_channel_width wmi_chan_width;
|
||||
enum phy_ch_width associated_ch_width;
|
||||
enum phy_ch_width associated_ch_width, omn_ie_ch_width;
|
||||
struct wlan_channel *des_chan;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
qdf_freq_t sec_2g_freq = 0;
|
||||
@@ -7865,6 +7865,14 @@ wlan_mlme_send_ch_width_update_with_notify(struct wlan_objmgr_psoc *psoc,
|
||||
if (!des_chan)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
omn_ie_ch_width =
|
||||
mlme_priv->connect_info.assoc_chan_info.omn_ie_ch_width;
|
||||
if (omn_ie_ch_width != CH_WIDTH_INVALID && ch_width > omn_ie_ch_width) {
|
||||
mlme_debug("vdev %d: Invalid new chwidth:%d, omn_ie_cw:%d",
|
||||
vdev_id, ch_width, omn_ie_ch_width);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
associated_ch_width =
|
||||
mlme_priv->connect_info.assoc_chan_info.assoc_ch_width;
|
||||
if (associated_ch_width == CH_WIDTH_INVALID ||
|
||||
|
Reference in New Issue
Block a user