summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-06-01 02:22:05 -0700
committerLinux Build Service Account <lnxbuild@localhost>2016-06-01 02:22:06 -0700
commit64f98d8b2b415222d62b1c2e25d0bfab8a368808 (patch)
tree444815f6371831ac9d287bab97d44eeb067af12d
parentd14333c4c72c1f733870b13fc62049a068a208c5 (diff)
parent98be67287e091663866099721b2c4a239ba55933 (diff)
Promotion of wlan-cld2.driver.lnx.1.0-00023.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 688141 I49ff283f2e9fe9ccd063908597d94c0f25661433 Release 4.0.11.91 1019565 I6223ab27c2285c53c45fd388bd56cadc6d348324 qcacld-2.0: sustain wlan in low PS mode 1017280 Ie9dae82a758bdab98499b492fc38670f26b1698c qcacld-2.0: Fix parsing of iwpriv settdlsconfig command Change-Id: I3f46815bd5a52de33433da8487cbb7e1eeb9c3f4 CRs-Fixed: 688141, 1017280, 1019565
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c116
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SERVICES/WMA/wma.c75
-rw-r--r--CORE/SERVICES/WMA/wma.h1
4 files changed, 155 insertions, 41 deletions
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index dc3cebd9689a..ed7016db4b80 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -1382,80 +1382,119 @@ static int wlan_hdd_tdls_check_config(tdls_config_params_t *config)
{
if (config->tdls > 2)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 1st argument %d. <0...2>", __func__, config->tdls);
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 1st argument %d. <0...2>",
+ __func__, config->tdls);
return -1;
}
if (config->tx_period_t < CFG_TDLS_TX_STATS_PERIOD_MIN ||
config->tx_period_t > CFG_TDLS_TX_STATS_PERIOD_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 2nd argument %d. <%d...%ld>", __func__, config->tx_period_t,
- CFG_TDLS_TX_STATS_PERIOD_MIN, CFG_TDLS_TX_STATS_PERIOD_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 2nd argument %d. <%d...%ld> \
+ resetting to default value %d",
+ __func__,
+ config->tx_period_t,
+ CFG_TDLS_TX_STATS_PERIOD_MIN,
+ CFG_TDLS_TX_STATS_PERIOD_MAX,
+ CFG_TDLS_TX_STATS_PERIOD_DEFAULT);
+ config->tx_period_t = CFG_TDLS_TX_STATS_PERIOD_DEFAULT;
}
if (config->tx_packet_n < CFG_TDLS_TX_PACKET_THRESHOLD_MIN ||
config->tx_packet_n > CFG_TDLS_TX_PACKET_THRESHOLD_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 3rd argument %d. <%d...%ld>", __func__,
- config->tx_packet_n,
- CFG_TDLS_TX_PACKET_THRESHOLD_MIN,
- CFG_TDLS_TX_PACKET_THRESHOLD_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 3rd argument %d. <%d...%ld> \
+ resetting to default value %d",
+ __func__,
+ config->tx_packet_n,
+ CFG_TDLS_TX_PACKET_THRESHOLD_MIN,
+ CFG_TDLS_TX_PACKET_THRESHOLD_MAX,
+ CFG_TDLS_TX_PACKET_THRESHOLD_DEFAULT);
+ config->tx_packet_n = CFG_TDLS_TX_PACKET_THRESHOLD_DEFAULT;
}
if (config->discovery_period_t < CFG_TDLS_DISCOVERY_PERIOD_MIN ||
config->discovery_period_t > CFG_TDLS_DISCOVERY_PERIOD_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 4th argument %d. <%d...%ld>", __func__,
- config->discovery_period_t,
- CFG_TDLS_DISCOVERY_PERIOD_MIN,
- CFG_TDLS_DISCOVERY_PERIOD_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 4th argument %d. <%d...%ld> \
+ resetting to default value %d",
+ __func__,
+ config->discovery_period_t,
+ CFG_TDLS_DISCOVERY_PERIOD_MIN,
+ CFG_TDLS_DISCOVERY_PERIOD_MAX,
+ CFG_TDLS_DISCOVERY_PERIOD_DEFAULT);
+ config->discovery_period_t = CFG_TDLS_DISCOVERY_PERIOD_DEFAULT;
}
if (config->discovery_tries_n < CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN ||
config->discovery_tries_n > CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 5th argument %d. <%d...%d>",
- __func__,
- config->discovery_tries_n,
- CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN,
- CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 5th argument %d. <%d...%d> \
+ resetting to default value %d",
+ __func__,
+ config->discovery_tries_n,
+ CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN,
+ CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX,
+ CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT);
+ config->discovery_tries_n = CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT;
}
if (config->idle_timeout_t < CFG_TDLS_IDLE_TIMEOUT_MIN ||
config->idle_timeout_t > CFG_TDLS_IDLE_TIMEOUT_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 6th argument %d. <%d...%d>", __func__,
- config->idle_timeout_t,
- CFG_TDLS_IDLE_TIMEOUT_MIN,
- CFG_TDLS_IDLE_TIMEOUT_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 6th argument %d. <%d...%d> \
+ resetting to default value %d",
+ __func__,
+ config->idle_timeout_t,
+ CFG_TDLS_IDLE_TIMEOUT_MIN,
+ CFG_TDLS_IDLE_TIMEOUT_MAX,
+ CFG_TDLS_IDLE_TIMEOUT_DEFAULT);
+ config->idle_timeout_t = CFG_TDLS_IDLE_TIMEOUT_DEFAULT;
}
if (config->idle_packet_n < CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN ||
config->idle_packet_n > CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 7th argument %d. <%d...%d>", __func__, config->idle_packet_n,
- CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN, CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 7th argument %d. <%d...%d> \
+ resetting to default value %d",
+ __func__,
+ config->idle_packet_n,
+ CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN,
+ CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX,
+ CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT);
+ config->idle_packet_n = CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT;
}
if (config->rssi_hysteresis < CFG_TDLS_RSSI_HYSTERESIS_MIN ||
config->rssi_hysteresis > CFG_TDLS_RSSI_HYSTERESIS_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 8th argument %d. <%d...%d>", __func__, config->rssi_hysteresis,
- CFG_TDLS_RSSI_HYSTERESIS_MIN, CFG_TDLS_RSSI_HYSTERESIS_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 8th argument %d. <%d...%d> \
+ resetting to default value %d",
+ __func__,
+ config->rssi_hysteresis,
+ CFG_TDLS_RSSI_HYSTERESIS_MIN,
+ CFG_TDLS_RSSI_HYSTERESIS_MAX,
+ CFG_TDLS_RSSI_HYSTERESIS_DEFAULT);
+ config->rssi_hysteresis = CFG_TDLS_RSSI_HYSTERESIS_DEFAULT;
}
if (config->rssi_trigger_threshold < CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN ||
config->rssi_trigger_threshold > CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 9th argument %d. <%d...%d>", __func__, config->rssi_trigger_threshold,
- CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN, CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 9th argument %d. <%d...%d> \
+ resetting to default value %d",
+ __func__,
+ config->rssi_trigger_threshold,
+ CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN,
+ CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX,
+ CFG_TDLS_RSSI_TRIGGER_THRESHOLD_DEFAULT);
+ config->rssi_trigger_threshold =
+ CFG_TDLS_RSSI_TRIGGER_THRESHOLD_DEFAULT;
}
if (config->rssi_teardown_threshold < CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN ||
config->rssi_teardown_threshold > CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 10th argument %d. <%d...%d>", __func__, config->rssi_teardown_threshold,
- CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN, CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX);
- return -1;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s invalid 10th argument %d. <%d...%d> \
+ resetting to default value %d",
+ __func__,
+ config->rssi_teardown_threshold,
+ CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN,
+ CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX,
+ CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT);
+ config->rssi_teardown_threshold =
+ CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT;
}
return 0;
}
@@ -1611,7 +1650,7 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, tdls_config_params_t *confi
}
tdlsParams->vdev_id = pAdapter->sessionId;
- tdlsParams->tdls_state = config->tdls;
+ tdlsParams->tdls_state = req_tdls_mode;
tdlsParams->notification_interval_ms = config->tx_period_t;
tdlsParams->tx_discovery_threshold = config->tx_packet_n;
tdlsParams->tx_teardown_threshold = config->idle_packet_n;
@@ -1639,7 +1678,6 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, tdls_config_params_t *confi
tdlsParams->tdls_peer_kickout_threshold =
pHddCtx->cfg_ini->tdls_peer_kickout_threshold;
-
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: Setting tdls state and param in fw: "
"vdev_id: %d, "
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 70f34cbac429..524dd59130ff 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 11
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 90
+#define QWLAN_VERSION_BUILD 91
-#define QWLAN_VERSIONSTR "4.0.11.90"
+#define QWLAN_VERSIONSTR "4.0.11.91"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index c7ab7ae7fd22..81d4d758911f 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -19297,6 +19297,8 @@ static void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req)
enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma);
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
+ wma->psSetting = ps_req->psSetting;
+
if (eSIR_ADDON_NOTHING == ps_req->psSetting) {
WMA_LOGD("Enable Sta Mode Ps vdevId %d", vdev_id);
ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
@@ -36355,6 +36357,31 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, v_U8_t vdev_id)
iface->ps_enabled = TRUE;
}
+ /*
+ * Set inactivity time to 50ms when DUT is in WoW mode.
+ * It will be recovered to the cfg value when DUT resumes.
+ *
+ * The value 50ms inherits from Pronto. Pronto has different
+ * inactivity for broadcast frames (worst case inactivity
+ * is 50ms). 200ms Inactivity timer is applicable only to
+ * unicast data traffic.
+ */
+ WMA_LOGD("%s: Set inactivity_time to 50.", __func__);
+ ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
+ WMI_STA_PS_PARAM_INACTIVITY_TIME, 50);
+ if (ret)
+ WMA_LOGE("%s: Setting InActivity time Failed.",
+ __func__);
+
+ WMA_LOGD("%s: Set the Tx Wake Threshold 0.", __func__);
+ ret = wmi_unified_set_sta_ps_param(
+ wma->wmi_handle, vdev_id,
+ WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD,
+ WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER);
+ if (ret)
+ WMA_LOGE("%s: Setting TxWake Threshold Failed.",
+ __func__);
+
ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id,
WMI_VDEV_PARAM_DTIM_POLICY ,
NORMAL_DTIM);
@@ -36389,6 +36416,7 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, v_U8_t vdev_id)
{
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
enum powersave_qpower_mode qpower_config = wma_get_qpower_config(wma);
+ u_int32_t inactivity_time;
if ((iface->type == WMI_VDEV_TYPE_STA) &&
(iface->ps_enabled == TRUE) &&
@@ -36440,6 +36468,53 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, v_U8_t vdev_id)
if (ret)
WMA_LOGE("Failed to enable Qpower in resume mode!");
}
+
+ if (wlan_cfgGetInt(mac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
+ &cfg_data_val ) != eSIR_SUCCESS) {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
+ cfg_data_val = POWERSAVE_DEFAULT_INACTIVITY_TIME;
+ }
+
+ inactivity_time = (u_int32_t)cfg_data_val;
+ WMA_LOGD("%s: Setting InActivity time %d.", __func__,
+ inactivity_time);
+ ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
+ WMI_STA_PS_PARAM_INACTIVITY_TIME,
+ inactivity_time);
+ if (ret)
+ WMA_LOGE("%s: Setting InActivity time Failed.",
+ __func__);
+
+ if (wlan_cfgGetInt(mac, WNI_CFG_MAX_PS_POLL,
+ &cfg_data_val ) != eSIR_SUCCESS) {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get value for WNI_CFG_MAX_PS_POLL");
+ cfg_data_val = 0;
+ }
+
+ /*
+ * Recover the Tx Wake Threshold
+ * 1, do not recover the value, because driver sets
+ * WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER before suspend,
+ * 2, recover the value, because driver sets
+ * WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS before suspend,
+ * 3, recover the value WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS,
+ * which is defined by fw as default and driver does
+ * not set it when psSetting is eSIR_ADDON_DISABLE_UAPSD.
+ */
+ if ((eSIR_ADDON_DISABLE_UAPSD == wma->psSetting)
+ || ((eSIR_ADDON_NOTHING == wma->psSetting)
+ && (!cfg_data_val))) {
+ WMA_LOGD("%s: Set the Tx Wake Threshold.", __func__);
+ ret = wmi_unified_set_sta_ps_param(
+ wma->wmi_handle, vdev_id,
+ WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD,
+ WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS);
+ if (ret)
+ WMA_LOGE("Setting TxWake Threshold vdevId %d",
+ vdev_id);
+ }
}
}
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index e239070592a2..4c2790cdbe01 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -904,6 +904,7 @@ typedef struct wma_handle {
tSirLLStatsResults *link_stats_results;
vos_timer_t wma_fw_time_sync_timer;
struct sir_allowed_action_frames allowed_action_frames;
+ tSirAddonPsReq psSetting;
}t_wma_handle, *tp_wma_handle;
struct wma_target_cap {