diff --git a/Kbuild b/Kbuild
index 459a90c..f8ace11 100644
--- a/Kbuild
+++ b/Kbuild
@@ -732,8 +732,7 @@
 		$(CDS_SRC_DIR)/cds_regdomain.o \
 		$(CDS_SRC_DIR)/cds_sched.o \
 		$(CDS_SRC_DIR)/cds_concurrency.o \
-		$(CDS_SRC_DIR)/cds_utils.o \
-		$(CDS_SRC_DIR)/cds_mc_timer.o
+		$(CDS_SRC_DIR)/cds_utils.o
 
 
 ########### BMI ###########
@@ -1311,6 +1310,10 @@
 CDEFINES += -DWLAN_FEATURE_11W
 endif
 
+#common scheduler changes are enabled using this macro
+#This needs to be cleaned up once WIN and MCL changes ready
+CDEFINES += -DNAPIER_CODE
+
 ifeq ($(CONFIG_QCA_TXDESC_SANITY_CHECKS), 1)
 CDEFINES += -DQCA_SUPPORT_TXDESC_SANITY_CHECKS
 endif
diff --git a/core/cds/inc/cds_mc_timer.h b/core/cds/inc/cds_mc_timer.h
deleted file mode 100644
index e01937a..0000000
--- a/core/cds/inc/cds_mc_timer.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * DOC: cds_mc_timer.h
- *
- * Connectivity driver services public API
- *
- */
-
-#if !defined(__CDS_MC_TIMER_H)
-#define __CDS_MC_TIMER_H
-
-void cds_linux_timer_callback(unsigned long data);
-
-#endif /* __CDS_MC_TIMER_H */
diff --git a/core/cds/inc/cds_mq.h b/core/cds/inc/cds_mq.h
index d114e08..220d67c 100644
--- a/core/cds/inc/cds_mq.h
+++ b/core/cds/inc/cds_mq.h
@@ -43,6 +43,7 @@
    ------------------------------------------------------------------------*/
 #include <qdf_types.h>
 #include <qdf_status.h>
+#include <scheduler_api.h>
 
 /*--------------------------------------------------------------------------
    Preprocessor definitions and constants
@@ -57,7 +58,6 @@
    the cds Message Queues.
    \note This is mapped directly to the tSirMsgQ for backward
    compatibility with the legacy MAC code */
-
 typedef struct cds_msg_s {
 	uint16_t type;
 	/*
@@ -85,28 +85,10 @@
 
 } cds_msg_t;
 
-/*-------------------------------------------------------------------------
-   Function declarations and documenation
-   ------------------------------------------------------------------------*/
-
-/* Message Queue IDs */
-typedef enum {
-	/* Message Queue ID for messages bound for SME */
-	CDS_MQ_ID_SME = QDF_MODULE_ID_SME,
-
-	/* Message Queue ID for messages bound for PE */
-	CDS_MQ_ID_PE = QDF_MODULE_ID_PE,
-
-	/* Message Queue ID for messages bound for WMA */
-	CDS_MQ_ID_WMA = QDF_MODULE_ID_WMA,
-
-	/* Message Queue ID for messages bound for the SYS module */
-	CDS_MQ_ID_SYS = QDF_MODULE_ID_SYS,
-
-} CDS_MQ_ID;
-
 #define HIGH_PRIORITY 1
 #define LOW_PRIORITY 0
+
+#ifndef NAPIER_CODE
 QDF_STATUS cds_mq_post_message_by_priority(CDS_MQ_ID msg_queue_id,
 					   cds_msg_t *message,
 					   int is_high_priority);
@@ -133,6 +115,12 @@
 	return cds_mq_post_message_by_priority(msg_queue_id, message,
 						LOW_PRIORITY);
 }
