Wlan: Enable/Disable dynamic split scan
Enable/Disable the split scan dynamically based on the traffic
on TX and RX side. IOCTL to support miracast.
Change-Id: I249c3f7eec624cc06a6cd1829f6742a04c3efae3
CRs-Fixed: 468913
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 75ec020..80af3ce 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -168,6 +168,13 @@
#define SIZE_OF_SETROAMMODE 11 /* size of SETROAMMODE */
#define SIZE_OF_GETROAMMODE 11 /* size of GETROAMMODE */
+/*
+ * Driver miracast parameters 0-Disabled
+ * 1-Source, 2-Sink
+ */
+#define WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL 0
+#define WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL 2
+
#ifdef WLAN_OPEN_SOURCE
static struct wake_lock wlan_wake_lock;
#endif
@@ -2008,6 +2015,37 @@
}
pCfg->nActiveMaxChnTime = val;
}
+ else if ( strncasecmp(command, "MIRACAST", 8) == 0 )
+ {
+ tANI_U8 filterType = 0;
+ tANI_U8 *value;
+ value = command + 9;
+
+ /* Convert the value from ascii to integer */
+ ret = kstrtou8(value, 10, &filterType);
+ if (ret < 0)
+ {
+ /* If the input value is greater than max value of datatype,
+ * then also kstrtou8 fails
+ */
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: kstrtou8 failed range ", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+ if ((filterType < WLAN_HDD_DRIVER_MIRACAST_CFG_MIN_VAL ) ||
+ (filterType > WLAN_HDD_DRIVER_MIRACAST_CFG_MAX_VAL))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Accepted Values are 0 to 2. 0-Disabled, 1-Source,"
+ " 2-Sink ", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+ //Filtertype value should be either 0-Disabled, 1-Source, 2-sink
+ pHddCtx->drvr_miracast = filterType;
+ hdd_tx_rx_pkt_cnt_stat_timer_handler(pHddCtx);
+ }
else {
hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s",
__func__, command);
@@ -4833,6 +4871,21 @@
"%s: Cannot deallocate p2p connection timer", __func__);
}
+ //Stop the traffic monitor timer
+ if ( VOS_TIMER_STATE_RUNNING ==
+ vos_timer_getCurrentState(&pHddCtx->tx_rx_trafficTmr))
+ {
+ vos_timer_stop(&pHddCtx->tx_rx_trafficTmr);
+ }
+
+ // Destroy the traffic monitor timer
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy(
+ &pHddCtx->tx_rx_trafficTmr)))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: Cannot deallocate Traffic monitor timer", __func__);
+ }
+
//Disable IMPS/BMPS as we do not want the device to enter any power
//save mode during shutdown
sme_DisablePowerSave(pHddCtx->hHal, ePMC_IDLE_MODE_POWER_SAVE);
@@ -5861,6 +5914,15 @@
hddLog(VOS_TRACE_LEVEL_ERROR,
"%s: vos timer init failed for hdd_p2p_go_conn_is_in_progress", __func__);
}
+
+ //Register the traffic monitor timer now
+ if ( pHddCtx->cfg_ini->dynSplitscan)
+ {
+ vos_timer_init(&pHddCtx->tx_rx_trafficTmr,
+ VOS_TIMER_TYPE_SW,
+ hdd_tx_rx_pkt_cnt_stat_timer_handler,
+ (void *)pHddCtx);
+ }
goto success;
err_nl_srv: