diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
index 1e0f955..f52177a 100644
--- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
+++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
@@ -84,7 +84,7 @@
 	 tSirResultCodes result_code, uint8_t sme_session_id,
 	 uint16_t sme_transaction_id)
 {
-	tSirMsgQ msg;
+	struct scheduler_msg msg;
 	tSirSmeRsp *sme_rsp;
 
 	lim_log(mac_ctx, LOG1, FL("Sending message %s with reasonCode %s"),
@@ -142,7 +142,7 @@
 	 tSirResultCodes result_code, uint8_t sme_session_id,
 	 uint32_t scan_id)
 {
-	tSirMsgQ msg;
+	struct scheduler_msg msg;
 	struct sir_roc_rsp *sme_rsp;
 
 	lim_log(mac_ctx, LOG1,
@@ -236,7 +236,7 @@
 static void lim_send_sme_join_reassoc_rsp_after_resume(tpAniSirGlobal mac_ctx,
 	QDF_STATUS status, uint32_t *ctx)
 {
-	tSirMsgQ msg;
+	struct scheduler_msg msg;
 	tpSirSmeJoinRsp sme_join_rsp = (tpSirSmeJoinRsp) ctx;
 
 	msg.type = sme_join_rsp->messageType;
@@ -570,7 +570,7 @@
 {
 
 	uint16_t size = 0;
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirSmeStartBssRsp *pSirSmeRsp;
 	uint16_t ieLen;
 	uint16_t ieOffset, curLen;
@@ -753,7 +753,7 @@
 			uint32_t scan_id)
 {
 	tpSirSmeScanRsp pSirSmeScanRsp;
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 
 	lim_log(pMac, LOG1, FL("send SME_SCAN_RSP (reasonCode %s)."),
 		lim_result_code_str(resultCode));
@@ -791,8 +791,8 @@
 void lim_send_sme_disassoc_deauth_ntf(tpAniSirGlobal pMac,
 				      QDF_STATUS status, uint32_t *pCtx)
 {
-	tSirMsgQ mmhMsg;
-	tSirMsgQ *pMsg = (tSirMsgQ *) pCtx;
+	struct scheduler_msg mmhMsg;
+	struct scheduler_msg *pMsg = (struct scheduler_msg *) pCtx;
 
 	mmhMsg.type = pMsg->type;
 	mmhMsg.bodyptr = pMsg;
@@ -1030,7 +1030,7 @@
 lim_send_sme_disassoc_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs,
 			  tpPESession psessionEntry)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirSmeDisassocInd *pSirSmeDisassocInd;
 
 	pSirSmeDisassocInd = qdf_mem_malloc(sizeof(tSirSmeDisassocInd));
@@ -1087,7 +1087,7 @@
 lim_send_sme_deauth_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs,
 			tpPESession psessionEntry)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirSmeDeauthInd *pSirSmeDeauthInd;
 
 	pSirSmeDeauthInd = qdf_mem_malloc(sizeof(tSirSmeDeauthInd));
@@ -1161,7 +1161,7 @@
 lim_send_sme_tdls_del_sta_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs,
 			      tpPESession psessionEntry, uint16_t reasonCode)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirTdlsDelStaInd *pSirTdlsDelStaInd;
 
 	pSirTdlsDelStaInd = qdf_mem_malloc(sizeof(tSirTdlsDelStaInd));
@@ -1221,7 +1221,7 @@
 void
 lim_send_sme_tdls_delete_all_peer_ind(tpAniSirGlobal pMac, tpPESession psessionEntry)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirTdlsDelAllPeerInd *pSirTdlsDelAllPeerInd;
 
 	pSirTdlsDelAllPeerInd = qdf_mem_malloc(sizeof(tSirTdlsDelAllPeerInd));
@@ -1269,7 +1269,7 @@
 lim_send_sme_mgmt_tx_completion(tpAniSirGlobal pMac,
 				tpPESession psessionEntry, uint32_t txCompleteStatus)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirMgmtTxCompletionInd *pSirMgmtTxCompletionInd;
 
 	pSirMgmtTxCompletionInd =
@@ -1301,7 +1301,7 @@
 void lim_send_sme_tdls_event_notify(tpAniSirGlobal pMac, uint16_t msgType,
 				    void *events)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 
 	switch (msgType) {
 	case SIR_HAL_TDLS_SHOULD_DISCOVER:
@@ -1509,7 +1509,7 @@
 	tSirSmeStatusChangeCode status_change_code,
 	uint32_t *status_change_info, uint16_t info_len, uint8_t session_id)
 {
-	tSirMsgQ msg;
+	struct scheduler_msg msg;
 	tSirSmeWmStatusChangeNtf *wm_status_change_ntf;
 	uint32_t max_info_len;
 
@@ -1598,7 +1598,7 @@
 			     tpPESession psessionEntry, uint8_t smesessionId,
 			     uint16_t smetransactionId)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirSmeSetContextRsp *pSirSmeSetContextRsp;
 
 	pSirSmeSetContextRsp = qdf_mem_malloc(sizeof(tSirSmeSetContextRsp));
@@ -1666,7 +1666,7 @@
 void
 lim_send_sme_neighbor_bss_ind(tpAniSirGlobal pMac, tLimScanResultNode *pBssDescr)
 {
-	tSirMsgQ msgQ;
+	struct scheduler_msg msgQ;
 	uint32_t val;
 	tSirSmeNeighborBssInd *pNewBssInd;
 
@@ -1740,7 +1740,7 @@
 		       uint8_t smesessionId, uint16_t smetransactionId)
 {
 	tpSirAddtsRsp rsp;
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 
 	if (!rspReqd)
 		return;
@@ -1784,7 +1784,7 @@
 		       uint16_t smetransactionId)
 {
 	tpSirDeltsRsp rsp;
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 
 	lim_log(pMac, LOGW, "SendSmeDeltsRsp (aid %d, tsid %d, up %d) status %d",
 		delts->aid,
@@ -1838,7 +1838,7 @@
 		       tpPESession psessionEntry)
 {
 	tpSirDeltsRsp rsp;
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 
 	lim_log(pMac, LOGW, "SendSmeDeltsInd (aid %d, tsid %d, up %d)",
 		aid, delts->tsinfo.traffic.tsid, delts->tsinfo.traffic.userPrio);
@@ -1901,7 +1901,7 @@
 void
 lim_send_sme_pe_statistics_rsp(tpAniSirGlobal pMac, uint16_t msgType, void *stats)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	uint8_t sessionId;
 	tAniGetPEStatsRsp *pPeStats = (tAniGetPEStatsRsp *) stats;
 	tpPESession pPeSessionEntry;
@@ -1945,7 +1945,7 @@
 void lim_send_sme_pe_ese_tsm_rsp(tpAniSirGlobal pMac,
 				 tAniGetTsmStatsRsp *pStats)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	uint8_t sessionId;
 	tAniGetTsmStatsRsp *pPeStats = (tAniGetTsmStatsRsp *) pStats;
 	tpPESession pPeSessionEntry = NULL;
@@ -1991,7 +1991,7 @@
 			   uint8_t *beacon,
 			   uint16_t beaconLen, uint16_t msgType, uint8_t sessionId)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSmeIbssPeerInd *pNewPeerInd;
 
 	pNewPeerInd = qdf_mem_malloc(sizeof(tSmeIbssPeerInd) + beaconLen);
@@ -2099,10 +2099,10 @@
  *
  * Return: None
  */
-void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
+void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, struct scheduler_msg *msg)
 {
 	tpPESession session_entry;
-	tSirMsgQ mmh_msg;
+	struct scheduler_msg mmh_msg;
 	struct csa_offload_params *csa_params =
 				(struct csa_offload_params *) (msg->bodyptr);
 	tpSmeCsaOffloadInd csa_offload_ind;
@@ -2330,7 +2330,7 @@
    \sa
    --------------------------------------------------------------------------*/
 
-void lim_handle_delete_bss_rsp(tpAniSirGlobal pMac, tpSirMsgQ MsgQ)
+void lim_handle_delete_bss_rsp(tpAniSirGlobal pMac, struct scheduler_msg *MsgQ)
 {
 	tpPESession psessionEntry;
 	tpDeleteBssParams pDelBss = (tpDeleteBssParams) (MsgQ->bodyptr);
@@ -2376,7 +2376,7 @@
 lim_send_sme_aggr_qos_rsp(tpAniSirGlobal pMac, tpSirAggrQosRsp aggrQosRsp,
 			  uint8_t smesessionId)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 
 	mmhMsg.type = eWNI_SME_FT_AGGR_QOS_RSP;
 	mmhMsg.bodyptr = aggrQosRsp;
@@ -2391,7 +2391,7 @@
 void lim_send_sme_max_assoc_exceeded_ntf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
 					 uint8_t smesessionId)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSmeMaxAssocInd *pSmeMaxAssocInd;
 
 	pSmeMaxAssocInd = qdf_mem_malloc(sizeof(tSmeMaxAssocInd));
@@ -2434,7 +2434,7 @@
 void
 lim_send_sme_dfs_event_notify(tpAniSirGlobal pMac, uint16_t msgType, void *event)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	mmhMsg.type = eWNI_SME_DFS_RADAR_FOUND;
 	mmhMsg.bodyptr = event;
 	mmhMsg.bodyval = 0;
@@ -2486,7 +2486,7 @@
 				    tpPESession psessionEntry,
 				    tpSwitchChannelParams pChnlParams)
 {
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tpSwitchChannelParams pSmeSwithChnlParams;
 	uint8_t channelId;
 	bool is_ch_dfs = false;
@@ -2574,7 +2574,7 @@
 	 * add appropriate code by introducing a state variable
 	 */
 	tpPESession psessionEntry;
-	tSirMsgQ mmhMsg;
+	struct scheduler_msg mmhMsg;
 	tSirSmeCSAIeTxCompleteRsp *pChanSwTxResponse;
 	struct sir_beacon_tx_complete_rsp *beacon_tx_comp_rsp_ptr;
 	uint8_t length = sizeof(tSirSmeCSAIeTxCompleteRsp);
