qcacld-3.0: Process get cu_req for 2 GHz band connection

Process GET_CU_FOR_EACH_SUB_BW request from the upper
layer in case DUT is connected with a channel width
of 40 MHz and the connected frequency is in the 2 GHz
band.

Change-Id: Idc748f83af72baed946340c61d5c6a0bba1baf00
CRs-Fixed: 3506871
This commit is contained in:
abhinav kumar
2023-05-29 17:47:57 +05:30
committed by Rahul Choudhary
parent e563cf7379
commit 966ceefe89
11 changed files with 158 additions and 46 deletions

View File

@@ -369,6 +369,16 @@ struct ft_context {
#endif #endif
}; };
/**
* struct connect_chan_info - store channel info at the time of association
* @ch_width_orig: channel width at the time of initial connection
* @sec_2g_freq: secondary 2 GHz freq
*/
struct connect_chan_info {
enum phy_ch_width ch_width_orig;
qdf_freq_t sec_2g_freq;
};
/** /**
* struct mlme_connect_info - mlme connect information * struct mlme_connect_info - mlme connect information
* @timing_meas_cap: Timing meas cap * @timing_meas_cap: Timing meas cap
@@ -388,7 +398,7 @@ struct ft_context {
* @ese_tspec_info: ese tspec info * @ese_tspec_info: ese tspec info
* @ext_cap_ie: Ext CAP IE * @ext_cap_ie: Ext CAP IE
* @assoc_btm_cap: BSS transition management cap used in (re)assoc req * @assoc_btm_cap: BSS transition management cap used in (re)assoc req
* @ch_width_orig: channel width at the time of initial connection * @chan_info_orig: store channel info at the time of association
*/ */
struct mlme_connect_info { struct mlme_connect_info {
uint8_t timing_meas_cap; uint8_t timing_meas_cap;
@@ -414,7 +424,7 @@ struct mlme_connect_info {
#endif #endif
uint8_t ext_cap_ie[DOT11F_IE_EXTCAP_MAX_LEN + 2]; uint8_t ext_cap_ie[DOT11F_IE_EXTCAP_MAX_LEN + 2];
bool assoc_btm_cap; bool assoc_btm_cap;
enum phy_ch_width ch_width_orig; struct connect_chan_info chan_info_orig;
}; };
/** struct wait_for_key_timer - wait for key timer object /** struct wait_for_key_timer - wait for key timer object
@@ -854,6 +864,15 @@ struct del_bss_resp {
*/ */
QDF_STATUS mlme_init_rate_config(struct vdev_mlme_obj *vdev_mlme); QDF_STATUS mlme_init_rate_config(struct vdev_mlme_obj *vdev_mlme);
/**
* mlme_init_connect_chan_info_config() - initialize channel info for a
* connection
* @vdev_mlme: pointer to vdev mlme object
*
* Return: Success or Failure status
*/
QDF_STATUS mlme_init_connect_chan_info_config(struct vdev_mlme_obj *vdev_mlme);
/** /**
* mlme_get_peer_mic_len() - get mic hdr len and mic length for peer * mlme_get_peer_mic_len() - get mic hdr len and mic length for peer
* @psoc: psoc * @psoc: psoc

View File

@@ -85,7 +85,7 @@ mlme_fill_freq_in_scan_start_request(struct wlan_objmgr_vdev *vdev,
enum phy_ch_width associated_ch_width; enum phy_ch_width associated_ch_width;
uint8_t i; uint8_t i;
struct chan_list *scan_chan_list; struct chan_list *scan_chan_list;
uint16_t first_freq, operation_chan_freq; qdf_freq_t first_freq, operation_chan_freq, sec_2g_freq;
char *chan_buff = NULL; char *chan_buff = NULL;
uint32_t buff_len, buff_num = 0, chan_count = 0; uint32_t buff_len, buff_num = 0, chan_count = 0;
@@ -94,7 +94,8 @@ mlme_fill_freq_in_scan_start_request(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
operation_chan_freq = wlan_get_operation_chan_freq(vdev); operation_chan_freq = wlan_get_operation_chan_freq(vdev);
associated_ch_width = mlme_priv->connect_info.ch_width_orig; associated_ch_width =
mlme_priv->connect_info.chan_info_orig.ch_width_orig;
if (associated_ch_width == CH_WIDTH_INVALID) { if (associated_ch_width == CH_WIDTH_INVALID) {
mlme_debug("vdev %d : Invalid associated ch width for freq %d", mlme_debug("vdev %d : Invalid associated ch width for freq %d",
req->scan_req.vdev_id, operation_chan_freq); req->scan_req.vdev_id, operation_chan_freq);
@@ -115,6 +116,30 @@ mlme_fill_freq_in_scan_start_request(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
if (wlan_reg_is_24ghz_ch_freq(operation_chan_freq) &&
associated_ch_width == CH_WIDTH_40MHZ) {
sec_2g_freq =
mlme_priv->connect_info.chan_info_orig.sec_2g_freq;
if (!sec_2g_freq) {
mlme_debug("vdev %d : Invalid sec 2g freq for freq: %d",
req->scan_req.vdev_id, operation_chan_freq);
return QDF_STATUS_E_FAILURE;
}
if (operation_chan_freq > sec_2g_freq) {
req->scan_req.chan_list.chan[0].freq = sec_2g_freq;
req->scan_req.chan_list.chan[1].freq =
operation_chan_freq;
} else {
req->scan_req.chan_list.chan[0].freq =
operation_chan_freq;
req->scan_req.chan_list.chan[1].freq = sec_2g_freq;
}
req->scan_req.chan_list.num_chan = 2;
return QDF_STATUS_SUCCESS;
}
range = wlan_reg_get_bonded_chan_entry(operation_chan_freq, range = wlan_reg_get_bonded_chan_entry(operation_chan_freq,
associated_ch_width, 0); associated_ch_width, 0);
if (!range) { if (!range) {
@@ -489,7 +514,8 @@ mlme_fill_freq_in_wide_scan_start_request(struct wlan_objmgr_vdev *vdev,
if (!mlme_priv) if (!mlme_priv)
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
associated_ch_width = mlme_priv->connect_info.ch_width_orig; associated_ch_width =
mlme_priv->connect_info.chan_info_orig.ch_width_orig;
if (associated_ch_width == CH_WIDTH_INVALID) { if (associated_ch_width == CH_WIDTH_INVALID) {
mlme_debug("vdev %d :Invalid associated ch_width", mlme_debug("vdev %d :Invalid associated ch_width",
req->scan_req.vdev_id); req->scan_req.vdev_id);
@@ -675,6 +701,22 @@ QDF_STATUS mlme_init_rate_config(struct vdev_mlme_obj *vdev_mlme)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS mlme_init_connect_chan_info_config(struct vdev_mlme_obj *vdev_mlme)
{
struct mlme_legacy_priv *mlme_priv;
mlme_priv = vdev_mlme->ext_vdev_ptr;
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return QDF_STATUS_E_FAILURE;
}
mlme_priv->connect_info.chan_info_orig.ch_width_orig = CH_WIDTH_INVALID;
mlme_priv->connect_info.chan_info_orig.sec_2g_freq = 0;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id, QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
uint8_t *peer_mac, uint8_t *mic_len, uint8_t *peer_mac, uint8_t *mic_len,
uint8_t *mic_hdr_len) uint8_t *mic_hdr_len)

View File

@@ -1401,6 +1401,7 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
mlme_init_rate_config(vdev_mlme); mlme_init_rate_config(vdev_mlme);
mlme_init_connect_chan_info_config(vdev_mlme);
mlme_cm_alloc_roam_stats_info(vdev_mlme); mlme_cm_alloc_roam_stats_info(vdev_mlme);
vdev_mlme->ext_vdev_ptr->connect_info.fils_con_info = NULL; vdev_mlme->ext_vdev_ptr->connect_info.fils_con_info = NULL;
mlme_init_wait_for_key_timer(vdev_mlme->vdev, mlme_init_wait_for_key_timer(vdev_mlme->vdev,

View File

@@ -6797,6 +6797,11 @@ wlan_mlme_send_ch_width_update_with_notify(struct wlan_objmgr_psoc *psoc,
QDF_STATUS status; QDF_STATUS status;
enum phy_ch_width associated_ch_width; enum phy_ch_width associated_ch_width;
struct wlan_channel *des_chan; struct wlan_channel *des_chan;
struct mlme_legacy_priv *mlme_priv;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv)
return QDF_STATUS_E_INVAL;
des_chan = wlan_vdev_mlme_get_des_chan(vdev); des_chan = wlan_vdev_mlme_get_des_chan(vdev);
if (!des_chan) if (!des_chan)
@@ -6808,8 +6813,10 @@ wlan_mlme_send_ch_width_update_with_notify(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_NOSUPPORT; return QDF_STATUS_E_NOSUPPORT;
} }
associated_ch_width = wlan_cm_get_associated_ch_width(psoc, vdev_id); associated_ch_width =
if (ch_width > associated_ch_width) { mlme_priv->connect_info.chan_info_orig.ch_width_orig;
if (associated_ch_width == CH_WIDTH_INVALID ||
ch_width > associated_ch_width) {
mlme_debug("vdev %d: Invalid new chwidth:%d, assoc ch_width:%d", mlme_debug("vdev %d: Invalid new chwidth:%d, assoc ch_width:%d",
vdev_id, ch_width, associated_ch_width); vdev_id, ch_width, associated_ch_width);
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;

View File

@@ -1028,7 +1028,7 @@ cm_fw_roam_sync_propagation(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
cm_connect_info(vdev, true, &connect_rsp->bssid, &connect_rsp->ssid, cm_connect_info(vdev, true, &connect_rsp->bssid, &connect_rsp->ssid,
connect_rsp->freq); connect_rsp->freq);
cm_update_associated_ch_width(vdev, true); cm_update_associated_ch_info(vdev, true);
status = cm_sm_deliver_event_sync(cm_ctx, WLAN_CM_SM_EV_ROAM_DONE, status = cm_sm_deliver_event_sync(cm_ctx, WLAN_CM_SM_EV_ROAM_DONE,
sizeof(*roam_synch_data), sizeof(*roam_synch_data),

View File

@@ -1679,7 +1679,7 @@ cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
vdev); vdev);
wlan_p2p_status_connect(vdev); wlan_p2p_status_connect(vdev);
cm_update_tid_mapping(vdev); cm_update_tid_mapping(vdev);
cm_update_associated_ch_width(vdev, true); cm_update_associated_ch_info(vdev, true);
} }
mlo_roam_connect_complete(vdev); mlo_roam_connect_complete(vdev);

View File

@@ -151,7 +151,7 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
#endif #endif
/** /**
* cm_update_associated_ch_width() - to save channel width in mlme priv obj at * cm_update_associated_ch_info() - to save channel info in mlme priv obj at
* the time of initial connection * the time of initial connection
* @vdev: Pointer to vdev * @vdev: Pointer to vdev
* @is_update: to distinguish whether update is during connection or * @is_update: to distinguish whether update is during connection or
@@ -159,8 +159,8 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
* *
* Return: none * Return: none
*/ */
void cm_update_associated_ch_width(struct wlan_objmgr_vdev *vdev, void
bool is_update); cm_update_associated_ch_info(struct wlan_objmgr_vdev *vdev, bool is_update);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD #ifdef WLAN_FEATURE_ROAM_OFFLOAD
#define wlan_is_roam_offload_enabled(lfr) \ #define wlan_is_roam_offload_enabled(lfr) \
@@ -727,14 +727,16 @@ static inline QDF_STATUS wlan_cm_host_roam_start(struct scheduler_msg *msg)
#endif #endif
/** /**
* wlan_cm_get_associated_ch_width() - get associated channel width * wlan_cm_get_associated_ch_info() - get associated channel info
* @psoc: psoc pointer * @psoc: psoc pointer
* @vdev_id: vdev id * @vdev_id: vdev id
* @chan_info: channel info to get
* *
* Return: enum phy_ch_width * Return: none
*/ */
enum phy_ch_width void wlan_cm_get_associated_ch_info(struct wlan_objmgr_psoc *psoc,
wlan_cm_get_associated_ch_width(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id); uint8_t vdev_id,
struct connect_chan_info *chan_info);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD #ifdef WLAN_FEATURE_ROAM_OFFLOAD
/** /**

View File

@@ -123,10 +123,11 @@ ucfg_cm_update_session_assoc_ie(struct wlan_objmgr_psoc *psoc,
cm_update_session_assoc_ie(psoc, vdev_id, assoc_ie); cm_update_session_assoc_ie(psoc, vdev_id, assoc_ie);
} }
static inline enum phy_ch_width static inline void
ucfg_cm_get_associated_ch_width(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) ucfg_cm_get_associated_ch_info(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct connect_chan_info *chan_info)
{ {
return wlan_cm_get_associated_ch_width(psoc, vdev_id); wlan_cm_get_associated_ch_info(psoc, vdev_id, chan_info);
} }
#ifdef WLAN_FEATURE_ROAM_OFFLOAD #ifdef WLAN_FEATURE_ROAM_OFFLOAD

View File

@@ -128,29 +128,41 @@ wlan_roam_update_cfg(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
#endif #endif
void cm_update_associated_ch_width(struct wlan_objmgr_vdev *vdev, void
bool is_update) cm_update_associated_ch_info(struct wlan_objmgr_vdev *vdev, bool is_update)
{ {
struct mlme_legacy_priv *mlme_priv; struct mlme_legacy_priv *mlme_priv;
struct wlan_channel *des_chan; struct wlan_channel *des_chan;
struct connect_chan_info *chan_info_orig;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) if (!mlme_priv)
return; return;
chan_info_orig = &mlme_priv->connect_info.chan_info_orig;
if (!is_update) { if (!is_update) {
mlme_priv->connect_info.ch_width_orig = CH_WIDTH_INVALID; chan_info_orig->ch_width_orig = CH_WIDTH_INVALID;
goto print; return;
} }
des_chan = wlan_vdev_mlme_get_des_chan(vdev); des_chan = wlan_vdev_mlme_get_des_chan(vdev);
if (!des_chan) if (!des_chan)
return; return;
mlme_priv->connect_info.ch_width_orig = des_chan->ch_width; chan_info_orig->ch_width_orig = des_chan->ch_width;
print: if (WLAN_REG_IS_24GHZ_CH_FREQ(des_chan->ch_freq) &&
mlme_debug("update associated ch width :%d, is_update:%d", des_chan->ch_width == CH_WIDTH_40MHZ) {
mlme_priv->connect_info.ch_width_orig, is_update); if (des_chan->ch_cfreq1 == des_chan->ch_freq + BW_10_MHZ)
chan_info_orig->sec_2g_freq =
des_chan->ch_freq + BW_20_MHZ;
if (des_chan->ch_cfreq1 == des_chan->ch_freq - BW_10_MHZ)
chan_info_orig->sec_2g_freq =
des_chan->ch_freq - BW_20_MHZ;
}
mlme_debug("ch width :%d, ch_freq:%d, ch_cfreq1:%d, sec_2g_freq:%d",
chan_info_orig->ch_width_orig, des_chan->ch_freq,
des_chan->ch_cfreq1, chan_info_orig->sec_2g_freq);
} }
char *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor) char *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor)
@@ -2118,31 +2130,37 @@ QDF_STATUS wlan_cm_update_fils_ft(struct wlan_objmgr_psoc *psoc,
} }
#endif #endif
enum phy_ch_width void wlan_cm_get_associated_ch_info(struct wlan_objmgr_psoc *psoc,
wlan_cm_get_associated_ch_width(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) uint8_t vdev_id,
struct connect_chan_info *chan_info)
{ {
struct wlan_objmgr_vdev *vdev; struct wlan_objmgr_vdev *vdev;
struct mlme_legacy_priv *mlme_priv; struct mlme_legacy_priv *mlme_priv;
enum phy_ch_width ch_width = CH_WIDTH_INVALID;
chan_info->ch_width_orig = CH_WIDTH_INVALID;
chan_info->sec_2g_freq = 0;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID); WLAN_MLME_NB_ID);
if (!vdev) { if (!vdev) {
mlme_err("vdev%d: vdev object is NULL", vdev_id); mlme_err("vdev%d: vdev object is NULL", vdev_id);
goto ret; return;
} }
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) if (!mlme_priv)
goto release; goto release;
ch_width = mlme_priv->connect_info.ch_width_orig; chan_info->ch_width_orig =
mlme_debug("vdev %d: associated_ch_width:%d", vdev_id, ch_width); mlme_priv->connect_info.chan_info_orig.ch_width_orig;
chan_info->sec_2g_freq =
mlme_priv->connect_info.chan_info_orig.sec_2g_freq;
mlme_debug("vdev %d: associated_ch_width:%d, sec_2g_freq:%d", vdev_id,
chan_info->ch_width_orig, chan_info->sec_2g_freq);
release: release:
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
ret:
return ch_width;
} }
#ifdef WLAN_FEATURE_ROAM_OFFLOAD #ifdef WLAN_FEATURE_ROAM_OFFLOAD

View File

@@ -26033,25 +26033,44 @@ static void wlan_hdd_fill_subband_scan_info(struct hdd_context *hdd_ctx,
uint8_t idx, info_index, freq_info_num; uint8_t idx, info_index, freq_info_num;
enum phy_ch_width ch_width; enum phy_ch_width ch_width;
const struct bonded_channel_freq *range = NULL; const struct bonded_channel_freq *range = NULL;
uint32_t start_freq, end_freq; qdf_freq_t start_freq, end_freq, sec_2g_freq;
uint8_t vdev_id = info->subband_info.vdev_id;
struct connect_chan_info chan_info_orig;
ch_width = ucfg_cm_get_associated_ch_width(hdd_ctx->psoc, ucfg_cm_get_associated_ch_info(hdd_ctx->psoc, vdev_id, &chan_info_orig);
info->subband_info.vdev_id); ch_width = chan_info_orig.ch_width_orig;
if (ch_width == CH_WIDTH_INVALID) { if (ch_width == CH_WIDTH_INVALID) {
hdd_debug("vdev %d: Invalid ch width", hdd_debug("vdev %d: Invalid ch width", vdev_id);
info->subband_info.vdev_id);
return; return;
} }
if (ch_width == CH_WIDTH_20MHZ) { if (ch_width == CH_WIDTH_20MHZ) {
start_freq = info->freq; start_freq = info->freq;
end_freq = info->freq; end_freq = info->freq;
} else if (wlan_reg_is_24ghz_ch_freq(info->freq) &&
ch_width == CH_WIDTH_40MHZ) {
sec_2g_freq = chan_info_orig.sec_2g_freq;
if (!sec_2g_freq) {
mlme_debug("vdev %d : Invalid sec 2g freq for freq:%d",
info->subband_info.vdev_id, info->freq);
return;
}
hdd_debug("vdev %d :assoc freq %d sec_2g_freq:%d, bw %d",
info->subband_info.vdev_id, info->freq,
sec_2g_freq, ch_width);
if (info->freq > sec_2g_freq) {
start_freq = sec_2g_freq;
end_freq = info->freq;
} else {
start_freq = info->freq;
end_freq = sec_2g_freq;
}
} else { } else {
range = wlan_reg_get_bonded_chan_entry(info->freq, ch_width, 0); range = wlan_reg_get_bonded_chan_entry(info->freq, ch_width, 0);
if (!range) { if (!range) {
hdd_err("vdev %d: bonded_chan_array is NULL for freq %d, ch_width %d", hdd_err("vdev %d: bonded_chan_array is NULL for freq %d, ch_width %d",
info->subband_info.vdev_id, info->freq, vdev_id, info->freq, ch_width);
ch_width);
return; return;
} }
start_freq = range->start_freq; start_freq = range->start_freq;
@@ -26062,7 +26081,7 @@ static void wlan_hdd_fill_subband_scan_info(struct hdd_context *hdd_ctx,
info_index = 0; info_index = 0;
hdd_debug("vdev %d: freq :%d bw %d, range [%d-%d], num_freq:%d", hdd_debug("vdev %d: freq :%d bw %d, range [%d-%d], num_freq:%d",
info->subband_info.vdev_id, info->freq, ch_width, start_freq, vdev_id, info->freq, ch_width, start_freq,
end_freq, freq_info_num); end_freq, freq_info_num);
for (idx = 0; idx < NUM_CHANNELS; idx++) { for (idx = 0; idx < NUM_CHANNELS; idx++) {

View File

@@ -495,11 +495,13 @@ static inline enum eSirMacHTChannelWidth get_max_bw(void)
static void hdd_cm_restore_ch_width(struct wlan_objmgr_vdev *vdev, static void hdd_cm_restore_ch_width(struct wlan_objmgr_vdev *vdev,
struct hdd_adapter *adapter) struct hdd_adapter *adapter)
{ {
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
struct mlme_legacy_priv *mlme_priv; struct mlme_legacy_priv *mlme_priv;
enum eSirMacHTChannelWidth max_bw; enum eSirMacHTChannelWidth max_bw;
struct wlan_channel *des_chan; struct wlan_channel *des_chan;
int ret; int ret;
uint8_t vdev_id = wlan_vdev_get_id(vdev); uint8_t vdev_id = wlan_vdev_get_id(vdev);
enum phy_ch_width ch_width_orig;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) if (!mlme_priv)
@@ -509,11 +511,12 @@ static void hdd_cm_restore_ch_width(struct wlan_objmgr_vdev *vdev,
if (!des_chan) if (!des_chan)
return; return;
if (mlme_priv->connect_info.ch_width_orig == CH_WIDTH_INVALID || ch_width_orig = mlme_priv->connect_info.chan_info_orig.ch_width_orig;
mlme_priv->connect_info.ch_width_orig == des_chan->ch_width) if (!ucfg_mlme_is_chwidth_with_notify_supported(hdd_ctx->psoc) ||
ch_width_orig == CH_WIDTH_INVALID)
return; return;
cm_update_associated_ch_width(vdev, false); cm_update_associated_ch_info(vdev, false);
max_bw = get_max_bw(); max_bw = get_max_bw();
ret = hdd_set_mac_chan_width(adapter, max_bw); ret = hdd_set_mac_chan_width(adapter, max_bw);