Merge "Update Default Blacklist time out to zero." into wlan-driver.lnx.1.0
diff --git a/Android.mk b/Android.mk
index 43ccc6c..5968582 100644
--- a/Android.mk
+++ b/Android.mk
@@ -11,9 +11,11 @@
# Build/Package options for 8916, 8974, 8226, 8610, 8909, 8952, 8937, 8953 targets
ifneq (,$(filter msm8916 msm8974 msm8226 msm8610 msm8909 msm8952 msm8937 msm8953 titanium,$(TARGET_BOARD_PLATFORM)))
+ifneq ($(TARGET_SUPPORTS_ANDROID_WEAR_KERNEL_4_14),true)
WLAN_CHIPSET := pronto
WLAN_SELECT := CONFIG_PRONTO_WLAN=m
endif
+endif
# Build/Package only in case of supported target
ifneq ($(WLAN_CHIPSET),)
@@ -136,7 +138,7 @@
include $(CLEAR_VARS)
LOCAL_MODULE := $(WLAN_CHIPSET)_wlan.ko
LOCAL_MODULE_KBUILD_NAME := wlan.ko
-LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
ifeq ($(PRODUCT_VENDOR_MOVE_ENABLED), true)
ifeq ($(WIFI_DRIVER_INSTALL_TO_KERNEL_OUT),true)
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 9fbcf96..10805ff 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -2119,4 +2119,8 @@
}
#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))
+#define nla_parse(a, b, c, d, e) nla_parse(a, b, c, d, e, NULL)
+#endif
+
#endif
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index aadd9fe..ac36d11 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -2349,6 +2349,18 @@
}
#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0))
+static inline void hdd_dev_setup_destructor(struct net_device *dev)
+{
+ dev->destructor = free_netdev;
+}
+#else
+static inline void hdd_dev_setup_destructor(struct net_device *dev)
+{
+ dev->needs_free_netdev = true;
+}
+#endif /* KERNEL_VERSION(4, 12, 0) */
+
/*
* hdd_parse_disable_chn_cmd() - Parse the channel list received
* in command.
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 3e6418f..b8b2d9a 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -800,8 +800,13 @@
vos_mem_zero(hdd_vht_ops, sizeof(struct ieee80211_vht_operation));
hdd_vht_ops->chan_width = roam_vht_ops->chanWidth;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0))
+ hdd_vht_ops->center_freq_seg0_idx = roam_vht_ops->chanCenterFreqSeg1;
+ hdd_vht_ops->center_freq_seg1_idx = roam_vht_ops->chanCenterFreqSeg2;
+#else
hdd_vht_ops->center_freq_seg1_idx = roam_vht_ops->chanCenterFreqSeg1;
hdd_vht_ops->center_freq_seg2_idx = roam_vht_ops->chanCenterFreqSeg2;
+#endif
hdd_vht_ops->basic_mcs_set = roam_vht_ops->basicMCSSet;
}
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 44cbd1d..5cdbaba 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -135,10 +135,12 @@
.flags = flag, \
}
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0))
#ifdef WLAN_FEATURE_VOWIFI_11R
#define WLAN_AKM_SUITE_FT_8021X 0x000FAC03
#define WLAN_AKM_SUITE_FT_PSK 0x000FAC04
#endif
+#endif
#define HDD_CHANNEL_14 14
#define WLAN_HDD_MAX_FEATURE_SET 8
@@ -12924,14 +12926,24 @@
* FUNCTION: wlan_hdd_cfg80211_change_iface
* wrapper function to protect the actual implementation from SSR.
*/
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))
+int wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
+ struct net_device *ndev,
+ enum nl80211_iftype type,
+ struct vif_params *params)
+#else
int wlan_hdd_cfg80211_change_iface( struct wiphy *wiphy,
struct net_device *ndev,
enum nl80211_iftype type,
u32 *flags,
struct vif_params *params
)
+#endif
{
int ret;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))
+ u32 *flags = NULL;
+#endif
vos_ssr_protect(__func__);
ret = __wlan_hdd_cfg80211_change_iface(wiphy, ndev, type, flags, params);
@@ -14429,7 +14441,11 @@
freq = ieee80211_channel_to_frequency(chan_no);
#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0))
+ chan = ieee80211_get_channel(wiphy, freq);
+#else
chan = __ieee80211_get_channel(wiphy, freq);
+#endif
if (!chan) {
hddLog(VOS_TRACE_LEVEL_ERROR, "%s chan pointer is NULL", __func__);
@@ -14602,7 +14618,13 @@
#else
freq = ieee80211_channel_to_frequency(chan_no);
#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0))
+ chan = ieee80211_get_channel(wiphy, freq);
+#else
chan = __ieee80211_get_channel(wiphy, freq);
+#endif
+
/*when the band is changed on the fly using the GUI, three things are done
* 1. scan abort 2.flush scan results from cache 3.update the band with the new band user specified(refer to the hdd_setBand_helper function)
* as part of the scan abort, message willbe queued to PE and we proceed with flushing and changinh the band.
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 750edef..bd6c80d 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1097,7 +1097,11 @@
freq = vos_chan_to_freq(oper_chan);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0))
+ chan = ieee80211_get_channel(hostapd_adapter->wdev.wiphy, freq);
+#else
chan = __ieee80211_get_channel(hostapd_adapter->wdev.wiphy, freq);
+#endif
if (!chan) {
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -5734,8 +5738,7 @@
vos_mem_copy(pWlanHostapdDev->dev_addr, (void *)macAddr,sizeof(tSirMacAddr));
vos_mem_copy(pHostapdAdapter->macAddressCurrent.bytes, (void *)macAddr, sizeof(tSirMacAddr));
-
- pWlanHostapdDev->destructor = free_netdev;
+ hdd_dev_setup_destructor(pWlanHostapdDev);
pWlanHostapdDev->ieee80211_ptr = &pHostapdAdapter->wdev ;
pHostapdAdapter->wdev.wiphy = pHddCtx->wiphy;
pHostapdAdapter->wdev.netdev = pWlanHostapdDev;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 0034d5c..15ac7dc 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -250,6 +250,7 @@
void wlan_hdd_restart_timer_cb(v_PVOID_t usrDataForCallback);
void hdd_set_wlan_suspend_mode(bool suspend);
void hdd_set_vowifi_mode(hdd_context_t *hdd_ctx, bool enable);
+void hdd_set_olpc_mode(tHalHandle hHal, bool low_power);
v_U16_t hdd_select_queue(struct net_device *dev,
struct sk_buff *skb
@@ -877,6 +878,19 @@
return 0;
}
+/*
+ * hdd_set_olpc_mode() - Process the OLPCMODE command and invoke the SME api
+ *
+ * @hHal: context handler
+ * @low_power: Value to be sent as a part of the OLPCMODE command
+ *
+ * Return: void
+ */
+void hdd_set_olpc_mode(tHalHandle hHal, bool low_power)
+{
+ sme_update_olpc_mode(hHal, low_power);
+}
+
/**
* hdd_set_vowifi_mode() - Process VOWIFI command.
@@ -4078,6 +4092,21 @@
ptr = (tANI_U8*)command + 11;
hdd_set_vowifi_mode(pHddCtx, *ptr - '0');
+ }
+
+ else if (strncmp(command, "OLPCMODE", 8) == 0)
+ {
+ tANI_U8 *ptr;
+
+ ret = hdd_drv_cmd_validate(command, 8);
+ if (ret)
+ goto exit;
+
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ " Received Command to go to low power mode in %s", __func__);
+
+ ptr = (tANI_U8*)command + 9;
+ hdd_set_olpc_mode((tHalHandle)(pHddCtx->hHal), *ptr - '0');
}
else if(strncmp(command, "SETSUSPENDMODE", 14) == 0)
@@ -9130,7 +9159,7 @@
hdd_set_station_ops( pAdapter->dev );
- pWlanDev->destructor = free_netdev;
+ hdd_dev_setup_destructor(pWlanDev);
pWlanDev->ieee80211_ptr = &pAdapter->wdev ;
pAdapter->wdev.wiphy = pHddCtx->wiphy;
pAdapter->wdev.netdev = pWlanDev;
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 8c74bc6..51f6b0f 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017, 2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017, 2019-2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -826,6 +826,7 @@
/* ARP Debug stats */
#define SIR_HAL_SET_ARP_STATS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 303)
#define SIR_HAL_GET_ARP_STATS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 304)
+#define SIR_HAL_LOW_POWER_MODE (SIR_HAL_ITC_MSG_TYPES_BEGIN + 305)
#define SIR_HAL_VOWIFI_MODE (SIR_HAL_ITC_MSG_TYPES_BEGIN + 306)
#define SIR_HAL_QPOWER (SIR_HAL_ITC_MSG_TYPES_BEGIN + 307)
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index 0748347..38aa648 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -210,6 +210,7 @@
struct csr_set_tx_max_pwr_per_band set_tx_max_pwr_per_band;
tpSirUpdateChanList chan_list;
tpRoamParams RoamParams;
+ bool olpc_mode_enable;
}u;
}tSmeCmd;
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index 95af72a..1a598ad 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -78,6 +78,7 @@
eSmeCommandSetMaxTxPower,
eSmeCommandSetMaxTxPowerPerBand,
eSmeCommandUpdateChannelList,
+ eSmeCommandOlpcMode,
#ifdef FEATURE_WLAN_TDLS
//eSmeTdlsCommandMask = 0x80000, //To identify TDLS commands <TODO>
//These can be considered as csr commands.
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 54e281a..0b7eb43 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -233,6 +233,7 @@
void sme_set_vowifi_mode(tpAniSirGlobal pMac, bool enable);
void sme_set_qpower(tpAniSirGlobal pMac, uint8_t enable);
+void sme_set_olpc_mode(tpAniSirGlobal pMac, bool enable);
#ifdef WLAN_FEATURE_EXTSCAN
/* ---------------------------------------------------------------------------
@@ -4164,4 +4165,14 @@
*/
eHalStatus sme_UpdateBlacklist(tHalHandle hHal, uint8_t session_id,
struct roam_ext_params *roam_params);
+
+/**
+ * sme_update_olpc_mode() - Send OLPC mode command received from user space
+ * @hal: The handle returned by mac_open
+ * @enable: OLPC mode enable/disable
+ *
+ * Return: HAL_STATUS
+ */
+eHalStatus sme_update_olpc_mode(tHalHandle hHal, bool enable);
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 17c7ee4..43ded77 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -18969,6 +18969,11 @@
fNeedFullPower = eANI_BOOLEAN_TRUE;
}
+ else if (pCommand->command == eSmeCommandOlpcMode)
+ {
+ fNeedFullPower = eANI_BOOLEAN_TRUE;
+ }
+
break;
case REQUEST_STOP_UAPSD:
case REQUEST_EXIT_WOWL:
diff --git a/CORE/SME/src/rrm/sme_rrm.c b/CORE/SME/src/rrm/sme_rrm.c
index 9182640..6b81b0f 100644
--- a/CORE/SME/src/rrm/sme_rrm.c
+++ b/CORE/SME/src/rrm/sme_rrm.c
@@ -1311,11 +1311,17 @@
void rrmIterMeasTimerHandle( v_PVOID_t userData )
{
tpAniSirGlobal pMac = (tpAniSirGlobal) userData;
+ eHalStatus status = eHAL_STATUS_FAILURE;
+
#if defined WLAN_VOWIFI_DEBUG
smsLog( pMac, LOGE, "Randomization timer expired...send on next channel ");
#endif
//Issue a scan req for next channel.
- sme_RrmIssueScanReq( pMac );
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (HAL_STATUS_SUCCESS(status)) {
+ sme_RrmIssueScanReq(pMac);
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
}
/* ---------------------------------------------------------------------------
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 6b75a27..4af271a 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -991,6 +991,37 @@
}
}
+/*
+ * sme_set_olpc_mode() - Set OLPC (low power)
+ * @pMac - context handler
+ * @enable - boolean value that determines the state
+ *
+ * The function sends the low power mode to firmware received
+ * via driver command
+ */
+void sme_set_olpc_mode(tpAniSirGlobal pMac, bool enable)
+{
+ tSirMsgQ msgQ;
+ tSirRetStatus retCode = eSIR_SUCCESS;
+
+ vos_mem_zero(&msgQ, sizeof(tSirMsgQ));
+ msgQ.type = WDA_LOW_POWER_MODE;
+ msgQ.reserved = 0;
+ msgQ.bodyval = enable;
+
+ retCode = wdaPostCtrlMsg(pMac, &msgQ);
+ if(eSIR_SUCCESS != retCode)
+ {
+ smsLog(pMac, LOGE,
+ FL("Posting WDA_LOW_POWER_MODE to WDA failed, reason=%X"),
+ retCode);
+ }
+ else
+ {
+ smsLog(pMac, LOG1, FL("posted WDA_LOW_POWER_MODE command"));
+ }
+}
+
tANI_BOOLEAN smeProcessCommand( tpAniSirGlobal pMac )
{
tANI_BOOLEAN fContinue = eANI_BOOLEAN_FALSE;
@@ -1456,6 +1487,19 @@
fContinue = eANI_BOOLEAN_TRUE;
break;
+ case eSmeCommandOlpcMode:
+ csrLLUnlock(&pMac->sme.smeCmdActiveList);
+ sme_set_olpc_mode(pMac,
+ pCommand->u.olpc_mode_enable);
+ if (csrLLRemoveEntry(&pMac->sme.smeCmdActiveList,
+ &pCommand->Link, LL_ACCESS_LOCK)) {
+ csrReleaseCommand(pMac, pCommand);
+ }
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "sme_command_olpc_mode processed");
+ fContinue = eANI_BOOLEAN_TRUE;
+ break;
+
default:
//something is wrong
//remove it from the active list
@@ -15507,3 +15551,32 @@
return eHAL_STATUS_SUCCESS;
}
+
+eHalStatus sme_update_olpc_mode(tHalHandle hHal, bool enable)
+{
+ tSmeCmd *pCommand;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ pCommand = csrGetCommandBuffer(pMac);
+ if (pCommand == NULL) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Failed to get command buffer for roam params"));
+ return eHAL_STATUS_RESOURCES;
+ }
+
+ smsLog(pMac, LOG1, "Posting OLPC command to csr queue");
+
+ pCommand->command = eSmeCommandOlpcMode;
+ pCommand->u.olpc_mode_enable = enable;
+
+ if (!HAL_STATUS_SUCCESS(csrQueueSmeCommand(pMac, pCommand, TRUE))) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("failed to post OLPC sme command"));
+ csrReleaseCommand(pMac, pCommand);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ return eHAL_STATUS_SUCCESS;
+}
+
+
diff --git a/CORE/VOSS/src/vos_packet.c b/CORE/VOSS/src/vos_packet.c
index 1765c80..748ae48 100644
--- a/CORE/VOSS/src/vos_packet.c
+++ b/CORE/VOSS/src/vos_packet.c
@@ -3213,7 +3213,9 @@
shinfo = skb_shinfo(skb);
memset(shinfo, 0, sizeof(struct skb_shared_info));
atomic_set(&shinfo->dataref, 1);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0))
kmemcheck_annotate_variable(shinfo->destructor_arg);
+#endif
return;
}
diff --git a/CORE/VOSS/src/vos_threads.c b/CORE/VOSS/src/vos_threads.c
index df6f7be..043a6e8 100644
--- a/CORE/VOSS/src/vos_threads.c
+++ b/CORE/VOSS/src/vos_threads.c
@@ -45,6 +45,9 @@
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))
+#include <linux/sched/signal.h>
+#endif
/*--------------------------------------------------------------------------
Preprocessor definitions and constants
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 1971d2a..7ca2db4 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1112,6 +1112,7 @@
#define WDA_BEACON_FILTER_IND SIR_HAL_BEACON_FILTER_IND
#define WDA_VOWIFI_MODE SIR_HAL_VOWIFI_MODE
#define WDA_QPOWER SIR_HAL_QPOWER
+#define WDA_LOW_POWER_MODE SIR_HAL_LOW_POWER_MODE
/// PE <-> HAL WOWL messages
#define WDA_WOWL_ADD_BCAST_PTRN SIR_HAL_WOWL_ADD_BCAST_PTRN
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index bf63cf9..026bb27 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -12164,6 +12164,26 @@
return CONVERT_WDI2VOS_STATUS(status);
}
+VOS_STATUS WDA_set_low_power_req(tWDA_CbContext *pWDA,
+ tANI_BOOLEAN low_power)
+{
+ WDI_Status status;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ FL("---> %s"), __func__);
+ status = WDI_set_low_power_mode_req(low_power);
+ if (status == WDI_STATUS_PENDING)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ FL("pending status received "));
+ }
+ else if (status != WDI_STATUS_SUCCESS_SYNC)
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ FL("Failure status %d"), status);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
/*
* FUNCTION: WDA_SetRSSIThresholdsRespCallback
*
@@ -17162,6 +17182,14 @@
WDA_set_qpower(pWDA, pMsg->bodyval);
break;
}
+ case WDA_LOW_POWER_MODE :
+ {
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Handling msg type WDA_LOW_POWER_MODE");
+
+ WDA_set_low_power_req(pWDA, pMsg->bodyval);
+ break;
+ }
case WDA_BTC_SET_CFG:
{
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 8997e54..1af5b15 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017, 2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -6795,7 +6795,6 @@
typedef void (*WDI_EndScanRspCb)(WDI_Status wdiStatus,
void* pUserData);
-
/*---------------------------------------------------------------------------
WDI_StartRspCb
@@ -12341,6 +12340,14 @@
*/
WDI_Status WDI_set_qpower(uint8_t enable);
+/*
+ * WDI_set_low_power_mode_req() - Set OLPC (low power) mode request
+ *
+ * @enable - boolean value that determins the state
+ *
+ * Return: success if the value is sent
+ */
+WDI_Status WDI_set_low_power_mode_req(wpt_boolean enable);
WDI_Status
WDI_FWLoggingDXEdoneInd
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index 4455c84..17c0dbd 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017, 2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -507,6 +507,7 @@
/* BLACKLIST Request */
WDI_BLACKLIST_REQ = 127,
+ WDI_SET_LOW_POWER_REQ = 128,
WDI_MAX_REQ,
/*Send a suspend Indication down to HAL*/
@@ -898,6 +899,8 @@
/* BLACKLIST Response */
WDI_BLACKLIST_RSP = 126,
+ WDI_SET_LOW_POWER_RSP = 127,
+
/*-------------------------------------------------------------------------
Indications
!! Keep these last in the enum if possible
@@ -1898,6 +1901,20 @@
WDI_EventInfoType* pEventData
);
+/**
+ * WDI_process_low_power_request - Sends the low_power request data to
+ * the firmware when OLPCMODE driver command is invoked
+ * @pWDICtx: pointer to the WLAN DAL context
+ * @pEventData: pointer to the event information structure
+ *
+ * Return value: status whether the sending is successful or not
+ */
+WDI_Status
+WDI_process_low_power_request
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
/**
* WDI_process_vowifi_request - Sends the vowifi request data to
@@ -6848,6 +6865,24 @@
);
#endif
+/*
+ * WDI_low_power_rsp_callback() - The callback function for the response of
+ * OLPCMODE driver command
+ *
+ * @wdi_ctx: pointer to the HAL DAL context
+ * @event_data: pointer to the event information structure
+ *
+ * The function will be called when the firmware sends status of the OLPCMODE
+ * command sent by driver
+ *
+ * Return: status success on receiving valid response
+ */
+WDI_Status WDI_low_power_rsp_callback
+(
+ WDI_ControlBlockType *wdi_ctx,
+ WDI_EventInfoType *event_data
+);
+
WDI_Status
wdi_cap_tsf_req
(
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 9a70c87..6b4b497 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -549,6 +549,8 @@
WDI_ProcessGetArpStatsReq, /* WDI_FW_GET_ARP_STATS_REQ */
WDI_ProcessBlackListReq, /* WDI_BLACKLIST_REQ*/
+ WDI_process_low_power_request, /* WDI_SET_LOW_POWER_REQ */
+
/*-------------------------------------------------------------------------
Indications
-------------------------------------------------------------------------*/
@@ -902,6 +904,7 @@
/* ARP Debug Stats*/
WDI_ProcessSetArpStatsResp, /* WDI_FW_ARP_STATS_RSP */
WDI_ProcessGetArpStatsResp, /* WDI_FW_GET_ARP_STATS_RSP */
+ WDI_low_power_rsp_callback, /* WDI_SET_LOW_POWER_RSP */
WDI_ProcessBlackListResp, /* WDI_BLACKLIST_RSP */
/*---------------------------------------------------------------------
@@ -1015,8 +1018,6 @@
NULL,
#endif
};
-
-
/*---------------------------------------------------------------------------
WLAN DAL Global Control Block
---------------------------------------------------------------------------*/
@@ -1815,6 +1816,7 @@
#endif /* DHCP_SERVER_OFFLOAD */
CASE_RETURN_STRING (WDI_CAPTURE_GET_TSF_TSTAMP_RSP);
CASE_RETURN_STRING (WDI_BLACKLIST_RSP);
+ CASE_RETURN_STRING (WDI_SET_LOW_POWER_RSP);
default:
return "Unknown WDI MessageId";
}
@@ -9115,6 +9117,67 @@
return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus:WDI_STATUS_SUCCESS_SYNC;
}
+
+WDI_Status
+WDI_process_low_power_request(WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData)
+{
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usDataOffset = 0;
+ wpt_uint16 usSendSize = 0;
+ wpt_boolean *enable;
+ tHalPowerControlModeChangeReqMsg hal_low_power_msg;
+
+
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ "%s", __func__);
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pEventData ) || ( NULL == pEventData->pEventData ) ) {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ enable = (wpt_boolean*)pEventData->pEventData;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
+ WDI_SET_LOW_POWER_REQ,
+ sizeof(tHalPowerControlModeChangeReqParams),
+ &pSendBuffer, &usDataOffset, &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalPowerControlModeChangeReqParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
+ "Unable to get send buffer in RTS CTS ind %pK ",
+ pEventData);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ hal_low_power_msg.pwrCtrlModeChangeReqParams.enable = *enable;
+
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
+ &hal_low_power_msg.pwrCtrlModeChangeReqParams,
+ sizeof(hal_low_power_msg.pwrCtrlModeChangeReqParams));
+
+ pWDICtx->pReqStatusUserData = NULL;
+ pWDICtx->pfncRspCB = NULL;
+
+ /*-------------------------------------------------------------------------
+ Send OLPC mode Request to HAL
+ -------------------------------------------------------------------------*/
+
+ return WDI_SendMsg(pWDICtx, pSendBuffer, usSendSize,
+ NULL, NULL, WDI_SET_LOW_POWER_RSP);
+}
+
/**
@brief Process End Scan Request function (called when Main FSM
allows it)
@@ -11604,6 +11667,36 @@
WDI_UPD_EDCA_PRMS_RESP);
}/*WDI_ProcessUpdateEDCAParamsReq*/
+
+/**
+ * WDI_set_low_power_mode_req() - Set OLPC (low power) mode request
+ *
+ * @enable - boolean value that determins the state
+ *
+ * Return value: status whether the post is successful or not
+ */
+WDI_Status WDI_set_low_power_mode_req(wpt_boolean enable)
+{
+ WDI_EventInfoType wdiEventData;
+
+ if (eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_SET_LOW_POWER_REQ;
+ wdiEventData.pEventData = (void *) &enable;
+ wdiEventData.uEventDataSize = sizeof(wpt_boolean);
+ wdiEventData.pCBfnc = NULL;
+ wdiEventData.pUserData = NULL;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+
+
/**
* WDI_set_vowifi_mode_ind() - Set VOWIFI mode request
*
@@ -17319,6 +17412,43 @@
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessCloseRsp*/
+/*
+ * WDI_low_power_rsp_callback() - The callback function for the response of
+ * OLPCMODE driver command
+ *
+ * @wdi_ctx: pointer to the HAL DAL context
+ * @event_data: pointer to the event information structure
+ *
+ * The function will be called when the firmware sends status of the OLPCMODE
+ * command sent by driver
+ *
+ * Return: status success on receiving valid response
+ */
+WDI_Status WDI_low_power_rsp_callback(WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData)
+{
+ tHalPowerControlModeChangeRspMsg low_power_rsp;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "<------ %s " ,__func__);
+ if(NULL == pEventData || NULL == pEventData->pEventData)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "%s: Received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wpalMemoryCopy(&low_power_rsp.pwrCtrlModeChangeRspParams,
+ pEventData->pEventData,
+ sizeof(low_power_rsp.pwrCtrlModeChangeRspParams));
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "OLPC status -> %lu" ,
+ (unsigned long)(low_power_rsp.pwrCtrlModeChangeRspParams.status));
+ return WDI_STATUS_SUCCESS;
+}
+
/*============================================================================
SCAN RESPONSE PROCESSING API
@@ -25346,6 +25476,8 @@
return WLAN_HAL_VOWIFI_IND;
case WDI_SET_QPOWER:
return WLAN_HAL_QPOWER_ENABLE_BY_HOST_IND;
+ case WDI_SET_LOW_POWER_REQ:
+ return WLAN_HAL_POWER_CONTROL_MODE_CHANGE_REQ;
case WDI_MON_START_REQ:
return WLAN_HAL_ENABLE_MONITOR_MODE_REQ;
case WDI_MON_STOP_REQ:
@@ -25795,6 +25927,8 @@
return WDI_FW_ARP_STATS_RSP;
case WLAN_HAL_FW_GET_ARP_STATS_RSP:
return WDI_FW_GET_ARP_STATS_RSP;
+ case WLAN_HAL_POWER_CONTROL_MODE_CHANGE_RSP:
+ return WDI_SET_LOW_POWER_RSP;
default:
return eDRIVER_TYPE_MAX;
}