+#else
+#define cds_mq_post_message_by_priority(_x, _y, _z) \
+	scheduler_post_msg_by_priority((_x), ((struct scheduler_msg *)_y), (_z))
+#define cds_mq_post_message(_x, _y) \
+	scheduler_post_msg((_x), ((struct scheduler_msg *)_y))
+#endif
 
 /**---------------------------------------------------------------------------
 
diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h
index 8ed224f..7503d72 100644
--- a/core/cds/inc/cds_sched.h
+++ b/core/cds/inc/cds_sched.h
@@ -53,12 +53,16 @@
 
 #define TX_POST_EVENT_MASK               0x001
 #define TX_SUSPEND_EVENT_MASK            0x002
+#ifndef NAPIER_CODE
 #define MC_POST_EVENT_MASK               0x001
 #define MC_SUSPEND_EVENT_MASK            0x002
+#endif
 #define RX_POST_EVENT_MASK               0x001
 #define RX_SUSPEND_EVENT_MASK            0x002
 #define TX_SHUTDOWN_EVENT_MASK           0x010
+#ifndef NAPIER_CODE
 #define MC_SHUTDOWN_EVENT_MASK           0x010
+#endif
 #define RX_SHUTDOWN_EVENT_MASK           0x010
 #define WD_POST_EVENT_MASK               0x001
 #define WD_SHUTDOWN_EVENT_MASK           0x002
@@ -76,7 +80,11 @@
  *
  * Increased to 8000 to handle more RX frames
  */
+#ifndef NAPIER_CODE
 #define CDS_CORE_MAX_MESSAGES 8000
+#else
+#define CDS_CORE_MAX_MESSAGES 1000
+#endif
 
 #ifdef QCA_CONFIG_SMP
 /*
@@ -131,6 +139,7 @@
 typedef struct _cds_sched_context {
 	/* Place holder to the CDS Context */
 	void *pVContext;
+#ifndef NAPIER_CODE
 	/* WMA Message queue on the Main thread */
 	cds_mq_type wmaMcMq;
 
@@ -161,6 +170,7 @@
 
 	/* lock to make sure that McThread suspend/resume mechanism is in sync */
 	spinlock_t McThreadLock;
+#endif
 #ifdef QCA_CONFIG_SMP
 	spinlock_t ol_rx_thread_lock;
 
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index c551388..31ea52c 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -74,8 +74,10 @@
 static p_cds_contextType gp_cds_context;
 static struct __qdf_device g_qdf_ctx;
 
+#ifndef NAPIER_CODE
 /* Debug variable to detect MC thread stuck */
 static atomic_t cds_wrapper_empty_count;
+#endif
 
 static uint8_t cds_multicast_logging;
 
@@ -216,6 +218,55 @@
 	cdp_cfg_set_packet_log_enabled(soc, gp_cds_context->cfg_ctx,
 		(uint8_t)cds_is_packet_log_enabled());
 }
+#ifdef NAPIER_CODE
+static QDF_STATUS cds_register_all_modules(void)
+{
+	QDF_STATUS status;
+
+	scheduler_register_wma_legacy_handler(&wma_mc_process_handler);
+	scheduler_register_sys_legacy_handler(&sys_mc_process_handler);
+
+	/* Register message queues in given order such that queue priority is
+	 * intact:
+	 * 1) QDF_MODULE_ID_SYS: Timer queue(legacy SYS queue)
+	 * 2) QDF_MODULE_ID_TARGET_IF: Target interface queue
+	 * 3) QDF_MODULE_ID_PE: Legacy PE message queue
+	 * 4) QDF_MODULE_ID_SME: Legacy SME message queue
+	 * 5) QDF_MODULE_ID_OS_IF: OS IF message queue for new components
+	 */
+	status = scheduler_register_module(QDF_MODULE_ID_SYS,
+					&scheduler_timer_q_mq_handler);
+	status = scheduler_register_module(QDF_MODULE_ID_TARGET_IF,
+					&scheduler_target_if_mq_handler);
+	status = scheduler_register_module(QDF_MODULE_ID_PE,
+					&pe_mc_process_handler);
+	status = scheduler_register_module(QDF_MODULE_ID_SME,
+					&sme_mc_process_handler);
+	status = scheduler_register_module(QDF_MODULE_ID_OS_IF,
+					&scheduler_os_if_mq_handler);
+	return status;
+}
+
+static QDF_STATUS cds_deregister_all_modules(void)
+{
+	QDF_STATUS status;
+	status = scheduler_deregister_module(QDF_MODULE_ID_SYS);
+	status = scheduler_deregister_module(QDF_MODULE_ID_WMA);
+	status = scheduler_deregister_module(QDF_MODULE_ID_PE);
+	status = scheduler_deregister_module(QDF_MODULE_ID_SME);
+	status = scheduler_deregister_module(QDF_MODULE_ID_OS_IF);
+	return status;
+}
+#else
+static QDF_STATUS cds_register_all_modules(void)
+{
+	return QDF_STATUS_SUCCESS;
+}
+static QDF_STATUS cds_deregister_all_modules(void)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
 
 /**
  * cds_open() - open the CDS Module
@@ -472,6 +523,7 @@
 	gp_cds_context->cdp_update_mac_id = cdp_update_mac_id;
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
 		  "%s: CDS successfully Opened", __func__);
+	cds_register_all_modules();
 
 	dispatcher_psoc_open();
 
@@ -970,8 +1022,9 @@
 	cds_deinit_ini_config();
 	qdf_timer_module_deinit();
 
-	dispatcher_psoc_close();
+	cds_deregister_all_modules();
 
+	dispatcher_psoc_close();
 	return QDF_STATUS_SUCCESS;
 }
 
@@ -1409,6 +1462,7 @@
 	return QDF_STATUS_SUCCESS;
 } /* cds_free_context() */
 
