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,10 +929,10 @@ uint32_t mlme_get_vdev_he_ops(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
* @psoc: pointer to psoc object
* @vdev_id: Vdev id
*
* Return: none
* Return: QDF_STATUS
*/
void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
QDF_STATUS mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* mlme_get_ini_vdev_config() - get the vdev ini config params

View File

@@ -245,8 +245,8 @@ mlme_fill_freq_in_wide_scan_start_request(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
QDF_STATUS mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
QDF_STATUS status;
@@ -256,20 +256,27 @@ void mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj) {
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,
WLAN_MLME_NB_ID);
if (!vdev) {
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));
if (!req) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return;
return QDF_STATUS_E_NOMEM;
}
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);
return;
return status;
release:
qdf_mem_free(req);
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)

View File

@@ -4619,10 +4619,10 @@ ucfg_mlme_is_chwidth_with_notify_supported(struct wlan_objmgr_psoc *psoc);
* @psoc: pointer to psoc object
* @vdev_id: Vdev id
*
* Return: none
* Return: QDF_STATUS
*/
void ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
QDF_STATUS ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* ucfg_mlme_set_vdev_traffic_high_throughput() - Set/clear vdev high

View File

@@ -367,10 +367,10 @@ ucfg_mlme_set_vdev_traffic_type(struct wlan_objmgr_psoc *psoc,
return status;
}
void ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
QDF_STATUS ucfg_mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
mlme_connected_chan_stats_request(psoc, vdev_id);
return mlme_connected_chan_stats_request(psoc, vdev_id);
}
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);
bool is_vdev_connected;
enum QDF_OPMODE mode;
QDF_STATUS status;
is_vdev_connected = hdd_cm_is_vdev_connected(adapter);
mode = adapter->device_mode;
if (mode == QDF_STA_MODE && is_vdev_connected) {
ucfg_mlme_connected_chan_stats_request(hdd_ctx->psoc,
adapter->deflink->vdev_id);
} else {
if (mode != QDF_STA_MODE || !is_vdev_connected) {
hdd_debug("vdev %d: reject chan stats req, mode:%d, conn:%d",
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,