summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSameer Thalappil <sameert@qca.qualcomm.com>2014-12-03 19:22:42 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-12-19 16:19:10 +0530
commit17d484de4efe96717ecaf9f715ce85a29f79af9f (patch)
treeccab510044dcec83c85f72f789adaac9ef8c72a2
parent73d796f69acd29c3e3cac10cc5a85de9e3b03f16 (diff)
qcacld: [CORESTACK] Add support for auto suspend
Changes to suppport Auto suspend feature. Auto suspend indication is processed thru SME. CRs-Fixed: 761959 Change-Id: I367df0006cd0b2223e556623abb720c977dc16b1
-rw-r--r--CORE/MAC/inc/sirApi.h3
-rw-r--r--CORE/MAC/src/include/sirParams.h4
-rw-r--r--CORE/SME/inc/smeInternal.h3
-rw-r--r--CORE/SME/inc/sme_Api.h24
-rw-r--r--CORE/SME/inc/sme_Trace.h3
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c58
-rw-r--r--CORE/SME/src/sme_common/sme_Trace.c3
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c4
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h4
9 files changed, 106 insertions, 0 deletions
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 2504e1827f01..5f941c997819 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -3505,6 +3505,9 @@ typedef struct sSirWlanSuspendParam
tANI_U8 configuredMcstBcstFilterSetting;
tANI_U8 sessionId;
tANI_U8 connectedState;
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ void (*resumed_callback)(void *);
+#endif
}tSirWlanSuspendParam,*tpSirWlanSuspendParam;
typedef struct sSirWlanResumeParam
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 37bd57885816..5be46a805c17 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -693,6 +693,10 @@ typedef struct sSirMbMsgP2p
#endif /* WLAN_FEATURE_APFIND */
#define SIR_HAL_OCB_SET_SCHED_REQUEST (SIR_HAL_ITC_MSG_TYPES_BEGIN + 307)
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+#define SIR_HAL_WLAN_AUTO_SUSPEND_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 308)
+#define SIR_HAL_WLAN_AUTO_RESUME_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 309)
+#endif
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index dcdbcdaf2169..3b4af201158c 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -181,6 +181,9 @@ typedef struct tagSmeStruct
/* get temperature event context and callback */
void *pTemperatureCbContext;
void (*pGetTemperatureCb)(int temperature, void *context);
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ bool enable_bus_auto_suspend;
+#endif
} tSmeStruct, *tpSmeStruct;
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 4e7240314e1b..d6bad521203e 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -118,6 +118,9 @@ typedef struct _smeConfigParams
tANI_U8 max_intf_count;
tANI_BOOLEAN enable5gEBT;
tANI_BOOLEAN enableSelfRecovery;
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ bool enable_bus_auto_suspend;
+#endif
} tSmeConfigParams, *tpSmeConfigParams;
typedef enum
@@ -4233,4 +4236,25 @@ eHalStatus sme_set_sap_auth_offload(tHalHandle hHal,
VOS_STATUS sme_apfind_set_cmd(struct sme_ap_find_request_req *input);
#endif /* WLAN_FEATURE_APFIND */
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+/**
+ * sme_configure_bus_auto_suspend_ind() - Auto suspend request to lower MAC
+ *
+ * @hHal: The handle returned by macOpen.
+ * @suspend_param: Callback to be called when ready to auto suspend event is
+ * received.
+ * @callback: The callback API that should be invoked when auto suspended.
+ * @context: Context associated with csrReadyToSuspendCallback.
+ *
+ * SME will pass this request to lower mac to Indicate that the wlan needs
+ * to be auto suspended.
+ *
+ * Return: HAL status success or failure
+ */
+eHalStatus sme_configure_bus_auto_suspend_ind(tHalHandle hHal,
+ tSirWlanSuspendParam *suspend_param,
+ csrReadyToSuspendCallback callback,
+ void *context);
+#endif
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/inc/sme_Trace.h b/CORE/SME/inc/sme_Trace.h
index dfdb9962fc6e..799cf3b5b278 100644
--- a/CORE/SME/inc/sme_Trace.h
+++ b/CORE/SME/inc/sme_Trace.h
@@ -136,6 +136,9 @@ enum {
TRACE_CODE_SME_RX_HDD_UPDATE_P2P_IE,
TRACE_CODE_SME_RX_HDD_UPDATE_ROAM_SCAN_N_PROBES,
TRACE_CODE_SME_RX_HDD_UPDATE_ROAM_SCAN_HOME_AWAY_TIME,
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ TRACE_CODE_SME_RX_HDD_CONFIG_AUTO_SUSPENDIND,
+#endif
};
void smeTraceInit(tpAniSirGlobal pMac);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index a808b0b48c45..c72985e586b9 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1645,6 +1645,10 @@ eHalStatus sme_UpdateConfig(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams)
pMac->enable5gEBT = pSmeConfigParams->enable5gEBT;
pMac->sme.enableSelfRecovery = pSmeConfigParams->enableSelfRecovery;
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ pMac->sme.enable_bus_auto_suspend =
+ pSmeConfigParams->enable_bus_auto_suspend;
+#endif
return status;
}
@@ -4303,6 +4307,9 @@ eHalStatus sme_GetConfigParam(tHalHandle hHal, tSmeConfigParams *pParam)
pParam->fP2pListenOffload = pMac->fP2pListenOffload;
pParam->max_intf_count = pMac->sme.max_intf_count;
pParam->enableSelfRecovery = pMac->sme.enableSelfRecovery;
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ pParam->enable_bus_auto_suspend = pMac->sme.enable_bus_auto_suspend;
+#endif
sme_ReleaseGlobalLock( &pMac->sme );
}
@@ -13555,6 +13562,57 @@ eHalStatus sme_ModifyAddIE(tHalHandle hHal,
return (status);
}
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+/**
+ * sme_configure_bus_auto_suspend_ind() - Auto suspend request to lower MAC
+ *
+ * @hHal: The handle returned by macOpen.
+ * @suspend_param: Callback to be called when ready to auto suspend event is
+ * received.
+ * @callback: The callback API that should be invoked when auto suspended.
+ * @context: Context associated with csrReadyToSuspendCallback.
+ *
+ * SME will pass this request to lower mac to Indicate that the wlan needs
+ * to be auto suspended.
+ *
+ * Return: HAL status success or failure
+ */
+eHalStatus sme_configure_bus_auto_suspend_ind(tHalHandle hHal,
+ tSirWlanSuspendParam *suspend_param,
+ csrReadyToSuspendCallback callback,
+ void *context)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ vos_msg_t vosMessage;
+ tSirWlanSuspendParam *sme_suspend_param;
+
+ MTRACE(vos_trace(VOS_MODULE_ID_SME,
+ TRACE_CODE_SME_RX_HDD_CONFIG_AUTO_SUSPENDIND, NO_SESSION, 0));
+
+ sme_suspend_param = vos_mem_malloc(sizeof(tSirWlanSuspendParam));
+ if (!sme_suspend_param) {
+ smsLog(pMac, LOGE,
+ FL("Not able to allocate memory for suspend indication"));
+ return eHAL_STATUS_FAILURE;
+ }
+ *sme_suspend_param = *suspend_param;
+
+ pMac->readyToSuspendCallback = callback;
+ pMac->readyToSuspendContext = context;
+
+ vosMessage.bodyptr = sme_suspend_param;
+ vosMessage.type = WDA_WLAN_AUTO_SUSPEND_IND;
+ vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
+ if (!VOS_IS_STATUS_SUCCESS(vosStatus)) {
+ pMac->readyToSuspendCallback = NULL;
+ pMac->readyToSuspendContext = NULL;
+ status = eHAL_STATUS_FAILURE;
+ }
+ return(status);
+}
+#endif
/*----------------------------------------------------------------------------
\fn sme_UpdateAddIE
diff --git a/CORE/SME/src/sme_common/sme_Trace.c b/CORE/SME/src/sme_common/sme_Trace.c
index c38d09a14cc4..a7a0ef04827d 100644
--- a/CORE/SME/src/sme_common/sme_Trace.c
+++ b/CORE/SME/src/sme_common/sme_Trace.c
@@ -144,6 +144,9 @@ static tANI_U8* smeTraceGetRxMsgString( tANI_U32 code )
CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_P2P_IE);
CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_ROAM_SCAN_N_PROBES);
CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_UPDATE_ROAM_SCAN_HOME_AWAY_TIME);
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ CASE_RETURN_STRING(TRACE_CODE_SME_RX_HDD_CONFIG_AUTO_SUSPENDIND);
+#endif
default:
return( "UNKNOWN" );
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 72d4aba5bf56..9f7ff1811352 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -834,6 +834,10 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg )
#ifdef WLAN_FEATURE_APFIND
CASE_RETURN_STRING(WDA_APFIND_SET_CMD);
#endif /*WLAN_FEATURE_APFIND*/
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+ CASE_RETURN_STRING(WDA_WLAN_AUTO_SUSPEND_IND);
+ CASE_RETURN_STRING(WDA_WLAN_AUTO_RESUME_IND);
+#endif
default:
return((tANI_U8*) "UNKNOWN" );
break;
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 8a4b7bc0eb7b..9cd68309e997 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1022,6 +1022,10 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#endif /* WLAN_FEATURE_APFIND */
#define WDA_OCB_SET_SCHED_REQUEST SIR_HAL_OCB_SET_SCHED_REQUEST
+#ifdef FEATURE_BUS_AUTO_SUSPEND
+#define WDA_WLAN_AUTO_SUSPEND_IND SIR_HAL_WLAN_AUTO_SUSPEND_IND
+#define WDA_WLAN_AUTO_RESUME_IND SIR_HAL_WLAN_AUTO_RESUME_IND
+#endif
tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg);