diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index c559948422..b624d44682 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -1178,6 +1178,7 @@ enum cdp_peer_param_type { * @CDP_SET_ATF_STATS_ENABLE: set ATF stats flag * @CDP_CONFIG_SPECIAL_VAP: Configure Special vap * @CDP_RESET_SCAN_SPCL_VAP_STATS_ENABLE: Enable scan spcl vap stats reset + * @CDP_ISOLATION: set isolation flag */ enum cdp_pdev_param_type { CDP_CONFIG_DEBUG_SNIFFER, @@ -1211,6 +1212,7 @@ enum cdp_pdev_param_type { CDP_CONFIG_SPECIAL_VAP, CDP_RESET_SCAN_SPCL_VAP_STATS_ENABLE, CDP_CONFIG_ENHANCED_STATS_ENABLE, + CDP_ISOLATION, }; /* @@ -1275,6 +1277,7 @@ enum cdp_pdev_param_type { * @cdp_pdev_param_monitor_chan: monitor channel * @cdp_pdev_param_atf_stats_enable: ATF stats enable * @cdp_pdev_param_config_special_vap: Configure Special vap + * @cdp_pdev_param_isolation : set isolation mode * * @cdp_psoc_param_en_rate_stats: set rate stats enable/disable * @cdp_psoc_param_en_nss_cfg: set nss cfg @@ -1350,6 +1353,7 @@ typedef union cdp_config_param_t { bool cdp_pdev_param_config_special_vap; bool cdp_pdev_param_reset_scan_spcl_vap_stats_enable; bool cdp_pdev_param_enhanced_stats_enable; + bool cdp_pdev_param_isolation; /* psoc params */ bool cdp_psoc_param_en_rate_stats; diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index 974897fc9c..b1b6a253bf 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -565,6 +565,7 @@ static QDF_STATUS dp_vdev_attach_be(struct dp_soc *soc, struct dp_vdev *vdev) { struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev); + struct dp_pdev *pdev = vdev->pdev; be_vdev->vdev_id_check_en = DP_TX_VDEV_ID_CHECK_ENABLE; @@ -582,8 +583,12 @@ static QDF_STATUS dp_vdev_attach_be(struct dp_soc *soc, struct dp_vdev *vdev) vdev->vdev_id, DP_AST_AGING_TIMER_DEFAULT_MS); - hal_tx_vdev_mcast_ctrl_set(soc->hal_soc, vdev->vdev_id, - HAL_TX_MCAST_CTRL_MEC_NOTIFY); + if (pdev->isolation) + hal_tx_vdev_mcast_ctrl_set(soc->hal_soc, vdev->vdev_id, + HAL_TX_MCAST_CTRL_FW_EXCEPTION); + else + hal_tx_vdev_mcast_ctrl_set(soc->hal_soc, vdev->vdev_id, + HAL_TX_MCAST_CTRL_MEC_NOTIFY); } dp_mlo_init_ptnr_list(vdev); diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 296984ebd3..bf2d1b10a9 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -9407,6 +9407,9 @@ static QDF_STATUS dp_set_pdev_param(struct cdp_soc_t *cdp_soc, uint8_t pdev_id, case CDP_CONFIG_ENHANCED_STATS_ENABLE: pdev->enhanced_stats_en = val.cdp_pdev_param_enhanced_stats_enable; break; + case CDP_ISOLATION: + pdev->isolation = val.cdp_pdev_param_isolation; + break; default: return QDF_STATUS_E_INVAL; } diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 7f2cd8b442..f43ccc0eb7 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -2833,6 +2833,8 @@ struct dp_pdev { #ifdef WLAN_FEATURE_11BE_MLO struct dp_mlo_sync_timestamp timestamp; #endif + /* Is isolation mode enabled */ + bool isolation; }; struct dp_peer;