Эх сурвалжийг харах

qcacld-3.0: Add ini to disable aggressive EDCA config

Add action_oui ini gActionOUIDisableAggressiveEDCA to identify peers for
which aggressive EDCA configuration causes some IOT issues.

Change-Id: Ifea0c224cef2378727c9f78d8b571ea9c57bb662
CRs-Fixed: 2507191
Paul Zhang 5 жил өмнө
parent
commit
cbae35c8b4

+ 3 - 1
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
 };
 

+ 19 - 0
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

+ 26 - 0
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)
 {