+#ifndef NAPIER_CODE
 /**
  * cds_mq_post_message_by_priority() - posts message using priority
  * to message queue
@@ -1518,6 +1572,7 @@
 
 	return QDF_STATUS_SUCCESS;
 } /* cds_mq_post_message() */
+#endif
 
 /**
  * cds_sys_probe_thread_cback() -  probe mc thread callback
diff --git a/core/cds/src/cds_mc_timer.c b/core/cds/src/cds_mc_timer.c
deleted file mode 100644
index f46b95e..0000000
--- a/core/cds/src/cds_mc_timer.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/**
- * DOC: cds_mc_timer.c
- * Connectivity driver services timer APIs
- */
-
-#include <qdf_mc_timer.h>
-#include "cds_mc_timer.h"
-#include <wlan_qct_sys.h>
-#include <qdf_trace.h>
-#include "cds_mq.h"
-
-/**
- * cds_linux_timer_callback() - timer callback, gets called at time out.
- * @data: unsigned long, holds the timer object.
- *
- * Return: None
- */
-void cds_linux_timer_callback(unsigned long data)
-{
-	qdf_mc_timer_t *timer = (qdf_mc_timer_t *)data;
-	cds_msg_t msg;
-	QDF_STATUS status;
-
-	qdf_mc_timer_callback_t callback = NULL;
-	void *user_data = NULL;
-	QDF_TIMER_TYPE type = QDF_TIMER_TYPE_SW;
-
-	QDF_ASSERT(timer);
-
-	if (timer == NULL) {
-		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
-			  "%s Null pointer passed in!", __func__);
-		return;
-	}
-
-	qdf_spin_lock_irqsave(&timer->platform_info.spinlock);
-
-	switch (timer->state) {
-	case QDF_TIMER_STATE_STARTING:
-		/* we are in this state because someone just started the timer,
-		 * MC timer got started and expired, but the time content have
-		 * not been updated this is a rare race condition!
-		 */
-		timer->state = QDF_TIMER_STATE_STOPPED;
-		status = QDF_STATUS_E_ALREADY;
-		break;
-
-	case QDF_TIMER_STATE_STOPPED:
-		status = QDF_STATUS_E_ALREADY;
-		break;
-
-	case QDF_TIMER_STATE_UNUSED:
-		status = QDF_STATUS_E_EXISTS;
-		break;
-
-	case QDF_TIMER_STATE_RUNNING:
-		/* need to go to stop state here because the call-back function
-		 * may restart timer (to emulate periodic timer)
-		 */
-		timer->state = QDF_TIMER_STATE_STOPPED;
-		/* copy the relevant timer information to local variables;
-		 * once we exits from this critical section, the timer content
-		 * may be modified by other tasks
-		 */
-		callback = timer->callback;
-		user_data = timer->user_data;
-		type = timer->type;
-		status = QDF_STATUS_SUCCESS;
-		break;
-
-	default:
-		QDF_ASSERT(0);
-		status = QDF_STATUS_E_FAULT;
-		break;
-	}
-
-	qdf_spin_unlock_irqrestore(&timer->platform_info.spinlock);
-
-	if (QDF_STATUS_SUCCESS != status) {
-		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
-			  "TIMER callback called in a wrong state=%d",
-			  timer->state);
-		return;
-	}
-
-	qdf_try_allowing_sleep(type);
-
-	if (callback == NULL) {
-		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
-			  "%s: No TIMER callback, Could not enqueue timer to any queue",
-			  __func__);
-		QDF_ASSERT(0);
-		return;
-	}
-
-	/* serialize to the MC thread */
-	sys_build_message_header(SYS_MSG_ID_MC_TIMER, &msg);
-	msg.callback = callback;
-	msg.bodyptr = user_data;
-	msg.bodyval = 0;
-
-	if (cds_mq_post_message(CDS_MQ_ID_SYS, &msg) == QDF_STATUS_SUCCESS)
-		return;
-	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
-		  "%s: Could not enqueue timer to any queue", __func__);
-	QDF_ASSERT(0);
-}
diff --git a/core/cds/src/cds_sched.c b/core/cds/src/cds_sched.c
index d352a06..0ae882e 100644
--- a/core/cds/src/cds_sched.c
+++ b/core/cds/src/cds_sched.c
@@ -88,8 +88,9 @@
 
 
 static p_cds_sched_context gp_cds_sched_context;
