diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 202b50d66b70..e485bc409088 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1353,6 +1353,8 @@ static void mlme_init_obss_ht40_cfg(struct wlan_objmgr_psoc *psoc, (bool)cfg_default(CFG_OBSS_DETECTION_OFFLOAD); obss_ht40->obss_color_collision_offload_enabled = (bool)cfg_default(CFG_OBSS_COLOR_COLLISION_OFFLOAD); + obss_ht40->bss_color_collision_det_sta = + cfg_get(psoc, CFG_BSS_CLR_COLLISION_DETCN_STA); } static void mlme_init_threshold_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/components/mlme/dispatcher/inc/cfg_mlme_obss_ht40.h b/components/mlme/dispatcher/inc/cfg_mlme_obss_ht40.h index 284b49fdb91e..56586d06f496 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_obss_ht40.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_obss_ht40.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -243,6 +243,27 @@ 0, \ "Enable obss color collision offload") +/* + * + * bss_color_collision_det_sta - Enables BSS color collision detection in STA + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini used to enable or disable the BSS color collision detection in + * STA mode if obss_color_collision_offload is enabled. + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_BSS_CLR_COLLISION_DETCN_STA CFG_INI_BOOL( \ + "bss_color_collision_det_sta", \ + 0, \ + "BSS color collision detection in STA") + #define CFG_OBSS_HT40_ALL \ CFG(CFG_OBSS_HT40_SCAN_ACTIVE_DWELL_TIME) \ CFG(CFG_OBSS_HT40_SCAN_PASSIVE_DWELL_TIME) \ @@ -253,6 +274,7 @@ CFG(CFG_OBSS_HT40_WIDTH_CH_TRANSITION_DELAY) \ CFG(CFG_OBSS_HT40_OVERRIDE_HT40_20_24GHZ) \ CFG(CFG_OBSS_DETECTION_OFFLOAD) \ + CFG(CFG_BSS_CLR_COLLISION_DETCN_STA) \ CFG(CFG_OBSS_COLOR_COLLISION_OFFLOAD) #endif /* CFG_MLME_OBSS_HT40_H__ */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 391a6435d8ce..9251c24ec3d3 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1396,6 +1396,7 @@ struct wlan_mlme_cfg_twt { * @is_override_ht20_40_24g: use channel bonding in 2.4 GHz * @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 */ struct wlan_mlme_obss_ht40 { uint32_t active_dwelltime; @@ -1408,6 +1409,7 @@ struct wlan_mlme_obss_ht40 { bool is_override_ht20_40_24g; bool obss_detection_offload_enabled; bool obss_color_collision_offload_enabled; + bool bss_color_collision_det_sta; }; /** diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index c4a588458bfb..4ff9b414fa6f 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -3972,6 +3972,18 @@ QDF_STATUS ucfg_mlme_set_obss_color_collision_offload_enabled( struct wlan_objmgr_psoc *psoc, uint8_t value); +/** + * ucfg_mlme_set_bss_color_collision_det_sta() - Enable bss color + * collision detection offload for STA mode + * @psoc: pointer to psoc object + * @value: enable or disable + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_set_bss_color_collision_det_sta(struct wlan_objmgr_psoc *psoc, + uint8_t value); + /** * ucfg_mlme_set_restricted_80p80_bw_supp() - Set the restricted 80p80 support * @psoc: pointer to psoc object diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c index 071b47e0b6c3..269bf8c110ef 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -1550,6 +1550,21 @@ ucfg_mlme_set_obss_detection_offload_enabled(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +ucfg_mlme_set_bss_color_collision_det_sta(struct wlan_objmgr_psoc *psoc, + uint8_t value) +{ + 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_sta = value; + + 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 6b82102992a9..9101f575aaf2 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2691,6 +2691,14 @@ 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"); + if (!cfg->obss_color_collision_offloaded) { + status = ucfg_mlme_set_bss_color_collision_det_sta( + hdd_ctx->psoc, + cfg->obss_color_collision_offloaded); + if (QDF_IS_STATUS_ERROR(status)) + hdd_err("Failed to set CFG_BSS_CLR_COLLISION_DET_STA"); + } + hdd_update_score_config(hdd_ctx); hdd_update_multi_client_thermal_support(hdd_ctx); diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index bc388261db2a..fffb82b2ffe6 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/core/mac/src/pe/lim/lim_session.c @@ -686,6 +686,9 @@ struct pe_session *pe_create_session(struct mac_context *mac, if (status != QDF_STATUS_SUCCESS) pe_err("cannot create ap_ecsa_timer"); } + if (session_ptr->opmode == QDF_STA_MODE) + session_ptr->is_session_obss_color_collision_det_enabled = + mac->mlme_cfg->obss_ht40.bss_color_collision_det_sta; pe_init_fils_info(session_ptr); pe_init_pmf_comeback_timer(mac, session_ptr); session_ptr->ht_client_cnt = 0;