qcacld-3.0: Reject GET_CU_FOR_EACH_SUB_BW request for MLO conn

As per requirement, for MLO connection host should reject
GET_CU_FOR_EACH_SUB_BW request and return failure to upper
layer as a response.

Change-Id: I8177d92982c832a17c1657239b69cc3712e1eaf4
CRs-Fixed: 3476349
This commit is contained in:
Abhinav Kumar
2023-04-23 22:25:14 -07:00
committed by Madan Koyyalamudi
parent fbcbaaf178
commit 042a37976b
5 changed files with 30 additions and 21 deletions

View File

@@ -929,9 +929,9 @@ uint32_t mlme_get_vdev_he_ops(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
* @psoc: pointer to psoc object * @psoc: pointer to psoc object
* @vdev_id: Vdev id * @vdev_id: Vdev id
* *
* Return: none * Return: QDF_STATUS
*/ */
void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc, QDF_STATUS mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id); uint8_t vdev_id);
/** /**

View File

@@ -245,7 +245,7 @@ mlme_fill_freq_in_wide_scan_start_request(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc, QDF_STATUS mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id) uint8_t vdev_id)
{ {
struct wlan_mlme_psoc_ext_obj *mlme_obj; struct wlan_mlme_psoc_ext_obj *mlme_obj;
@@ -256,20 +256,27 @@ void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
mlme_obj = mlme_get_psoc_ext_obj(psoc); mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj) { if (!mlme_obj) {
mlme_debug("vdev %d : NULL mlme psoc object", vdev_id); mlme_debug("vdev %d : NULL mlme psoc object", vdev_id);
return; return QDF_STATUS_E_FAILURE;
} }
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_debug("vdev %d : NULL vdev object", vdev_id); mlme_debug("vdev %d : NULL vdev object", vdev_id);
return; return QDF_STATUS_E_FAILURE;
}
if (wlan_vdev_mlme_is_mlo_vdev(vdev)) {
mlme_debug("vdev %d :reject get_cu req for mlo connection",
vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_NOSUPPORT;
} }
req = qdf_mem_malloc(sizeof(*req)); req = qdf_mem_malloc(sizeof(*req));
if (!req) { if (!req) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return; return QDF_STATUS_E_NOMEM;
} }
status = wlan_scan_init_default_params(vdev, req); status = wlan_scan_init_default_params(vdev, req);
@@ -311,10 +318,11 @@ void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
} }
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return; return status;
release: release:
qdf_mem_free(req); qdf_mem_free(req);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
} }
uint32_t mlme_get_vdev_he_ops(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) uint32_t mlme_get_vdev_he_ops(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)

View File

@@ -4619,9 +4619,9 @@ ucfg_mlme_is_chwidth_with_notify_supported(struct wlan_objmgr_psoc *psoc);
* @psoc: pointer to psoc object * @psoc: pointer to psoc object
* @vdev_id: Vdev id * @vdev_id: Vdev id
* *
* Return: none * Return: QDF_STATUS
*/ */
void ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc, QDF_STATUS ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id); uint8_t vdev_id);
/** /**

View File

@@ -367,10 +367,10 @@ ucfg_mlme_set_vdev_traffic_type(struct wlan_objmgr_psoc *psoc,
return status; return status;
} }
void ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc, QDF_STATUS ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id) uint8_t vdev_id)
{ {
mlme_connected_chan_stats_request(psoc, vdev_id); return mlme_connected_chan_stats_request(psoc, vdev_id);
} }
bool bool

View File

@@ -3963,19 +3963,20 @@ __wlan_hdd_cfg80211_connected_chan_stats_request(struct wiphy *wiphy,
struct hdd_context *hdd_ctx = wiphy_priv(wiphy); struct hdd_context *hdd_ctx = wiphy_priv(wiphy);
bool is_vdev_connected; bool is_vdev_connected;
enum QDF_OPMODE mode; enum QDF_OPMODE mode;
QDF_STATUS status;
is_vdev_connected = hdd_cm_is_vdev_connected(adapter); is_vdev_connected = hdd_cm_is_vdev_connected(adapter);
mode = adapter->device_mode; mode = adapter->device_mode;
if (mode == QDF_STA_MODE && is_vdev_connected) {
ucfg_mlme_connected_chan_stats_request(hdd_ctx->psoc, if (mode != QDF_STA_MODE || !is_vdev_connected) {
adapter->deflink->vdev_id);
} else {
hdd_debug("vdev %d: reject chan stats req, mode:%d, conn:%d", hdd_debug("vdev %d: reject chan stats req, mode:%d, conn:%d",
adapter->deflink->vdev_id, mode, is_vdev_connected); adapter->deflink->vdev_id, mode, is_vdev_connected);
return -EINVAL; return -EPERM;
} }
return 0; status = ucfg_mlme_connected_chan_stats_request(hdd_ctx->psoc,
adapter->deflink->vdev_id);
return qdf_status_to_os_return(status);
} }
int wlan_hdd_cfg80211_connected_chan_stats_req(struct wiphy *wiphy, int wlan_hdd_cfg80211_connected_chan_stats_req(struct wiphy *wiphy,