-
+#ifndef NAPIER_CODE
 static int cds_mc_thread(void *Arg);
+#endif
 #ifdef QCA_CONFIG_SMP
 static int cds_ol_rx_thread(void *arg);
 static unsigned long affine_cpu;
@@ -469,7 +470,10 @@
 		p_cds_sched_context pSchedContext,
 		uint32_t SchedCtxSize)
 {
+#ifndef NAPIER_CODE
 	QDF_STATUS vStatus = QDF_STATUS_SUCCESS;
+#endif
+
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
 		  "%s: Opening the CDS Scheduler", __func__);
 	/* Sanity checks */
@@ -486,6 +490,7 @@
 	}
 	qdf_mem_zero(pSchedContext, sizeof(cds_sched_context));
 	pSchedContext->pVContext = p_cds_context;
+#ifndef NAPIER_CODE
 	vStatus = cds_sched_init_mqs(pSchedContext);
 	if (!QDF_IS_STATUS_SUCCESS(vStatus)) {
 		QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
@@ -499,14 +504,11 @@
 	init_completion(&pSchedContext->ResumeMcEvent);
 
 	spin_lock_init(&pSchedContext->McThreadLock);
-#ifdef QCA_CONFIG_SMP
-	spin_lock_init(&pSchedContext->ol_rx_thread_lock);
-#endif
-
 	init_waitqueue_head(&pSchedContext->mcWaitQueue);
 	pSchedContext->mcEventFlag = 0;
-
+#endif
 #ifdef QCA_CONFIG_SMP
+	spin_lock_init(&pSchedContext->ol_rx_thread_lock);
 	init_waitqueue_head(&pSchedContext->ol_rx_wait_queue);
 	init_completion(&pSchedContext->ol_rx_start_event);
 	init_completion(&pSchedContext->ol_suspend_rx_event);
@@ -528,6 +530,7 @@
 #endif
 	gp_cds_sched_context = pSchedContext;
 
+#ifndef NAPIER_CODE
 	/* Create the CDS Main Controller thread */
 	pSchedContext->McThread = kthread_create(cds_mc_thread, pSchedContext,
 						 "cds_mc_thread");
@@ -540,7 +543,14 @@
 	wake_up_process(pSchedContext->McThread);
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
 		  "%s: CDS Main Controller thread Created", __func__);
-
+	/*
+	 * Now make sure all threads have started before we exit.
+	 * Each thread should normally ACK back when it starts.
+	 */
+	wait_for_completion_interruptible(&pSchedContext->McStartEvent);
+	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
+		  "%s: CDS MC Thread has started", __func__);
+#endif
 #ifdef QCA_CONFIG_SMP
 	pSchedContext->ol_rx_thread = kthread_create(cds_ol_rx_thread,
 						       pSchedContext,
@@ -556,15 +566,6 @@
 	wake_up_process(pSchedContext->ol_rx_thread);
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
 		  ("CDS OL RX thread Created"));
