diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 781a75e011..c904884957 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1585,6 +1585,8 @@ struct wlan_mlme_cfg_twt { * @obss_detection_offload_enabled: Enable OBSS detection offload * @obss_color_collision_offload_enabled: Enable obss color collision * @bss_color_collision_det_sta: STA BSS color collision detection offload + * @bss_color_collision_det_tgt_support: STA BSS color collision detection + * target support */ struct wlan_mlme_obss_ht40 { uint32_t active_dwelltime; @@ -1598,6 +1600,7 @@ struct wlan_mlme_obss_ht40 { bool obss_detection_offload_enabled; bool obss_color_collision_offload_enabled; bool bss_color_collision_det_sta; + bool bss_color_collision_det_tgt_support; }; /** diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 09d039899d..ed15599cad 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -4397,7 +4397,31 @@ ucfg_mlme_set_obss_color_collision_offload_enabled( */ QDF_STATUS ucfg_mlme_set_bss_color_collision_det_sta(struct wlan_objmgr_psoc *psoc, - uint8_t value); + bool value); + +/** + * ucfg_mlme_set_bss_color_collision_det_support() - Set bss color collision + * detection offload support from FW for STA mode + * @psoc: pointer to psoc object + * @value: enable or disable + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_set_bss_color_collision_det_support(struct wlan_objmgr_psoc *psoc, + bool value); + +/** + * ucfg_mlme_get_bss_color_collision_det_support() - Get bss color collision + * detection offload FW support for STA mode + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_bss_color_collision_det_support(struct wlan_objmgr_psoc *psoc, + bool *value); /** * ucfg_mlme_set_restricted_80p80_bw_supp() - Set the restricted 80p80 support diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c index b3a3076062..55965e90ec 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -1702,7 +1702,7 @@ ucfg_mlme_set_obss_detection_offload_enabled(struct wlan_objmgr_psoc *psoc, QDF_STATUS ucfg_mlme_set_bss_color_collision_det_sta(struct wlan_objmgr_psoc *psoc, - uint8_t value) + bool value) { struct wlan_mlme_psoc_ext_obj *mlme_obj; @@ -1715,6 +1715,36 @@ ucfg_mlme_set_bss_color_collision_det_sta(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +ucfg_mlme_set_bss_color_collision_det_support(struct wlan_objmgr_psoc *psoc, + bool val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_INVAL; + + mlme_obj->cfg.obss_ht40.bss_color_collision_det_tgt_support = val; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_bss_color_collision_det_support(struct wlan_objmgr_psoc *psoc, + bool *val) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_INVAL; + + *val = mlme_obj->cfg.obss_ht40.bss_color_collision_det_tgt_support; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS ucfg_mlme_set_obss_color_collision_offload_enabled( struct wlan_objmgr_psoc *psoc, uint8_t value) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index af8511c7b3..8d33f1160f 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2909,6 +2909,9 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg) if (QDF_IS_STATUS_ERROR(status)) hdd_err("Failed to set WNI_CFG_OBSS_COLOR_COLLISION_OFFLOAD"); + ucfg_mlme_set_bss_color_collision_det_support( + hdd_ctx->psoc, + cfg->obss_color_collision_offloaded); if (!cfg->obss_color_collision_offloaded) { status = ucfg_mlme_set_bss_color_collision_det_sta( hdd_ctx->psoc, diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index d3bc319afa..1d32de5d8c 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -15077,12 +15077,15 @@ void sme_set_eht_testbed_def(mac_handle_t mac_handle, uint8_t vdev_id) mac_ctx->usr_eht_testbed_cfg = true; mac_ctx->roam.configParam.channelBondingMode24GHz = 0; wlan_mlme_set_sta_mlo_conn_max_num(mac_ctx->psoc, 1); + ucfg_mlme_set_bss_color_collision_det_sta(mac_ctx->psoc, false); } void sme_reset_eht_caps(mac_handle_t mac_handle, uint8_t vdev_id) { struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); struct csr_roam_session *session; + bool val; + QDF_STATUS status; session = CSR_GET_SESSION(mac_ctx, vdev_id); @@ -15106,6 +15109,10 @@ void sme_reset_eht_caps(mac_handle_t mac_handle, uint8_t vdev_id) mac_ctx->roam.configParam.channelBondingMode24GHz = 1; wlan_mlme_set_sta_mlo_conn_band_bmp(mac_ctx->psoc, 0x77); wlan_mlme_set_sta_mlo_conn_max_num(mac_ctx->psoc, 2); + status = ucfg_mlme_get_bss_color_collision_det_support(mac_ctx->psoc, + &val); + if (QDF_IS_STATUS_SUCCESS(status)) + ucfg_mlme_set_bss_color_collision_det_sta(mac_ctx->psoc, val); } void sme_update_eht_cap_nss(mac_handle_t mac_handle, uint8_t vdev_id,