wlan: Dynamically change tcp delay ack using hdd stats
We start a periodic timer in which we monitor number of rx
packets received. Using this count we decide bus width/rx_level.
We send this throughput level to cnss-daemon so that daemon can
dynamically set tcp delay ack value based on current receive
traffic situation to improve tcp performace. Added ini item to
enable this feature.
CRs-Fixed: 763246
Change-Id: I61f8a55ec9215a8fe86433d9f34a8ee7082a04bb
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index ecaab10..b037679 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1141,6 +1141,7 @@
#endif
/* Flag to ensure PSB is configured through framework */
v_U8_t psbChanged;
+ v_ULONG_t prev_rx_packets;
/* UAPSD psb value configured through framework */
v_U8_t configuredPsb;
v_BOOL_t is_roc_inprogress;
@@ -1563,8 +1564,26 @@
/* work queue to defer mac spoofing */
struct delayed_work spoof_mac_addr_work;
+
+ vos_timer_t delack_timer;
+ struct mutex cur_rx_level_lock;
+ v_U32_t cur_rx_level;
+ v_U64_t prev_rx;
+ v_ULONG_t mode;
};
+typedef enum {
+ TP_IND_LOW = 1,
+ TP_IND_MEDIUM,
+ TP_IND_HIGH,
+}TP_IND_TYPE;
+
+/* Use to notify the TDLS or BTCOEX is mode enable */
+typedef enum
+{
+ WLAN_TDLS_MODE,
+ WLAN_BTCOEX_MODE,
+} WLAN_MODE_TYPE;
#define WLAN_HDD_IS_LOAD_IN_PROGRESS(pHddCtx) \
(pHddCtx->isLoadUnloadInProgress & WLAN_HDD_LOAD_IN_PROGRESS)
@@ -1726,6 +1745,25 @@
#endif
int hdd_wmmps_helper(hdd_adapter_t *pAdapter, tANI_U8 *ptr);
+/*
+ * start/stop bandwidth compute timer, Based on which tcp delack
+ * value will be configured
+ */
+void hdd_manage_delack_timer(hdd_context_t *pHddCtx);
+
+void hdd_update_prev_rx_packet_count(hdd_context_t *pHddCtx);
+void hdd_start_delack_timer(hdd_context_t *pHddCtx);
+void hdd_set_default_stop_delack_timer(hdd_context_t *pHddCtx);
+v_U8_t hdd_get_total_sessions(hdd_context_t *pHddCtx);
+void hdd_set_delack_value(hdd_context_t *pHddCtx, v_U32_t next_rx_level);
+
+/*
+ * Calculate the packet channel bandwidth and send notification to cnss demon
+ */
+void hdd_request_tcp_delack(hdd_context_t *pHddCtx,
+ uint64_t rx_packets);
+void hdd_tcp_delack_compute_function(void *priv);
+
#ifdef FEATURE_WLAN_BATCH_SCAN
/**---------------------------------------------------------------------------