-#endif
-	/*
-	 * Now make sure all threads have started before we exit.
-	 * Each thread should normally ACK back when it starts.
-	 */
-	wait_for_completion_interruptible(&pSchedContext->McStartEvent);
-	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
-		  "%s: CDS MC Thread has started", __func__);
-#ifdef QCA_CONFIG_SMP
 	wait_for_completion_interruptible(&pSchedContext->ol_rx_start_event);
 	QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH,
 		  "%s: CDS OL Rx Thread has started", __func__);
@@ -576,6 +577,7 @@
 
 #ifdef QCA_CONFIG_SMP
 OL_RX_THREAD_START_FAILURE:
+#ifndef NAPIER_CODE
 	/* Try and force the Main thread controller to exit */
 	set_bit(MC_SHUTDOWN_EVENT_MASK, &pSchedContext->mcEventFlag);
 	set_bit(MC_POST_EVENT_MASK, &pSchedContext->mcEventFlag);
@@ -583,21 +585,29 @@
 	/* Wait for MC to exit */
 	wait_for_completion_interruptible(&pSchedContext->McShutdown);
 #endif
+#endif
 
+#ifndef NAPIER_CODE
 MC_THREAD_START_FAILURE:
+	/* De-initialize all the message queues */
+	cds_sched_deinit_mqs(pSchedContext);
+#endif
 
 #ifdef QCA_CONFIG_SMP
 	unregister_hotcpu_notifier(&cds_cpu_hotplug_notifier);
 	cds_free_ol_rx_pkt_freeq(gp_cds_sched_context);
 pkt_freeqalloc_failure:
 #endif
+#ifndef NAPIER_CODE
 	/* De-initialize all the message queues */
 	cds_sched_deinit_mqs(pSchedContext);
+#endif
 
 	return QDF_STATUS_E_RESOURCES;
 
 } /* cds_sched_open() */
 
+#ifndef NAPIER_CODE
 /**
  * cds_mc_thread() - cds main controller thread execution handler
  * @Arg: Pointer to the global CDS Sched Context
@@ -845,6 +855,7 @@
 		  "%s: MC Thread exiting!!!!", __func__);
 	complete_and_exit(&pSchedContext->McShutdown, 0);
 } /* cds_mc_thread() */
+#endif
 
 #ifdef QCA_CONFIG_SMP
 /**
@@ -1165,6 +1176,9 @@
 			  "%s: gp_cds_sched_context == NULL", __func__);
 		return QDF_STATUS_E_FAILURE;
 	}
+
+#ifndef NAPIER_CODE
+
 	/* shut down MC Thread */
 	set_bit(MC_SHUTDOWN_EVENT_MASK, &gp_cds_sched_context->mcEventFlag);
 	set_bit(MC_POST_EVENT_MASK, &gp_cds_sched_context->mcEventFlag);
@@ -1178,6 +1192,7 @@
 
 	/* Deinit all the queues */
 	cds_sched_deinit_mqs(gp_cds_sched_context);
+#endif
 
 #ifdef QCA_CONFIG_SMP
 	/* Shut down Tlshim Rx thread */
@@ -1194,6 +1209,8 @@
 	return QDF_STATUS_SUCCESS;
 } /* cds_sched_close() */
 
+#ifndef NAPIER_CODE
+
 /**
  * cds_sched_init_mqs() - initialize the cds scheduler message queues
  * @p_cds_sched_context: Pointer to the Scheduler Context.
@@ -1354,6 +1371,8 @@
 	}
 } /* cds_sched_flush_mc_mqs() */
 
+#endif
+
 /**
  * get_cds_sched_ctxt() - get cds scheduler context
  *
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 9ae9384..ab447b8 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -7870,9 +7870,12 @@
 		ret = -EINVAL;
 		QDF_ASSERT(0);
 	}
+
+#ifndef NAPIER_CODE
 	/* Clean up message queues of TX, RX and MC thread */
 	if (!cds_is_driver_recovering())
 		cds_sched_flush_mc_mqs(cds_sched_context);
