diff --git a/action_oui/dispatcher/inc/wlan_action_oui_public_struct.h b/action_oui/dispatcher/inc/wlan_action_oui_public_struct.h index d5f29894fc..b7c5c063ed 100644 --- a/action_oui/dispatcher/inc/wlan_action_oui_public_struct.h +++ b/action_oui/dispatcher/inc/wlan_action_oui_public_struct.h @@ -89,7 +89,8 @@ * @ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN: connect in 1x1 & disable diversity gain * @ACTION_OUI_DISABLE_AGGRESSIVE_TX: disable aggressive TX in firmware * @ACTION_OUI_FORCE_MAX_NSS: Force Max NSS connection with few IOT APs - * @ACTION_OUI_MAXIMUM_ID: maximun number of action oui types + * @ACTION_OUI_DISABLE_AGGRESSIVE_EDCA: disable aggressive EDCA with the ap + * @ACTION_OUI_MAXIMUM_ID: maximum number of action oui types */ enum action_oui_id { ACTION_OUI_CONNECT_1X1 = 0, @@ -100,6 +101,7 @@ enum action_oui_id { ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN = 5, ACTION_OUI_DISABLE_AGGRESSIVE_TX = 6, ACTION_OUI_FORCE_MAX_NSS = 7, + ACTION_OUI_DISABLE_AGGRESSIVE_EDCA = 8, ACTION_OUI_MAXIMUM_ID }; diff --git a/mlme/core/inc/wlan_mlme_main.h b/mlme/core/inc/wlan_mlme_main.h index c91664273e..16fe2aae72 100644 --- a/mlme/core/inc/wlan_mlme_main.h +++ b/mlme/core/inc/wlan_mlme_main.h @@ -118,6 +118,7 @@ struct wlan_mlme_roam { * @vdev_start_failed: flag to indicate that vdev start failed. * @connection_fail: flag to indicate connection failed * @cac_required_for_new_channel: if CAC is required for new channel + * @follow_ap_edca: if true, it is forced to follow the AP's edca. * @assoc_type: vdev associate/reassociate type * @dynamic_cfg: current configuration of nss, chains for vdev. * @ini_cfg: Max configuration of nss, chains supported for vdev. @@ -136,6 +137,7 @@ struct mlme_legacy_priv { bool vdev_start_failed; bool connection_fail; bool cac_required_for_new_channel; + bool follow_ap_edca; enum vdev_assoc_type assoc_type; struct wlan_mlme_nss_chains dynamic_cfg; struct wlan_mlme_nss_chains ini_cfg; @@ -371,6 +373,23 @@ void mlme_set_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev, */ void mlme_free_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev); +/** + * mlme_set_follow_ap_edca_flag() - Set follow ap's edca flag + * @vdev: vdev pointer + * @flag: carries if following ap's edca is true or not. + * + * Return: None + */ +void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag); + +/** + * mlme_get_follow_ap_edca_flag() - Get follow ap's edca flag + * @vdev: vdev pointer + * + * Return: value of follow_ap_edca + */ +bool mlme_get_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev); + /** * mlme_get_peer_disconnect_ies() - Get diconnect IEs from vdev object * @vdev: vdev pointer diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 26d907ddf0..c60995d2a9 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -2587,6 +2587,32 @@ struct wlan_ies *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev) return &mlme_priv->peer_disconnect_ies; } +void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + mlme_legacy_err("vdev legacy private object is NULL"); + return; + } + + mlme_priv->follow_ap_edca = flag; +} + +bool mlme_get_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + mlme_legacy_err("vdev legacy private object is NULL"); + return false; + } + + return mlme_priv->follow_ap_edca; +} + void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer, bool is_pmf_enabled) {