+#endif
 
 	hif_ctx = cds_get_context(QDF_MODULE_ID_HIF);
 	if (!hif_ctx) {
diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c
index 2e1db01..bbca604 100644
--- a/core/hdd/src/wlan_hdd_power.c
+++ b/core/hdd/src/wlan_hdd_power.c
@@ -77,6 +77,7 @@
 #include "pld_common.h"
 #include "wlan_hdd_driver_ops.h"
 #include <wlan_logging_sock_svc.h>
+#include "scheduler_api.h"
 
 /* Preprocessor definitions and constants */
 #define HDD_SSR_BRING_UP_TIME 30000
@@ -1479,7 +1480,7 @@
 
 	/* Wakeup all driver threads */
 	if (true == pHddCtx->isMcThreadSuspended) {
-		complete(&cds_sched_context->ResumeMcEvent);
+		scheduler_resume_complete();
 		pHddCtx->isMcThreadSuspended = false;
 	}
 #ifdef QCA_CONFIG_SMP
@@ -1757,7 +1758,7 @@
 
 	/* Resume MC thread */
 	if (pHddCtx->isMcThreadSuspended) {
-		complete(&cds_sched_context->ResumeMcEvent);
+		scheduler_resume_complete();
 		pHddCtx->isMcThreadSuspended = false;
 	}
 #ifdef QCA_CONFIG_SMP
@@ -1853,6 +1854,19 @@
 	return ret;
 }
 
+static void hdd_suspend_cb(void)
+{
+	hdd_context_t *hdd_ctx;
+
+	hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+	if (!hdd_ctx) {
+		cds_err("HDD context is NULL");
+		return;
+	}
+
+	complete(&hdd_ctx->mc_sus_event_var);
+}
+
 /**
  * __wlan_hdd_cfg80211_suspend_wlan() - cfg80211 suspend callback
  * @wiphy: Pointer to wiphy
@@ -2004,15 +2018,15 @@
 	}
 
 	/* Suspend MC thread */
-	set_bit(MC_SUSPEND_EVENT_MASK, &cds_sched_context->mcEventFlag);
-	wake_up_interruptible(&cds_sched_context->mcWaitQueue);
+	scheduler_register_hdd_suspend_callback(hdd_suspend_cb);
+	scheduler_set_event_mask(MC_SUSPEND_EVENT_MASK);
+	scheduler_wake_up_controller_thread();
 
 	/* Wait for suspend confirmation from MC thread */
 	rc = wait_for_completion_timeout(&pHddCtx->mc_sus_event_var,
 		msecs_to_jiffies(WLAN_WAIT_TIME_MCTHREAD_SUSPEND));
 	if (!rc) {
-		clear_bit(MC_SUSPEND_EVENT_MASK,
-			  &cds_sched_context->mcEventFlag);
+		scheduler_clear_event_mask(MC_SUSPEND_EVENT_MASK);
 		hdd_err("Failed to stop mc thread");
 		goto resume_tx;
 	}
@@ -2048,7 +2062,7 @@
 #ifdef QCA_CONFIG_SMP
 resume_all:
 
-	complete(&cds_sched_context->ResumeMcEvent);
+	scheduler_resume_complete();
 	pHddCtx->isMcThreadSuspended = false;
 #endif
 
diff --git a/core/mac/src/pe/include/lim_api.h b/core/mac/src/pe/include/lim_api.h
index c5c350e..3a4b31f 100644
--- a/core/mac/src/pe/include/lim_api.h
+++ b/core/mac/src/pe/include/lim_api.h
@@ -49,6 +49,7 @@
 #include "lim_global.h"
 #include "wma_if.h"
 #include "wma_types.h"
+#include "scheduler_api.h"
 
 /* Macro to count heartbeat */
 #define limResetHBPktCount(psessionEntry)   (psessionEntry->LimRxedBeaconCntDuringHB = 0)
@@ -275,6 +276,10 @@
 
    --------------------------------------------------------------------------*/
 tSirRetStatus pe_process_messages(tpAniSirGlobal pMac, tSirMsgQ *pMsg);
+#ifdef NAPIER_CODE
+QDF_STATUS pe_mc_process_handler(struct scheduler_msg *msg);
+#endif
+
 /** -------------------------------------------------------------
    \fn pe_free_msg
    \brief Called by CDS scheduler (function cds_sched_flush_mc_mqs)
diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c
index 478868a..408c643 100644
--- a/core/mac/src/pe/lim/lim_api.c
+++ b/core/mac/src/pe/lim/lim_api.c
@@ -988,6 +988,23 @@
 	return eSIR_SUCCESS;
 }
 
+#ifdef NAPIER_CODE
+QDF_STATUS pe_mc_process_handler(struct scheduler_msg *msg)
+{
+	tSirRetStatus status;
+	tpAniSirGlobal mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
+
+	if (mac_ctx == NULL)
+		return QDF_STATUS_E_FAILURE;
+
+	status = pe_process_messages((tHalHandle)mac_ctx, (tSirMsgQ *)msg);
+	if (status == eSIR_SUCCESS)
+		return QDF_STATUS_SUCCESS;
+
+	return QDF_STATUS_E_FAILURE;
+}
+#endif
+
 /* --------------------------------------------------------------------------- */
 /**
  * pe_handle_mgmt_frame
diff --git a/core/mac/src/sys/common/inc/wlan_qct_sys.h b/core/mac/src/sys/common/inc/wlan_qct_sys.h
index 65f6ff5..f08c671 100644
--- a/core/mac/src/sys/common/inc/wlan_qct_sys.h
+++ b/core/mac/src/sys/common/inc/wlan_qct_sys.h
@@ -44,6 +44,7 @@
 #include <qdf_types.h>
 #include <qdf_status.h>
 #include <cds_mq.h>
+#include <scheduler_api.h>
 
 /*---------------------------------------------------------------------------
    Preprocessor definitions and constants
@@ -70,16 +71,6 @@
    --------------------------------------------------------------------------*/
 typedef void (*sysResponseCback)(void *pUserData);
 
-typedef enum {
-	SYS_MSG_ID_MC_START,
-	SYS_MSG_ID_MC_THR_PROBE,
-	SYS_MSG_ID_MC_TIMER,
-	SYS_MSG_ID_MC_STOP,
-	SYS_MSG_ID_FTM_RSP,
-	SYS_MSG_ID_QVIT,
-
-} SYS_MSG_ID;
-
 /*---------------------------------------------------------------------------
    Preprocessor definitions and constants
    -------------------------------------------------------------------------*/
@@ -189,6 +180,9 @@
 
    --------------------------------------------------------------------------*/
 QDF_STATUS sys_mc_process_msg(v_CONTEXT_t p_cds_context, cds_msg_t *pMsg);
+#ifdef NAPIER_CODE
+QDF_STATUS sys_mc_process_handler(struct scheduler_msg *msg);
+#endif
 
 void wlan_sys_probe(void);
 
diff --git a/core/mac/src/sys/common/src/wlan_qct_sys.c b/core/mac/src/sys/common/src/wlan_qct_sys.c
index 01bb4db..c11fa6d 100644
--- a/core/mac/src/sys/common/src/wlan_qct_sys.c
+++ b/core/mac/src/sys/common/src/wlan_qct_sys.c
@@ -37,13 +37,6 @@
 #include "mac_init_api.h"
 #include "qdf_trace.h"
 
-/*
- * Cookie for SYS messages.  Note that anyone posting a SYS Message
- * has to write the COOKIE in the reserved field of the message.  The
- * SYS Module relies on this COOKIE
- */
-#define SYS_MSG_COOKIE      0xFACE
-
 /* SYS stop timeout 30 seconds */
 #define SYS_STOP_TIMEOUT (30000)
 static qdf_event_t g_stop_evt;
@@ -141,7 +134,6 @@
 QDF_STATUS sys_mc_process_msg(v_CONTEXT_t p_cds_context, cds_msg_t *pMsg)
 {
 	QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
-	qdf_mc_timer_callback_t timerCB;
 	tpAniSirGlobal mac_ctx;
 	void *hHal;
 
@@ -208,12 +200,6 @@
 				pMsg->type, pMsg->type);
 			break;
 
-		case SYS_MSG_ID_MC_TIMER:
-			timerCB = pMsg->callback;
-			if (NULL != timerCB)
-				timerCB(pMsg->bodyptr);
-			break;
-
 		case SYS_MSG_ID_FTM_RSP:
 			hHal = cds_get_context(QDF_MODULE_ID_PE);
 			if (NULL == hHal) {
@@ -264,6 +250,20 @@
 	return qdf_status;
 }
 
+#ifdef NAPIER_CODE
+QDF_STATUS sys_mc_process_handler(struct scheduler_msg *msg)
+{
+	void *cds_ctx = cds_get_global_context();
+
+	if (cds_ctx == NULL) {
+		QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_ERROR,
+			"CDS context is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+	return sys_mc_process_msg(cds_ctx, (cds_msg_t *)msg);
+}
+#endif
+
 /**
  * sys_process_mmh_msg() - this api to process mmh message
  * @pMac: pointer to mac context
diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h
index 7ba3abe..f22dc67 100644
--- a/core/sme/inc/sme_api.h
+++ b/core/sme/inc/sme_api.h
@@ -50,6 +50,8 @@
 
 #include "sme_rrm_internal.h"
 #include "sir_types.h"
+#include "scheduler_api.h"
+
 /*--------------------------------------------------------------------------
   Preprocessor definitions and constants
   ------------------------------------------------------------------------*/
@@ -238,6 +240,9 @@
 QDF_STATUS sme_set_reg_info(tHalHandle hHal, uint8_t *apCntryCode);
 QDF_STATUS sme_hdd_ready_ind(tHalHandle hHal);
 QDF_STATUS sme_process_msg(tHalHandle hHal, cds_msg_t *pMsg);
+#ifdef NAPIER_CODE
+QDF_STATUS sme_mc_process_handler(struct scheduler_msg *msg);
+#endif
 void sme_free_msg(tHalHandle hHal, cds_msg_t *pMsg);
 QDF_STATUS sme_scan_request(tHalHandle hHal, uint8_t sessionId,
 		tCsrScanRequest *, csr_scan_completeCallback callback,
diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c
index d027e0e..be6f4e1 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -3098,6 +3098,20 @@
 	return status;
 }
 
+#ifdef NAPIER_CODE
+QDF_STATUS sme_mc_process_handler(struct scheduler_msg *msg)
+{
+	tpAniSirGlobal mac_ctx = cds_get_context(QDF_MODULE_ID_SME);
+
+	if (mac_ctx == NULL) {
+		QDF_ASSERT(0);
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return sme_process_msg((tHalHandle)mac_ctx, (cds_msg_t *)msg);
+}
+#endif
+
 /**
  * sme_process_nss_update_resp() - Process nss update response
  * @mac: Global MAC pointer
diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h
index 9b9ca2b..4c2209c 100644
--- a/core/wma/inc/wma_api.h
+++ b/core/wma/inc/wma_api.h
@@ -40,6 +40,7 @@
 #include "lim_global.h"
 #include "cds_concurrency.h"
 #include "cds_utils.h"
+#include "scheduler_api.h"
 
 typedef void *WMA_HANDLE;
 
@@ -107,6 +108,10 @@
 
 QDF_STATUS wma_mc_process_msg(void *cds_context, cds_msg_t *msg);
 
+#ifdef NAPIER_CODE
+QDF_STATUS wma_mc_process_handler(struct scheduler_msg *msg);
+#endif
+
 QDF_STATUS wma_start(void *cds_context);
 
 QDF_STATUS wma_stop(void *cds_context, uint8_t reason);
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 982a8d4..77b3a7d 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -6888,6 +6888,20 @@
 	return qdf_status;
 }
 
+#ifdef NAPIER_CODE
+QDF_STATUS wma_mc_process_handler(struct scheduler_msg *msg)
+{
+	void *cds_ctx = cds_get_global_context();
+
+	if (cds_ctx == NULL) {
+		QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_ERROR,
+			"CDS context is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+	return wma_mc_process_msg(cds_ctx, (cds_msg_t *)msg);
+}
+#endif
+
 /**
  * wma_log_completion_timeout() - Log completion timeout
  * @data: Timeout handler data
