[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6

MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF  modem version: NA

Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/interface/service/sst/coresonic_access_ctrl_public.h b/mcu/interface/service/sst/coresonic_access_ctrl_public.h
new file mode 100644
index 0000000..8df3be7
--- /dev/null
+++ b/mcu/interface/service/sst/coresonic_access_ctrl_public.h
@@ -0,0 +1,91 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   coresonic_access_ctrl_public.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module defines the HW initialization.
+ *
+ * Author:
+ * -------
+ *   
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*******************************************************************************
+ * Include header files.
+ *******************************************************************************/
+#ifndef CORESONIC_ACCESS_CTRL_PUBLIC_H
+#define CORESONIC_ACCESS_CTRL_PUBLIC_H
+
+#include "kal_public_api.h"
+
+#define MAX_CORESONIC_NUM     (3)
+
+typedef enum {
+    C2CRF_DISABLE=0,
+    C2CRF_ENABLE,
+} C2CRF_ACCESS_CTRL;
+
+typedef enum
+{
+    PM_ICM_DISABLE=0,
+    PM_ICM_ENABLE
+}PM_ICM_ACCESS_CTRL;
+
+kal_int32 Coresonic_C2CRF_Ctrl(C2CRF_ACCESS_CTRL ctrl_state);
+kal_int32 Coresonic_PM_ICM_Ctrl(PM_ICM_ACCESS_CTRL ctrl_state);
+#endif  /* CORESONIC_BOOT_PUBLIC_H */
\ No newline at end of file
diff --git a/mcu/interface/service/sst/coresonic_boot_public.h b/mcu/interface/service/sst/coresonic_boot_public.h
new file mode 100644
index 0000000..388763b
--- /dev/null
+++ b/mcu/interface/service/sst/coresonic_boot_public.h
@@ -0,0 +1,110 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   coresonic_boot_public.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module defines the HW initialization.
+ *
+ * Author:
+ * -------
+ *   
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*******************************************************************************
+ * Include header files.
+ *******************************************************************************/
+#ifndef CORESONIC_BOOT_PUBLIC_H
+#define CORESONIC_BOOT_PUBLIC_H
+
+#include "kal_public_api.h"
+
+typedef enum
+{
+    DSP_CORESONIC_CORE_ICC=0,
+    DSP_CORESONIC_CORE_IMC,
+    DSP_CORESONIC_CORE_MPC
+}DSP_CORESONIC_CORE;
+
+//typedef enum {
+//    C2CRF_DISABLE=0,
+//    C2CRF_ENABLE,
+//} C2CRF_ACCESS_CTRL;
+
+
+
+typedef enum {
+    DL_INIT,
+    DL_IN_PROGRESS,
+    DL_DONE
+} CORESONIC_DOWNLOAD_STATUS;
+
+kal_int32 Coresonic_Load(void);
+kal_int32 Coresonic_Status(void);
+kal_int32 Coresonic_Handshake(void);
+kal_int32 Coresonic_ungate(void);
+
+extern kal_char *Coresonic_GetCoreName(DSP_CORESONIC_CORE core);
+extern kal_char *Coresonic_GetProject(DSP_CORESONIC_CORE core);
+extern kal_char *Coresonic_GetFlavor(DSP_CORESONIC_CORE core);
+extern kal_char *Coresonic_GetLabel(DSP_CORESONIC_CORE core);
+extern kal_char *Coresonic_GetBuildTime(DSP_CORESONIC_CORE core);
+extern kal_int32 Coresonic_Init();
+
+//kal_int32 Coresonic_C2CRF_Ctrl(C2CRF_ACCESS_CTRL ctrl_state);
+
+#endif  /* CORESONIC_BOOT_PUBLIC_H */
\ No newline at end of file
diff --git a/mcu/interface/service/sst/csif_struct_check_public.h b/mcu/interface/service/sst/csif_struct_check_public.h
new file mode 100644
index 0000000..51cbc9d
--- /dev/null
+++ b/mcu/interface/service/sst/csif_struct_check_public.h
@@ -0,0 +1,9 @@
+#ifndef __CSIF_STRUCT_CHECK_PUBLIC_H__
+#define __CSIF_STRUCT_CHECK_PUBLIC_H__
+
+////////////////
+// public APIs
+/////////////////
+void CSIFStructure_Check_Fill(void);
+
+#endif //__CSIF_STRUCT_CHECK_PUBLIC_H__
\ No newline at end of file
diff --git a/mcu/interface/service/sst/dsp_boot.h b/mcu/interface/service/sst/dsp_boot.h
new file mode 100644
index 0000000..f01215e
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_boot.h
@@ -0,0 +1,107 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   dsp_boot.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module defines the HW initialization.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+ 
+#ifndef DSP_BOOT_H
+#define DSP_BOOT_H
+
+/* common part */
+/* WARNNING: The start of each type of DSP must be multiple of 0x1000 */
+
+#define DSP_TYPE_INTERVAL 0x1000
+
+typedef enum {
+    DSP_MD32 = 0x1000,
+    DSP_MD32_START = 0x0000,
+    DSP_MD32_RAKE,
+    DSP_MD32_END,
+    
+    DSP_SC = 0x2000,
+    DSP_SC_START = 0x2000,
+    DSP_SC_ICC,
+    DSP_SC_IMC,
+    DSP_SC_MPC,
+    DSP_SC_END,
+    
+    DSP_TYPE_END,
+} DSP_TYPE;
+
+
+/* target specific part */
+#ifndef __DSP_PBP__
+
+#include "kal_general_types.h"
+
+kal_int32 DSP_Init();
+kal_int32 DSP_Load(DSP_TYPE dsp_type);
+kal_uint32 DSP_Image[1024 * 1024 >> 2];
+
+#else /* __DSP_PBP__ */
+/* DSP PBP specific part */
+
+#endif /* __DSP_PBP__ */
+
+#endif /* DSP_BOOT_H */
diff --git a/mcu/interface/service/sst/dsp_cache_public.h b/mcu/interface/service/sst/dsp_cache_public.h
new file mode 100644
index 0000000..e45a0a6
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_cache_public.h
@@ -0,0 +1,19 @@
+#ifndef __SVC_USIP_CACHE_PUBLIC_H__
+#define __SVC_USIP_CACHE_PUBLIC_H__
+
+/***************************************************************/
+/********* Enum for EX uSIP Cache Dump**************************/
+/***************************************************************/
+typedef enum{
+	EX_USIP_IABT_NONE,
+	EX_USIP_IABT_USIP0,
+	EX_USIP_IABT_USIP1,
+	EX_USIP_IABT_USIP0_USIP1
+} EX_USIP_IABT_CORE;
+
+/***************************************************************/
+/********* Function Prototype **********************************/
+/***************************************************************/
+extern void ex_usip_dump_cache_content(kal_uint32 usip0_iabt_pc, kal_uint32 usip1_iabt_pc, EX_USIP_IABT_CORE usip_iabt_cores);
+
+#endif
diff --git a/mcu/interface/service/sst/dsp_dbg_ctrl_public.h b/mcu/interface/service/sst/dsp_dbg_ctrl_public.h
new file mode 100644
index 0000000..56cc9a5
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_dbg_ctrl_public.h
@@ -0,0 +1,10 @@
+#ifndef __SVC_DSP_DBG_CTRL_PUBLIC_H__
+#define __SVC_DSP_DBG_CTRL_PUBLIC_H__
+
+/*******************************************************************************
+ * Function Prototype 
+ *******************************************************************************/
+extern kal_uint32 resume_SCq16_from_dbgmode(kal_uint32 scq16_core_idx);
+
+#endif
+
diff --git a/mcu/interface/service/sst/dsp_file_public.h b/mcu/interface/service/sst/dsp_file_public.h
new file mode 100644
index 0000000..0f65fbd
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_file_public.h
@@ -0,0 +1,133 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *  dsp_boot_public.h 
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module defines the HW initialization.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef DSP_FILE_PUBLIC_H
+#define DSP_FILE_PUBLIC_H
+
+#include "kal_general_types.h"
+
+
+/*******************************************************************************
+ * Macro definitions 
+ *******************************************************************************/
+#define DSP_VER_SZ 32
+#define DSP_VER_STR_OVHD 512
+#define DSP_VER_STR_TTL_SZ (DSP_VER_SZ * 4 * 6 + DSP_VER_STR_OVHD)
+
+#define ERROR_DUMP_CORE_TYPE_UNDEFINED       0xDEADBEEF
+#define ERROR_DUMP_CORE_TYPE_NOT_USIP_SCQ16  0xDEAD0000
+#define ERROR_DUMP_NO_USIP_SCQ16_MAPPING     0xDEAD0010
+#define ERROR_DUMP_CORE_TYPE_NOT_RAKE        0xDEAD0006
+#define ERROR_DUMP_NO_RAKE_MAPPING           0xDEAD0016
+#define ERROR_DUMP_CORE_TYPE_NOT_SONIC       0xDEAD0026
+#define ERROR_DUMP_NO_SONIC_MAPPING          0xDEAD0036
+
+/*******************************************************************************
+ * Function prototypes 
+ *******************************************************************************/
+kal_uint32 DSP_Init(void);
+kal_bool DSP_IsVersionMismatched(void);
+const kal_char *DSP_GetVersionString(void);
+
+/* TO DO: refine this to adapt to MIPS */
+//#ifdef __L1CORE__
+
+typedef enum {
+    DSP_DUMP_USIP0,
+    DSP_DUMP_USIP1,
+    DSP_DUMP_SCQ16_0,
+    DSP_DUMP_SCQ16_1,
+    DSP_DUMP_RAKE,
+    DSP_DUMP_SCQ16_2,
+    DSP_DUMP_SCQ16_3,
+#if defined(__MD97__)
+    DSP_DUMP_MSONIC0,
+    DSP_DUMP_VSONIC0,
+    DSP_DUMP_MSONIC0_PHASE2,
+#endif
+    DSP_DUMP_INVALID
+} DSP_DUMP_CORE_TYPE;
+
+
+typedef enum {
+    DSP_MD32_BRP,
+    DSP_MD32_DFE,
+    DSP_MD32_RAKE,
+    DSP_CS_ICC,
+    DSP_CS_IMC,
+    DSP_CS_MPC,
+    DSP_CORE_NUM,
+} DSP_CORE_TYPE;
+
+void DSP_OutputVersionInfo();
+const kal_char *DSP_GetProject(DSP_CORE_TYPE dsp_type);
+const kal_char *DSP_GetFlavor(DSP_CORE_TYPE dsp_type);
+const kal_char *DSP_GetLabel(DSP_CORE_TYPE dsp_type);
+const kal_char *DSP_GetBuildTime(DSP_CORE_TYPE dsp_type);
+//#endif /* __L1CORE__ */
+
+#endif /* DSP_FILE_PUBLIC_H */
+
diff --git a/mcu/interface/service/sst/dsp_module_based_api_public.h b/mcu/interface/service/sst/dsp_module_based_api_public.h
new file mode 100644
index 0000000..4a7c63a
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_module_based_api_public.h
@@ -0,0 +1,229 @@
+#ifndef __DSP_MODULE_BASED_API_PUBLIC_H__
+#define __DSP_MODULE_BASED_API_PUBLIC_H__
+#if defined(__MD97__) || defined(__MD97P__)
+
+#include "dsp_control_public.h"
+
+//usip part
+
+
+typedef enum{
+    SRAM_DEC_BUS_CK,
+    DSPLOG_CK,
+    USIP_AFE_CK
+} DSP_CTRL_PERI_CLOCK_CTRL;
+
+#define SRAM_DEC_BUS_CK_ENABLE_BIT       (1 << SRAM_DEC_BUS_CK)
+#define DSPLOG_CK_ENABLE_BIT             (1 << DSPLOG_CK)
+#define USIP_AFE_CK_ENABLE_BIT           (1 << USIP_AFE_CK)
+
+#define SRAM_DEC_BUS_CK_DISABLE_BIT      (1 << SRAM_DEC_BUS_CK)
+#define DSPLOG_CK_DSIABLE_BIT            (1 << DSPLOG_CK)
+#define USIP_AFE_CK_DISABLE_BIT          (1 << USIP_AFE_CK)
+
+typedef enum{
+    FORCE_CCC_CK,
+    FORCE_USIP_BUS_CK,
+    FORCE_USIPCORE_BUS_CK,
+    FORCE_CORE0_CK,
+    FORCE_CORE1_CK,
+    FORCE_L1_ALL_CK,
+    FORCE_USIP_ALL_BUS_CK,
+    FORCE_USIP_DDR_CK,
+    FORCE_INT_CORE0_CK,
+    FORCE_INT_CORE1_CK,
+    FORCE_SLOW_INT_CK_DIV2
+} DSP_CTRL_PERI_CLOCK_FORCE_CTRL;
+
+#define FORCE_CCC_CK_ENABLE_BIT                (1 << FORCE_CCC_CK)
+#define FORCE_USIP_BUS_CK_ENABLE_BIT           (1 << FORCE_USIP_BUS_CK)
+#define FORCE_USIPCORE_BUS_CK_ENABLE_BIT       (1 << FORCE_USIPCORE_BUS_CK)
+#define FORCE_CORE0_CK_ENABLE_BIT              (1 << FORCE_CORE0_CK)
+#define FORCE_CORE1_CK_ENABLE_BIT              (1 << FORCE_CORE1_CK)
+#define FORCE_L1_ALL_CK_ENABLE_BIT             (1 << FORCE_L1_ALL_CK)
+#define FORCE_USIP_ALL_BUS_CK_ENABLE_BIT       (1 << FORCE_USIP_ALL_BUS_CK)
+#define FORCE_USIP_DDR_CK_ENABLE_BIT           (1 << FORCE_USIP_DDR_CK)
+#define FORCE_INT_CORE0_CK_ENABLE_BIT          (1 << FORCE_INT_CORE0_CK)
+#define FORCE_INT_CORE1_CK_ENABLE_BIT          (1 << FORCE_INT_CORE1_CK)
+#define FORCE_SLOW_INT_CK_DIV2_ENABLE_BIT      (1 << FORCE_SLOW_INT_CK_DIV2)
+
+#define FORCE_CCC_CK_DISABLE_BIT                (1 << FORCE_CCC_CK)
+#define FORCE_USIP_BUS_CK_DISABLE_BIT           (1 << FORCE_USIP_BUS_CK)
+#define FORCE_USIPCORE_BUS_CK_DISABLE_BIT       (1 << FORCE_USIPCORE_BUS_CK)
+#define FORCE_CORE0_CK_DISABLE_BIT              (1 << FORCE_CORE0_CK)
+#define FORCE_CORE1_CK_DISABLE_BIT              (1 << FORCE_CORE1_CK)
+#define FORCE_L1_ALL_CK_DISABLE_BIT             (1 << FORCE_L1_ALL_CK)
+#define FORCE_USIP_ALL_BUS_CK_DISABLE_BIT       (1 << FORCE_USIP_ALL_BUS_CK)
+#define FORCE_USIP_DDR_CK_DISABLE_BIT           (1 << FORCE_USIP_DDR_CK)
+#define FORCE_INT_CORE0_CK_DISABLE_BIT          (1 << FORCE_INT_CORE0_CK)
+#define FORCE_INT_CORE1_CK_DISABLE_BIT          (1 << FORCE_INT_CORE1_CK)
+#define FORCE_SLOW_INT_CK_DIV2_DISABLE_BIT      (1 << FORCE_SLOW_INT_CK_DIV2)
+
+
+/***************************************************************/
+/********* Variable Prototype **********************************/
+/***************************************************************/
+extern kal_uint32 duty_rat[DSP_CONTROL_CDIF_CORE_NUM];
+
+
+/***************************************************************/
+/********* Function Prototype **********************************/
+/***************************************************************/
+
+/*****cosim only API****/
+extern void usip_boot(void);
+extern void usip_power_aware(void);
+extern void usip_peripheral_clock_enable(kal_uint32);
+extern void usip_peripheral_clock_disable(kal_uint32);
+extern void usip_peripheral_clock_force_enable(kal_uint32);
+extern void usip_peripheral_clock_force_disable(kal_uint32);
+
+extern DSP_CONTROL_STATUS usip0_thread0_boot_done_check(void);
+extern DSP_CONTROL_STATUS usip0_thread1_boot_done_check(void);
+extern DSP_CONTROL_STATUS usip1_thread0_boot_done_check(void);
+
+extern void rake_ungate(void);
+
+extern DSP_CONTROL_STATUS rake_boot_done_check(void);
+
+/* FirstBoot API */
+extern kal_uint32 firstboot_topsm_query(DSP_CDIF_CORE_ENUM);
+
+/***** Common API *****/
+extern void query_usip_pc(kal_uint32*, kal_uint32*);
+extern kal_uint32 return_dutyrat_of_thread(DSP_CDIF_CORE_ENUM);
+
+
+/* Check Boot Done API*/
+extern kal_bool is_usip_vic_enable(DSP_CDIF_CORE_ENUM);
+extern void rake_later_trigger_ungate();
+/* Check status APIs */
+extern kal_bool dsp_uSIP_thread_is_deactive(DSP_CDIF_CORE_ENUM);
+
+/* DDL Relatives */
+extern void uSIP_inner_ddl_start(L1_MODULE_REGISTRATION, DDL_MODE);
+extern void uSIP_brp_ddl_start(L1_MODULE_REGISTRATION, DDL_MODE);
+/*extern void uSIP_fec_tx_ddl_start(uSIP_API_USER_FEC , DDL_MODE);
+extern void uSIP_fec_rx_ddl_start(uSIP_API_USER_FEC , DDL_MODE);*/
+extern void uSIP_inner_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_brp_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_fec_tx_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_fec_rx_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_rake_as_tcm_for_inner_ddl_status_mode_query(DDL_STATUS *status, DDL_MODE *bin_mode);
+extern void ddl_clear_inner_ddl_protection_trigger();
+extern kal_uint32 dsp_check_ddl_user_status(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_bool ddl_has_user_call_activate(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/***** Sleep Flow APIs for user *****/
+/* FirstBoot API */
+#define topsm_return_dutyrat_of_inner                   firstboot_topsm_query(DSP_CONTROL_USIP0_INNER)
+#define topsm_return_dutyrat_of_brp                     firstboot_topsm_query(DSP_CONTROL_USIP0_BRP)
+#define topsm_return_dutyrat_of_fec                     firstboot_topsm_query(DSP_CONTROL_USIP1_FEC)
+#define topsm_return_dutyrat_of_speech                  firstboot_topsm_query(DSP_CONTROL_USIP1_SPEECH)
+
+
+/* Check idle APIs */
+extern kal_uint32 inner_user_mask;
+extern kal_uint32 brp_user_mask;
+extern kal_uint32 rake_user_mask;
+extern kal_uint32 ddl_check_idle_flag(kal_uint32);
+#define ddl_uSIP_inner_check_idle_flag()                ddl_check_idle_flag(inner_user_mask)
+#define ddl_uSIP_brp_check_idle_flag()                  ddl_check_idle_flag(brp_user_mask)
+
+
+/* Check status APIs */
+#define dsp_uSIP_inner_is_deactive                      dsp_uSIP_thread_is_deactive(DSP_CONTROL_USIP0_INNER)
+
+/***** DDL Flow APIs for user *****/
+// Trigger DDL
+#define dsp_uSIP_inner_ddl_start(user_id, bin_mode)     uSIP_inner_ddl_start(user_id, bin_mode)
+#define dsp_uSIP_brp_ddl_start(user_id,bin_mode)        uSIP_brp_ddl_start(user_id, bin_mode)   
+/*#define dsp_uSIP_fec_tx_ddl_start(user_id,bin_mode)     uSIP_fec_tx_ddl_start(user_id, bin_mode) 
+#define dsp_uSIP_fec_rx_ddl_start(user_id,bin_mode)     uSIP_fec_rx_ddl_start(user_id, bin_mode) */
+
+// Check uSIP inner DDL mode/status
+#define dsp_uSIP_inner_ddl_status_mode_query(status, bin_mode)   uSIP_inner_ddl_status_mode_query(status, bin_mode)
+#define dsp_uSIP_brp_ddl_status_mode_query(status, bin_mode)     uSIP_brp_ddl_status_mode_query(status, bin_mode)
+#define dsp_uSIP_fec_tx_ddl_status_mode_query(status, bin_mode)  uSIP_fec_tx_ddl_status_mode_query(status, bin_mode)
+#define dsp_uSIP_fec_rx_ddl_status_mode_query(status, bin_mode)  uSIP_fec_rx_ddl_status_mode_query(status, bin_mode)
+#define usip_check_ddl_user_status(thread, user_bitmap) dsp_check_ddl_user_status(thread, user_bitmap)
+
+// clear inner ddl_protection
+#define dsp_uSIP_inner_clear_ddl_protection()     ddl_clear_inner_ddl_protection_trigger()
+
+// for exception flow use. Query the active units
+typedef enum
+{
+    DSP_CTRL_GROUP_USIP,
+    DSP_CTRL_GROUP_RAKE,
+    DSP_CTRL_GROUP_MSONIC,
+    DSP_CTRL_GROUP_VSONIC,
+    DSP_CTRL_GROUP_NUM
+} EX_DSP_CORES_ENUM;
+
+#define dsp_ex_active_status_query(core_group)      0xF
+
+//Rake part
+
+
+/***************************************************************/
+/********* Function Prototype **********************************/
+/***************************************************************/
+
+
+/* Common API */
+
+extern kal_bool is_myself_duty_rat(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_uint32 return_dutyrat_of_thread(DSP_CDIF_CORE_ENUM);
+
+
+
+/* DDL Relatives */
+extern void rake_ddl_start(L1_MODULE_REGISTRATION , DDL_MODE);
+extern void rake_ddl_status_mode_query(DDL_STATUS*, DDL_MODE*);
+extern kal_bool ddl_check_all_target_user_are_deactive(DSP_CDIF_CORE_ENUM);
+extern kal_bool ddl_has_rake_user_call_deactivate(kal_uint32);
+extern kal_uint32 dsp_check_ddl_user_status(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/***************************************************************/
+/********* Function Definition *********************************/
+/***************************************************************/
+/***** Sleep Flow APIs for user *****/
+/* FirstBoot API */
+#define topsm_return_dutyrat_of_rake                    firstboot_topsm_query(DSP_CONTROL_RAKE)
+
+#define is_myself_duty_user_of_rake(user_id)            is_myself_duty_rat(DSP_CONTROL_RAKE, user_id)
+
+
+/* Check idle APIs */
+#define rake_check_ddl_user_status(user_bitmap)         dsp_check_ddl_user_status(DSP_CONTROL_RAKE, user_bitmap)
+#define ddl_rake_check_idle_flag()                      ddl_check_idle_flag(rake_user_mask)
+#define rake_ddl_check_idle_flag_bitmap(user_bitmap)    dsp_check_ddl_user_status(DSP_CONTROL_RAKE, user_bitmap)
+
+
+/***** DDL Flow APIs for user *****/
+// DDL check if RAKE is deactive
+#define ddl_l2tcm_is_rake_deactive()                    ddl_check_all_target_user_are_deactive(DSP_CONTROL_RAKE)
+
+// Trigger DDL
+#define dsp_rake_ddl_start(user_id, bin_mode)           rake_ddl_start(user_id, bin_mode)   
+
+// Check rake DDL mode/status
+#define dsp_rake_ddl_status_mode_query(status, bin_mode)    rake_ddl_status_mode_query(status, bin_mode)  
+
+
+
+/***************************************************************/
+/********* Module based Function Prototype **********************************/
+/***************************************************************/
+
+extern void dsp_firstboot_activate_by_module(kal_uint32);
+extern void dsp_activate_by_module(kal_uint32);
+extern DSP_CONTROL_STATUS dsp_activate_done_check_by_module(kal_uint32);
+extern void dsp_deactivate_by_module(kal_uint32);
+extern DSP_CONTROL_STATUS dsp_deactivate_done_check_by_module(kal_uint32);
+extern kal_uint32 dsp_check_idle_flag_by_module(kal_uint32);
+extern kal_uint32 dsp_check_idle_flag_by_firmware(kal_uint32);
+
+#endif //defined(__MD97__) || defined(__MD97P__)
+#endif  /* __DSP_MODULE_BASED_API_PUBLIC_H__ */
diff --git a/mcu/interface/service/sst/dsp_public_dbgc.h b/mcu/interface/service/sst/dsp_public_dbgc.h
new file mode 100644
index 0000000..9440949
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_public_dbgc.h
@@ -0,0 +1,28 @@
+#ifndef __DSP_DBGC_PUBLIC_H__
+#define __DSP_DBGC_PUBLIC_H__
+
+
+#if defined(__MD97__)
+
+typedef enum{
+    DSP_DBGC_IDLE_THREAD_NONE = 0x0,
+    DSP_DBGC_IDLE_THREAD0 = 0x1 << 0,
+    DSP_DBGC_IDLE_THREAD1 = 0x1 << 1,
+    DSP_DBGC_IDLE_THREAD2 = 0x1 << 2,
+    DSP_DBGC_IDLE_THREAD3 = 0x1 << 3,
+
+    DSP_DBGC_IDLE_ALL_THREAD = DSP_DBGC_IDLE_THREAD0 | DSP_DBGC_IDLE_THREAD1 | DSP_DBGC_IDLE_THREAD2 | DSP_DBGC_IDLE_THREAD3,
+
+}DSP_DBGC_IDLE_SIGNAL_ENUM;
+
+
+extern void dsp_dbgc_set_idle_signal(DSP_DBGC_IDLE_SIGNAL_ENUM value);
+extern void dsp_dbgc_clr_idle_signal(DSP_DBGC_IDLE_SIGNAL_ENUM value);
+extern DSP_DBGC_IDLE_SIGNAL_ENUM dsp_dbgc_idle_signal_status(void);
+
+#else /* Not MD97 */
+
+// let it empty, because only MD97 has the DBGC module
+#endif
+
+#endif  /* __DSP_DBGC_PUBLIC_H__ */
diff --git a/mcu/interface/service/sst/dsp_public_eintc.h b/mcu/interface/service/sst/dsp_public_eintc.h
new file mode 100644
index 0000000..1cd430c
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_public_eintc.h
@@ -0,0 +1,10 @@
+#ifndef DSP_PUBLIC_EINTC_H
+#define DSP_PUBLIC_EINTC_H
+
+#include "kal_public_api.h"
+
+extern void dsp_eintc_set_idle_signal(kal_uint32 thread);
+extern void dsp_eintc_clr_idle_signal(kal_uint32 thread);
+extern kal_uint32 dsp_eintc_idle_signal_status();
+
+#endif  /* DSP_PUBLIC_EINTC_H */
\ No newline at end of file
diff --git a/mcu/interface/service/sst/dsp_swla_public.h b/mcu/interface/service/sst/dsp_swla_public.h
new file mode 100644
index 0000000..97c76af
--- /dev/null
+++ b/mcu/interface/service/sst/dsp_swla_public.h
@@ -0,0 +1,40 @@
+
+#ifndef __DSP_SWLA_PUBLIC_H__
+#define __DSP_SWLA_PUBLIC_H__
+#include "drv_asm.h"
+
+#if defined(__MD93__) || defined(__MD95__)
+typedef enum
+{
+    USIP_BRP_SWLA = ASM_NUM,
+    USIP_INNER_SWLA,
+    USIP_FEC_SWLA,
+    USIP_SPEECH_SWLA,
+    USIP_SWLA_NUM,
+    MCU_DSP_SWLA_NUM = USIP_SWLA_NUM,
+}DSP_SWLA_THREAD_ID;
+#elif defined(__MD97__) || defined(__MD97P__)
+typedef enum
+{
+    USIP_INNER_SWLA = ASM_NUM,
+    USIP_BRP_SWLA,
+    USIP_SPEECH_SWLA,
+    USIP_SWLA_NUM,
+}USIP_SWLA_THREAD_ID;
+
+typedef enum
+{
+    MSONIC_CORE0_SWLA = USIP_SWLA_NUM,
+    VSONIC_CORE0_SWLA,
+    SONIC_SWLA_NUM,
+    MCU_DSP_SWLA_NUM = SONIC_SWLA_NUM,
+    /*remove cores*/
+    MSONIC_CORE1_SWLA,    
+}SONIC_SWLA_THREAD_ID;
+
+#else
+    #error "Unknown Arch"
+#endif
+
+#endif //__DSP_SWLA_PUBLIC_H__
+
diff --git a/mcu/interface/service/sst/ex_mem_manager_public.h b/mcu/interface/service/sst/ex_mem_manager_public.h
new file mode 100644
index 0000000..65f3708
--- /dev/null
+++ b/mcu/interface/service/sst/ex_mem_manager_public.h
@@ -0,0 +1,320 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2001
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   ex_mem_manager_public.h
+ *
+ * Project:
+ * --------
+ *   Moly
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ *  
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __EX_MEM_MANAGER_PUBLIC_H__
+#define __EX_MEM_MANAGER_PUBLIC_H__
+
+#if !defined(__OFFLINE_EX_LOG_PARSER__)
+#include "kal_public_defs.h"
+#endif /* __OFFLINE_EX_LOG_PARSER__ */
+
+typedef enum{    
+//EPOF
+    EMM_EPOF_ENTER = 0,
+//EPON
+    EMM_EPON,
+//offending exception enter count
+    EMM_INT_EXCEPTION_COUNT,
+//WDT: enable caller/timestamp
+    EMM_WDT1_EN_CALLER,
+    EMM_WDT1_EN_TIME,
+    EMM_WDT2_EN_CALLER,
+    EMM_WDT2_EN_TIME,
+//WDT: disable caller/timestamp
+    EMM_WDT1_DIS_CALLER,
+    EMM_WDT1_DIS_TIME,
+    EMM_WDT2_DIS_CALLER,
+    EMM_WDT2_DIS_TIME,
+//WDT: DRV/ABN caller/timestamp
+    EMM_WDT_DRV_RST_CALLER,
+    EMM_WDT_DRV_RST_TIME,
+    EMM_WDT_ABN_RST_CALLER,
+    EMM_WDT_ABN_RST_TIME,
+//WDT: Set Check bit caller/callervpe/timestamp per VPE
+    EMM_VPE0_WDT_SET_CHK_CALLER,
+    EMM_VPE0_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE0_WDT_SET_CHK_TIME,
+    EMM_VPE1_WDT_SET_CHK_CALLER,
+    EMM_VPE1_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE1_WDT_SET_CHK_TIME,
+    EMM_VPE2_WDT_SET_CHK_CALLER,
+    EMM_VPE2_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE2_WDT_SET_CHK_TIME,
+    EMM_VPE3_WDT_SET_CHK_CALLER,
+    EMM_VPE3_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE3_WDT_SET_CHK_TIME,
+    EMM_VPE4_WDT_SET_CHK_CALLER,
+    EMM_VPE4_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE4_WDT_SET_CHK_TIME,
+    EMM_VPE5_WDT_SET_CHK_CALLER,
+    EMM_VPE5_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE5_WDT_SET_CHK_TIME,
+#if defined(__MD97__) || defined(__MD97P__)
+    EMM_VPE6_WDT_SET_CHK_CALLER,
+    EMM_VPE6_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE6_WDT_SET_CHK_TIME,
+    EMM_VPE7_WDT_SET_CHK_CALLER,
+    EMM_VPE7_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE7_WDT_SET_CHK_TIME,
+    EMM_VPE8_WDT_SET_CHK_CALLER,
+    EMM_VPE8_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE8_WDT_SET_CHK_TIME,
+    EMM_VPE9_WDT_SET_CHK_CALLER,
+    EMM_VPE9_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE9_WDT_SET_CHK_TIME,
+    EMM_VPE10_WDT_SET_CHK_CALLER,
+    EMM_VPE10_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE10_WDT_SET_CHK_TIME,
+    EMM_VPE11_WDT_SET_CHK_CALLER,
+    EMM_VPE11_WDT_SET_CHK_CALLERVPE,
+    EMM_VPE11_WDT_SET_CHK_TIME,
+#endif
+//WDT: Clear Check bit caller/callervpe/timestamp per VPE
+    EMM_VPE0_WDT_CLR_CHK_CALLER,
+    EMM_VPE0_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE0_WDT_CLR_CHK_TIME,
+    EMM_VPE1_WDT_CLR_CHK_CALLER,
+    EMM_VPE1_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE1_WDT_CLR_CHK_TIME,
+    EMM_VPE2_WDT_CLR_CHK_CALLER,
+    EMM_VPE2_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE2_WDT_CLR_CHK_TIME,
+    EMM_VPE3_WDT_CLR_CHK_CALLER,
+    EMM_VPE3_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE3_WDT_CLR_CHK_TIME,
+    EMM_VPE4_WDT_CLR_CHK_CALLER,
+    EMM_VPE4_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE4_WDT_CLR_CHK_TIME,
+    EMM_VPE5_WDT_CLR_CHK_CALLER,
+    EMM_VPE5_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE5_WDT_CLR_CHK_TIME,
+#if defined(__MD97__) || defined(__MD97P__)
+    EMM_VPE6_WDT_CLR_CHK_CALLER,
+    EMM_VPE6_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE6_WDT_CLR_CHK_TIME,
+    EMM_VPE7_WDT_CLR_CHK_CALLER,
+    EMM_VPE7_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE7_WDT_CLR_CHK_TIME,
+    EMM_VPE8_WDT_CLR_CHK_CALLER,
+    EMM_VPE8_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE8_WDT_CLR_CHK_TIME,
+    EMM_VPE9_WDT_CLR_CHK_CALLER,
+    EMM_VPE9_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE9_WDT_CLR_CHK_TIME,
+    EMM_VPE10_WDT_CLR_CHK_CALLER,
+    EMM_VPE10_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE10_WDT_CLR_CHK_TIME,
+    EMM_VPE11_WDT_CLR_CHK_CALLER,
+    EMM_VPE11_WDT_CLR_CHK_CALLERVPE,
+    EMM_VPE11_WDT_CLR_CHK_TIME,
+#endif
+//Reserved
+    EMM_Reserved1,
+    EMM_Reserved2,
+    EMM_MDCCCI_RECORD0,
+    EMM_MDCCCI_RECORD1,
+    EMM_MDCCCI_RECORD2,
+    EMM_MDCCCI_RECORD3,
+
+    EMM_HIFCLDMA_RECORD1,
+    EMM_HIFCLDMA_RECORD2,
+    EMM_HIFCLDMA_RECORD3,
+	EMM_HIFCLDMA_RECORD4,
+	EMM_HIFCLDMA_RECORD5,
+	
+    EMM_INDEX_MAX,
+}EMM_LOG_INDEX;
+
+typedef enum {
+    EMM_EXCEPTION_RECORD = 0x0,
+    EMM_DBG_INFO,
+    EMM_BOOTUP_TRACE,
+} EMM_BUF_TYPE;
+
+typedef enum
+{
+    EMM_DIRECT_WRITE_IDLETASK,
+    EMM_DIRECT_WRITE_SLP,
+    EMM_DIRECT_WRITE_DORMANT,
+    EMM_DIRECT_WRITE_ELM,
+    EMM_DIRECT_WRITE_BUS,
+    EMM_DIRECT_WRITE_SWLA,
+    EMM_DIRECT_WRITE_NVRAM,
+    EMM_DIRECT_WRITE_MAX,
+} EMM_DIRECT_WRITE_SM_INDEX;
+
+extern const kal_uint32 g_EMM_BOOTTRC_INDEX_ADDR;
+
+extern kal_bool EMM_Init(void);
+extern kal_bool EMM_WriteBootupTrace(kal_uint32 block_idx, kal_uint32 index, kal_uint32 value);
+extern kal_bool EMM_WriteDbgInfo(kal_uint32 index, void* addr);
+extern kal_bool EMM_ClearDbgInfo(void);
+extern kal_bool EMM_GetBufInfo(kal_uint32 *pAddr, kal_uint32 *pSize, EMM_BUF_TYPE type);
+extern kal_bool EMM_DirInfo_Query(kal_uint32 index, kal_uint32 *addr, kal_uint32 *size);
+extern kal_bool EMM_Write_ExceptRecord(void);
+extern kal_bool EMM_Write_Ex_Steplogging(kal_uint32 vpeid);
+extern kal_bool EMM_Write_Ex_Count(kal_uint32 vpeid);
+extern kal_bool EMM_Write_Offending_Pcmon(void);
+extern kal_bool EMM_Set_RebootPattern(void);
+extern kal_bool EMM_SetSAPReboot_Pattern(kal_char *data, kal_uint32 len);
+#endif //__EX_MEM_MANAGER_PUBLIC_H__
+
diff --git a/mcu/interface/service/sst/ex_public.h b/mcu/interface/service/sst/ex_public.h
new file mode 100644
index 0000000..b7ec812
--- /dev/null
+++ b/mcu/interface/service/sst/ex_public.h
@@ -0,0 +1,389 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   ex_public.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *	Header file for exception handling
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _EX_PUBLIC_H
+#define _EX_PUBLIC_H
+
+#if !defined(__OFFLINE_EX_LOG_PARSER__)
+#include <mips_ia_utils_public.h>
+#endif /*__OFFLINE_EX_LOG_PARSER__*/
+/*******************************************************************************
+ * Globally Constant definition
+ *******************************************************************************/
+#define EX_FORCEMEMORYDUMP 0x26409001
+
+#if defined(__MD97__) || defined(__MD97P__)
+#define EX_CC_LOG_SIZE          (10*1024)
+#define EX_LOG_SIZE             3584
+#define TOTAL_EXPTR_SIZE        EX_CC_LOG_SIZE /*for nvram */
+#define EX_LOG_SIZE_IN_HS1      (2*1024)
+#else
+#error No config yet
+#endif
+/*******************************************************************************
+ * Data Structure Definition - Common
+ *******************************************************************************/
+typedef enum {
+	BBREG_CALLBACK_STARTED,
+	BBREG_CALLBACK_DONE,
+} BBREG_BITMASK;
+/* bb register dump */
+typedef struct ex_bbreg_dump
+{
+    kal_uint32 *regions;
+	/* pointer to an array: base_1, len_1, type_1, base_2, len_2, type_2, ... */
+    /* type: 0  -- Default , Current : Byte Access */
+    /*         1  -- Byte Access                     */
+    /*         2  -- Word Access                     */
+    /*         4  -- 32-bit Access                   */
+    kal_bool (*bbreg_dump_callback)();
+    kal_char* owner;
+    kal_uint16 num; /* number of regions */
+    kal_bool is_registered;
+    kal_uint8 call_back_status;
+    void* next_dump;
+} EX_BBREG_DUMP_T;
+
+typedef enum{
+    EX_FULL_DUMP,
+    EX_MINI_DUMP,
+} ex_dump_level_enum;
+
+typedef enum{
+    EX_NO_CLEAN_SENSITIVE,
+    EX_CLEAN_SENSITIVE,
+} ex_sensitive_flag_enum;
+
+#if defined(__MTK_TARGET__)
+#define __NONCACHEDZI __attribute__ ((zero_init, section ("NONCACHEDZI")))
+#define EX_BBREG_DUMP __NONCACHEDZI EX_BBREG_DUMP_T
+#else
+#define EX_BBREG_DUMP EX_BBREG_DUMP_T
+#endif /*__MTK_TARGET__*/
+
+#if defined(__MTK_TARGET__)
+#define EX_MINIDUMP_SYMBOL_CLEAR
+#endif
+
+typedef enum ex_trace_type
+{
+    ex_trace_type_cadefa = 0,
+    ex_trace_type_common,
+    ex_trace_type_afound,
+} EX_TRACE_TYPE;
+
+typedef enum {
+    MINIDUMP_ITEM_CLEAN_STARTED,
+    MINIDUMP_ITEM_CLEAN_DONE,
+} MINIDUMP_ITEM_BITMASK;
+
+typedef enum {
+    EX_BOOT_MD = 0,
+    EX_BOOT_SYSTEM,
+    EX_POST_RESET_CORE_DUMP,
+} ex_boot_type;
+
+typedef struct ex_minidump_item
+{
+    kal_char* name;
+    kal_uint32 start;
+    kal_uint32 len;
+    kal_uint8 item_status; 
+} EX_MINIDUMP_ITEM_T;
+
+typedef struct ex_minidump_clear_area EX_MINIDUMP_AREA_T;
+struct ex_minidump_clear_area
+{
+    EX_MINIDUMP_ITEM_T *regions;
+    kal_char* owner;
+    kal_uint16 num; /* number of regions */
+    kal_bool is_registered;
+    EX_MINIDUMP_AREA_T* next_dump;
+};
+#define CLEAR_SYMBOL_WHEN_MINIDUMP(symbol) {#symbol, (kal_uint32)&symbol, sizeof(symbol)}
+
+/*******************************************************************************
+ * Globally Exported function
+ *******************************************************************************/
+extern void ex_register_bbreg_dump(EX_BBREG_DUMP_T *dump, kal_char* filename);
+
+#if defined(EX_MINIDUMP_SYMBOL_CLEAR)
+extern void ex_register_minidump_area(EX_MINIDUMP_AREA_T *dump, kal_char* filename);
+extern void ex_clean_symbols();
+#else
+#define ex_register_minidump_area(dump, filename) {(void)(dump); (void)(filename);}
+#define ex_clean_symbols()
+#endif
+
+extern void ex_set_memorydump_level(ex_dump_level_enum dump_level);
+
+extern void ex_set_sensitive_flag(ex_sensitive_flag_enum sensitive_flag);
+extern ex_sensitive_flag_enum ex_get_sensitive_flag();
+extern kal_bool ex_isNested(void);
+extern kal_bool ex_set_reboot_type(ex_boot_type type);
+
+/*******************************************************************************
+ * Globally Exported macro
+ *******************************************************************************/
+#define INT_DefaultMemoryDumpFlag SHARED_VAR(g_INT_DefaultMemoryDumpFlag)
+#define INT_MemoryDumpFlag SHARED_VAR(g_INT_MemoryDumpFlag)
+#define INT_MemoryDumpLevel SHARED_VAR(g_INT_MemoryDumpLevel)
+ 
+/* memory dump related APIs */
+#if defined(__PRODUCTION_RELEASE__)
+/* production release: depends on set/clear's setting */
+#define ex_is_forcememorydump() (INT_MemoryDumpFlag == EX_FORCEMEMORYDUMP)
+#define ex_get_memorydump_flag(ptr) (*ptr = INT_MemoryDumpFlag)
+#else
+/* under construction !*/
+/* under construction !*/
+#if !defined(__FCS_SUPPORT__)
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+#endif /* __PRODUCTION_RELEASE__ */
+#define ex_set_memorydump_flag() (INT_MemoryDumpFlag = EX_FORCEMEMORYDUMP)
+#define ex_clear_memorydump_flag() (INT_MemoryDumpFlag = 0)
+
+/* INT_DefaultMemoryDumpFlag is for Catcher/ELT to refer to disconnection behaviour */
+#define ex_get_default_memorydump_flag(ptr) (*ptr = INT_DefaultMemoryDumpFlag)
+#define ex_set_defult_memorydump_flag() (INT_DefaultMemoryDumpFlag = EX_FORCEMEMORYDUMP)
+#define ex_clear_default_memorydump_flag() (INT_DefaultMemoryDumpFlag = 0)
+
+#define EX_REGISTER_BBREG_DUMP(dump) \
+    do { \
+        ex_register_bbreg_dump(dump, (kal_char *)__FILE__);	\
+    } while (0)
+
+#if defined(EX_MINIDUMP_SYMBOL_CLEAR)
+#define EX_REGISTER_MINIDUMP_AREA(dump, items) \
+    do { \
+        (dump)->regions = (EX_MINIDUMP_ITEM_T*)(items); \
+        (dump)->num = sizeof(items) / (sizeof(EX_MINIDUMP_ITEM_T)); \
+        ex_register_minidump_area((dump), (kal_char *)__FILE__);	\
+    } while (0)
+#else
+#define EX_REGISTER_MINIDUMP_AREA(dump, items) {(void)(dump); (void)(items);}
+#endif
+/*******************************************************************************
+ * Globally Exported variables
+ *******************************************************************************/
+DECLARE_SHARED_VAR(kal_uint32, g_INT_DefaultMemoryDumpFlag)
+DECLARE_SHARED_VAR(kal_uint32, g_INT_MemoryDumpFlag ) 
+
+
+
+#ifdef __MTK_TARGET__
+#define sst_get_exception_count() miu_mfc0(MIU_C0_KSCRATCH3)
+#define INT_QueryExceptionStatus() (sst_get_exception_count() > 0)
+#else
+extern kal_uint8 sst_get_exception_count(void);
+extern kal_bool INT_QueryExceptionStatus(void);
+#endif
+
+#endif /* _EX_PUBLIC_H */
+
+
diff --git a/mcu/interface/service/sst/md32_access_ctrl_public.h b/mcu/interface/service/sst/md32_access_ctrl_public.h
new file mode 100644
index 0000000..336ec4b
--- /dev/null
+++ b/mcu/interface/service/sst/md32_access_ctrl_public.h
@@ -0,0 +1,77 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   md32_access_ctrl_public.h
+ *
+ * Project:
+ * --------
+ *   UMOMLY
+ *
+ * Description:
+ * ------------
+ *   This Module defines the HW initialization.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*******************************************************************************
+ * Include header files.
+ *******************************************************************************/
+#ifndef MD32_ACCESS_CTRL_PUBLIC_H
+#define MD32_ACCESS_CTRL_PUBLIC_H
+
+
+void INT_EnableMD32DBGEn(void);
+
+#endif  /* MD32_ACCESS_CTRL_PUBLIC_H */
diff --git a/mcu/interface/service/sst/md32_boot_public.h b/mcu/interface/service/sst/md32_boot_public.h
new file mode 100644
index 0000000..66e8996
--- /dev/null
+++ b/mcu/interface/service/sst/md32_boot_public.h
@@ -0,0 +1,194 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   md32_boot.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This Module defines the HW initialization.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*******************************************************************************
+ * Include header files.
+ *******************************************************************************/
+#ifndef MD32_BOOT_PUBLIC_H
+#define MD32_BOOT_PUBLIC_H
+
+typedef enum {
+	CORE_USIP,
+	CORE_RAKE,
+	CORE_SCQ16,
+    CORE_SONIC,
+	CORE_NUM,
+	CORE_MAX = 0xFFFFFFFF,
+} MD32_CORE_TYPE;
+
+#ifndef __MD32_PBP__
+#define HWITC_START kal_hrt_take_itc_lock(KAL_ITC_DSP_DOWNLOAD , KAL_INFINITE_WAIT)
+#define HWITC_END kal_hrt_give_itc_lock(KAL_ITC_DSP_DOWNLOAD)
+
+#include "kal_public_api.h"
+
+#if defined(MT6763)|| defined(MT6739) || defined(MT6771) || defined(MT6295M) || defined(MT6765) || defined(MT6761) || defined(MT3967) || defined(MT6297) || defined(__MD97__) || defined(MT6779) || defined(__MD97P__)
+	#define SCQ_PM_CRC32_OFFSET   0x20
+	#define SCQ_DM_CRC32_OFFSET   0x24
+#if defined(MT6297) || defined(__MD97__) || defined(__MD97P__)
+	#define SCQ_GLOBAL_CON_base   BASE_MADDR_INR0_SCQ_GLOBAL_CON
+	#define SHARE_PM_base         BASE_MADDR_INR0_MEM
+	#define SHARE_DM_base         BASE_MADDR_INR0_SHARED_DM
+	#define PRIVATE_DM0_base      BASE_MADDR_INR0_LOCAL_DM
+	#define PRIVATE_DM1_base      BASE_MADDR_INR0_LOCAL_DM_1
+	#define PRIVATE_DM2_base      BASE_MADDR_INR0_LOCAL_DM_2
+	#define PRIVATE_DM3_base      BASE_MADDR_INR0_LOCAL_DM_3
+	#define SCq16_0_CTRLREGS_base BASE_MADDR_INR0_SCQ_VU_CR
+	#define SCq16_1_CTRLREGS_base BASE_MADDR_INR0_SCQ_VU_CR_1
+	#define SCq16_2_CTRLREGS_base BASE_MADDR_INR0_SCQ_VU_CR_2
+	#define SCq16_3_CTRLREGS_base BASE_MADDR_INR0_SCQ_VU_CR_3
+#else
+	#define SCQ_GLOBAL_CON_base   BASE_MADDR_BRAM_SCQ_GLOBAL_CON
+	#define SHARE_PM_base         BASE_MADDR_BRAM_SCQ_SHARED_PM
+	#define SHARE_DM_base         BASE_MADDR_BRAM_SCQ_SHARED_DM
+	#define PRIVATE_DM0_base      BASE_MADDR_BRAM_SCQ0_LOCAL_DM
+	#define PRIVATE_DM1_base      BASE_MADDR_BRAM_SCQ1_LOCAL_DM
+	#define SCq16_0_CTRLREGS_base BASE_MADDR_BRAM_SCQ0_VU_CR
+	#define SCq16_1_CTRLREGS_base BASE_MADDR_BRAM_SCQ1_VU_CR
+#endif
+#else
+	#error "need to define address for new chip"
+#endif
+
+
+/****************************/
+/*********** Init ***********/
+/****************************/
+extern kal_int32 MD32_Init();
+extern kal_int32 Coresonic_Init();
+
+
+/****************************/
+/********** Loader **********/
+/****************************/
+typedef enum {
+    MD32_LOADER_RAKE_RET_OK,
+    MD32_LOADER_USIP_RET_OK,
+#if defined(__MD97__) || defined(__MD97P__)
+    MD32_LOADER_SONIC_RET_OK,
+#endif
+    MD32_LOADER_RAKE_DDL_RET_OK,
+    MD32_LOADER_UNGATE_RET_OK,
+    MD32_LOADER_RET_DMA_RUNNING,
+    MD32_LOADER_RET_ERR,
+} MD32_LOADER_RET;
+
+extern MD32_LOADER_RET RAKE_Load();
+extern MD32_LOADER_RET USIP_Load();
+extern MD32_LOADER_RET SONIC_Load();
+extern MD32_LOADER_RET MD32_Ungate(MD32_CORE_TYPE md32_core);
+//MD32_LOADER_RET MD32_BootByDMA(MD32_BIN_TYPE *md32_bins, kal_uint32 bin_num);
+extern void Init_uSIP_bootuppattern();
+extern kal_bool is_rake_user_using_ddl_api();
+extern kal_bool can_sleep_flow_active_rake();
+extern kal_bool DSP_IsFirstMpuSettingDone(void);
+/****************************/
+/********** Query ***********/
+/****************************/
+typedef enum {
+   MD32_3G_FDD,
+   MD32_3G_TDD,
+} MD32_3G_MODE;
+
+typedef struct {
+   kal_uint32 pm_com;
+   kal_uint32 dm_com;
+   kal_uint32 pm_3g;
+   kal_uint32 dm_3g;
+   kal_uint32 pm_lte;
+   kal_uint32 dm_lte;
+   kal_uint32 pm_unused;
+   kal_uint32 dm_unused;
+} MD32_MEM_STATUS;
+
+const MD32_MEM_STATUS *MD32_GetBRPMemStatus(MD32_3G_MODE mode);
+const MD32_MEM_STATUS *MD32_GetDFEMemStatus(void);
+const MD32_MEM_STATUS *MD32_GetDFE1MemStatus(void);
+//kal_bool MD32_IsMD32Running(MD32_BIN_TYPE md32_type);
+
+/****************************/
+/********* Version **********/
+/****************************/
+/*
+const kal_char *MD32_GetProject(MD32_BIN_TYPE md32_type);
+const kal_char *MD32_GetFlavor(MD32_BIN_TYPE md32_type);
+const kal_char *MD32_GetLabel(MD32_BIN_TYPE md32_type);
+const kal_char *MD32_GetBuildTime(MD32_BIN_TYPE md32_type);
+*/
+
+/****************************/
+/********* RTLCOSIM *********/
+/****************************/
+#define BRP_RTLCOSIM_LTE (0x1)
+#define BRP_RTLCOSIM_FDD (0x1<<1)
+#define BRP_RTLCOSIM_TDD (0x1<<2)
+
+//void MD32_SetBRPMode_RTLCOSIM(kal_uint32 mode);
+//void MD32_Ungate_RTLCOSIM(MD32_BIN_TYPE md32_type);
+#endif /* __MD32_PBP__ */
+
+#endif  /* MD32_BOOT_PUBLIC_H */
diff --git a/mcu/interface/service/sst/mddbg_public.h b/mcu/interface/service/sst/mddbg_public.h
new file mode 100644
index 0000000..2c4ce2e
--- /dev/null
+++ b/mcu/interface/service/sst/mddbg_public.h
@@ -0,0 +1,225 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   mddbg_pulbic.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Modem debugging related implementation
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef __MDDBG_PUBLIC_H__
+#define __MDDBG_PUBLIC_H__
+// remove to enable MDDBG for Gen97 FPGA debug temporarily, let user call
+// mddbg_set_bp_int_shaolin_temp
+// mddbg_set_wp_int_shaolin_temp
+#if (defined(__MTK_SECURE_PLATFORM__) || defined(__PRODUCTION_RELEASE__) || !defined(__MTK_TARGET__)) 
+    #define DISABLE_MDDBG_FUNCTION
+#endif
+
+
+typedef enum MDDBG_HDL_TYPE_e {   
+    MDDBG_HT_MEMDUMP,
+    MDDBG_HT_LOG,
+    MDDBG_HT_MAX,
+} MDDBG_HDL_TYPE;
+
+typedef enum MDDBG_WP_ACCESS_TYPE_e {
+    MDDBG_WAT_WRITE = 1,
+    MDDBG_WAT_READ,  
+    MDDBG_WAT_RW,
+} MDDBG_WP_ACCESS_TYPE;
+
+typedef enum MDDBG_WP_MONITOR_BYTE_e {
+    MDDBG_WMB_1BYTE = 1,
+    MDDBG_WMB_2BYTES,
+    MDDBG_WMB_3BYTES,
+    MDDBG_WMB_4BYTES,
+    MDDBG_WMB_MAX,
+} MDDBG_WP_MONITOR_BYTE;
+
+typedef enum MDDBG_RESULT_e {
+    MDDBG_SUCCESS,
+    MDDBG_INVALID_PARAM,
+    MDDBG_BP_TOO_MANY,
+    MDDBG_BP_ALREADY_ENABLED,
+    MDDBG_BP_ALREADY_DISABLED,
+    MDDBG_WP_TOO_MANY,
+    MDDBG_WP_MON_OUT_OF_RANGE,
+    MDDBG_VPE_INDEX_OUT_OF_RANGE,
+    MDDBG_BP_INDEX_OUT_OF_RANGE,
+    MDDBG_WP_INDEX_OUT_OF_RANGE,
+    MDDBG_SHOULD_NOT_CALL_IN_SYSTEMINIT,
+} MDDBG_RESULT;
+
+typedef enum MDDBG_BP_NUM_e{
+    MDDBG_BP_0,
+    MDDBG_BP_1,
+#if defined (__MIPS_I7200__)
+	MDDBG_BP_2,
+	MDDBG_BP_3,
+#endif
+}MDDBG_BP_NUM;
+
+typedef enum MDDBG_WP_NUM_e{
+    MDDBG_WP_0,
+#if defined (__MIPS_I7200__)
+	MDDBG_WP_1,
+	MDDBG_WP_2,
+#endif   
+}MDDBG_WP_NUM;
+
+
+typedef struct mddbg_bp_info {
+    kal_uint32 address;
+    kal_bool enable;
+} mddbg_bp_info_st;
+
+typedef struct mddbg_wp_info {
+    kal_uint32 address;
+    kal_uint32 mask;
+    MDDBG_WP_ACCESS_TYPE access_type;
+    kal_bool enable;
+} mddbg_wp_info_st;
+
+typedef struct mddbg_reg_t{
+    kal_uint32 ctrl_addr;
+    kal_uint32 watchHi;
+    kal_uint32 queryNum;
+}mddbg_reg_t;
+
+
+
+
+#define CONFIG_TAG_BP0  0   // should not be used here, because used as stack protection. Check: KAL_WATCHPOINT_3_SET
+#define CONFIG_TAG_BP1  1   
+#define CONFIG_TAG_WP0  2
+#define CONFIG_TAG_WP1  3
+
+#define CONFIG_ADDRESS(addr)    (addr << 3)
+#define CONFIG_EXCEPTION_TYPE_BIT 0X7
+#define CONFIG_WRITE 0x1
+#define CONFIG_READ 0x2
+#define CONFIG_INSTRUCTION 0x4
+#define CONFIG_MASK_BIT 0X1FF
+#define CONFIG_MASK(mask) (mask << 3)
+#define CONFIG_NO_MASK 0
+#define CONFIG_NIL_ADDR 0xdead0000
+
+#define CONFIG_VPE0 1
+#define CONFIG_VPE1 1 << 1
+#define CONFIG_VPE2 1 << 2
+#define CONFIG_VPE3 1 << 3
+
+#if defined(__MIPS_IA__)
+	#define CONFIG_MAX_VPE 4
+	#define CONFIG_VPE_ALL CONFIG_VPE0 | CONFIG_VPE1 | CONFIG_VPE2 | CONFIG_VPE3 
+
+#elif defined(__MIPS_I7200__) 
+
+	#define CONFIG_VPE4 1 << 4
+	#define CONFIG_VPE5 1 << 5
+	#define CONFIG_VPE6 1 << 6
+	#define CONFIG_VPE7 1 << 7
+	#define CONFIG_VPE8 1 << 8
+	#define CONFIG_VPE9 1 << 9
+	#define CONFIG_VPE10 1 << 10
+	#define CONFIG_VPE11 1 << 11
+
+	#define CONFIG_MAX_VPE 12
+	/* 12 bit is 0xfff, too painful to OR all above */
+	#define CONFIG_VPE_ALL 0xfff 
+
+#endif
+
+
+MDDBG_RESULT mddbg_init_public(void);
+MDDBG_RESULT mddbg_set_breakpoint(kal_uint32 vpeIndexes, kal_uint32 selectBP, kal_uint32 bp_addr, kal_uint32 addr_mask);
+MDDBG_RESULT mddbg_set_watchpoint(kal_uint32 vpeIndexes, kal_uint32 selectWP, kal_uint32 wp_addr, kal_uint32 addr_mask, kal_uint32 type);
+MDDBG_RESULT mddbg_remove_watchpoint(kal_uint32 vpeIndexes, kal_uint32 selectWP);
+MDDBG_RESULT mddbg_remove_breakpoint(kal_uint32 vpeIndexes, kal_uint32 selectBP);
+MDDBG_RESULT mddbg_applyAll(void/*MDDBG_HDL_TYPE*/);
+MDDBG_RESULT mddbg_resetAll(void);
+MDDBG_RESULT mddbg_query(void);
+mddbg_reg_t mddbg_get_queryBPResult(kal_uint32 vpeInd, kal_uint32 selectBP);
+mddbg_reg_t mddbg_get_queryWPResult(kal_uint32 vpeInd, kal_uint32 selectWP);
+kal_uint32 mddbg_get_offender(kal_uint32 vpe,kal_uint32 watchpoint);
+#if defined (__MIPS_I7200__)  
+MDDBG_RESULT mddbg_set_bp_int_shaolin_temp (kal_uint32 tcIndex, kal_uint32 selectBP, kal_uint32 bp_addr, kal_uint32 addr_mask);
+MDDBG_RESULT mddbg_set_wp_int_shaolin_temp (kal_uint32 tcIndex, kal_uint32 selectWP, kal_uint32 wp_addr, kal_uint32 addr_mask, kal_uint32 type);
+#endif
+
+#endif // __MDDBG_PUBLIC_H__
diff --git a/mcu/interface/service/sst/rake_api_public.h b/mcu/interface/service/sst/rake_api_public.h
new file mode 100644
index 0000000..3f1ce7f
--- /dev/null
+++ b/mcu/interface/service/sst/rake_api_public.h
@@ -0,0 +1,89 @@
+#ifndef RAKE_API_PUBLIC_H
+#define RAKE_API_PUBLIC_H
+
+#if defined(__MD97__) || defined(__MD97P__)
+#include "dsp_module_based_api_public.h"
+#else //defined(__MD97__)
+
+#include "dsp_control_public.h"
+
+/***************************************************************/
+/********* Enum for BootDoneCheck Return Value *************/
+/***************************************************************/
+typedef enum{
+    RAKE_NOTYETDONE,
+    RAKE_BOOTDONE,
+    RAKE_NOT_DEACTIVEDONE,
+    RAKE_DEACTIVEDONE
+}RAKE_BOOTDONECHECK_RETVALUE;
+
+#define RAKE_NOT_ACTIVEDONE     RAKE_NOTYETDONE
+#define RAKE_ACTIVEDONE         RAKE_BOOTDONE
+
+/***************************************************************/
+/********* Function Prototype **********************************/
+/***************************************************************/
+extern RAKE_BOOTDONECHECK_RETVALUE RAKE_BootDoneCheck(RAKE_API_USER);
+
+/* Common API */
+extern DSP_CONTROL_IDLE_FLAG_STATUS rake_check_idle_flag(RAKE_API_USER);
+extern kal_uint32 rake_ddl_check_idle_flag_bitmap(kal_uint32);
+extern kal_bool is_myself_duty_rat(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_uint32 return_dutyrat_of_thread(DSP_CDIF_CORE_ENUM);
+extern void firstboot_activate(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/* Activate Relatives */
+extern void rake_activate(RAKE_API_USER);
+
+/* Deactivate Relatives */
+extern void rake_deactivate(RAKE_API_USER, CMIFZI_CTRL);
+extern RAKE_CONTROL_STATUS rake_deactive_done_check(RAKE_API_USER);
+
+/* DDL Relatives */
+extern void rake_ddl_start(RAKE_API_USER , DDL_MODE);
+extern void rake_ddl_status_mode_query(DDL_STATUS*, DDL_MODE*);
+extern kal_bool ddl_check_all_target_user_are_deactive(DSP_CDIF_CORE_ENUM);
+extern kal_bool ddl_has_rake_user_call_deactivate(kal_uint32);
+extern kal_uint32 dsp_check_ddl_user_status(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/***************************************************************/
+/********* Function Definition *********************************/
+/***************************************************************/
+/***** Sleep Flow APIs for user *****/
+/* FirstBoot API */
+#define topsm_return_dutyrat_of_rake                    firstboot_topsm_query(DSP_CONTROL_RAKE)
+
+#define is_myself_duty_user_of_rake(user_id)            is_myself_duty_rat(DSP_CONTROL_RAKE, user_id)
+/* First Boot Activate Use */
+#define rake_firstboot_activate(user_id)                firstboot_activate(DSP_CONTROL_RAKE, user_id)
+
+/* Check idle APIs */
+#define rake_check_ddl_user_status(user_bitmap)         dsp_check_ddl_user_status(DSP_CONTROL_RAKE, user_bitmap)
+#define dsp_rake_check_idle_flag(user_id)               rake_check_idle_flag(user_id)
+
+/* Activate APIs*/
+#define dsp_rake_activate(user_id)                      rake_activate(user_id)
+
+/* Activate check APIs */
+#define dsp_rake_done_check(user_id)                    RAKE_BootDoneCheck(user_id)
+#define dsp_rake_active_done_check(user_id)             RAKE_BootDoneCheck(user_id)
+
+/* Deactivate APIs */
+#define dsp_rake_deactivate(user_id)                    rake_deactivate(user_id, CMIFZI_EN)
+#define dsp_rake_deactivate_wo_cmifzi(user_id)          rake_deactivate(user_id, CMIFZI_DIS)
+
+/* Deactivate check APIs */
+#define dsp_rake_deactive_done_check(user_id)           rake_deactive_done_check(user_id)
+
+/***** DDL Flow APIs for user *****/
+// DDL check if RAKE is deactive
+#define ddl_l2tcm_is_rake_deactive()                    ddl_check_all_target_user_are_deactive(DSP_CONTROL_RAKE)
+
+// Trigger DDL
+#define dsp_rake_ddl_start(user_id, bin_mode)           rake_ddl_start(user_id, bin_mode)   
+
+// Check rake DDL mode/status
+#define dsp_rake_ddl_status_mode_query(status, bin_mode)    rake_ddl_status_mode_query(status, bin_mode)  
+
+#endif //defined(__MD97__)
+#endif  /* RAKE_API_PUBLIC_H */
diff --git a/mcu/interface/service/sst/sst_interface.h b/mcu/interface/service/sst/sst_interface.h
new file mode 100644
index 0000000..460a8a9
--- /dev/null
+++ b/mcu/interface/service/sst/sst_interface.h
@@ -0,0 +1,139 @@
+#ifndef SST_INTERFACE_H
+#define SST_INTERFACE_H
+
+#include "nvram_data_items.h"
+
+#define SST_PROTECTED_NVRAM_LID_READ_LIMIT             0x1
+#define SST_PROTECTED_NVRAM_LID_WRITE_LIMIT            0x2
+
+typedef struct sst_protected_nvram_lid_struct {
+    nvram_lid_enum          m_lid;
+    kal_uint16              m_attr;
+} SST_PROTECTED_NVRAM_LID;
+
+typedef struct sst_allowed_task_struct {
+    module_type             m_mod_id;
+} SST_ALLOWED_TASK;
+
+/* 
+ * Efuse region index definition
+ */
+#define EFUSE_IDX_C_DAT0            0
+#define EFUSE_IDX_C_DAT1            1
+#define EFUSE_IDX_C_DAT2            2
+#define EFUSE_IDX_C_DAT3            3
+#define EFUSE_IDX_C_DAT4            4
+#define EFUSE_IDX_C_DAT5            5
+#define EFUSE_IDX_C_CTRL0           6
+#define EFUSE_IDX_C_CTRL1           7
+
+/*SST Efuse blowing error code*/
+#define SST_EFUSE_BLOW_DONE                           0
+#define SST_EFUSE_BLOW_AP_NOT_READY            0x10000000
+#define SST_EFUSE_BLOW_DATA_FAIL               0x20000000
+#define SST_EFUSE_BLOW_START_FAIL              0x40000000
+#define SST_EFUSE_BLOW_LOCK_FAIL               0x80000000
+#define SST_EFUSE_BLOW_END_FAIL                0x01000000
+#define SST_EFUSE_BLOW_BIT_NOT_SUPPORT         0x02000000
+#define SST_EFUSE_BLOW_REGION_NOT_SUPPORT      0x04000000
+#define SST_EFUSE_BLOW_CHIP_NOT_SUPPORT        0x08000000
+#define SST_EFUSE_BLOW_NOT_INIT                0x00100000
+#define SST_EFUSE_BLOW_PROCESS_FAIL            0x00200000
+#define SST_EFUSE_BLOW_REINIT_FAIL             0x00400000
+#define SST_EFUSE_BLOW_CCCI_FAIL               0x00800000
+
+/*****************************************************************************
+ * FUNCTION
+ *	SST_Get_ChipRID
+ *
+ * DESCRIPTION
+ *	The function returns per-chip random ID to the caller.  
+ *
+ * PARAMETERS
+ *	[INPUT/OUTPUT] pRid  : The buffer that is used to store the per-chip random ID.
+ *	[INPUT] buf_len : Length that the caller wants for the per-chip random ID in "bits".
+ *
+ * RETURNS
+ *	KAL_TRUE  : Get random ID Success
+ *	KAL_FALSE : Get random ID failed
+ *
+ * NOTES
+ *    N/A
+ *
+ *****************************************************************************/
+extern kal_bool SST_Get_ChipRID(kal_char *pRid, kal_int32 buf_len);
+
+
+/*****************************************************************************
+ * FUNCTION
+ *	SST_Get_ChipRK
+ *
+ * DESCRIPTION
+ *	The function returns per-chip random key to the caller.  
+ *
+ * PARAMETERS
+ *	[INPUT/OUTPUT] key  : The buffer that is used to store the per-chip random key.
+ *	[INPUT] len : Length that the caller wants for the per-chip random key in bytes.
+ *
+ * RETURNS
+ *	KAL_TRUE  : Get random key Success
+ *	KAL_FALSE : Get random key failed
+ *
+ * NOTES
+ *    N/A
+ *
+ *****************************************************************************/
+extern kal_bool SST_Get_ChipRK(kal_char *key, kal_int32 len);
+
+/*************************************************************************
+* FUNCTION
+*  SST_Get_EFUSE_Data
+*
+* DESCRIPTION
+*  This function get specified length of efuse data and put in the buffer
+*
+* PARAMETERS
+*  data_type -     efuse field
+*  buf -    pointer to the buffer to store efuse data
+*  len -    efuse data length expected to read
+*
+* RETURNS
+*  KAL_TRUE/KAL_FALSE
+*
+*************************************************************************/
+typedef enum{
+	AP_SBC_EN = 1,
+	C_CTRL0,
+ 	C_CTRL1,
+	C_DAT0,
+	C_DAT1,
+	C_DAT2,
+	C_DAT3,	
+	C_DAT4,
+	C_DAT5,
+	C_DAT6,
+	C_DAT7,
+}EFUSE_DATA_TYPE;
+
+
+kal_bool SST_Get_EFUSE_Data(EFUSE_DATA_TYPE data_type, kal_uint8* buf, kal_uint8 len);
+
+/*************************************************************************
+* FUNCTION
+*  SST_ilm_inject_check
+*
+* DESCRIPTION
+*  This function checks whether input ILM is permitted to access the specified NVRAM LID 
+*
+* PARAMETERS
+*  ilm_ptr -     read/write request ILM
+*
+* RETURNS
+*  KAL_TRUE/KAL_FALSE
+*  KAL_TRUE: The access is permitted, i.e. pass checking successfully
+*  KAL_FALSE: The access is prohibited, i.e. fails checking
+*************************************************************************/
+
+kal_uint32 SST_ilm_inject_check(ilm_struct *ilm_ptr);
+
+#endif
diff --git a/mcu/interface/service/sst/sst_temp_ex_handlers.h b/mcu/interface/service/sst/sst_temp_ex_handlers.h
new file mode 100644
index 0000000..a1a0f2e
--- /dev/null
+++ b/mcu/interface/service/sst/sst_temp_ex_handlers.h
@@ -0,0 +1,176 @@
+#ifndef __SST_TEMP_EX_HANDLERS_H__
+#define __SST_TEMP_EX_HANDLERS_H__
+
+.extern error_epc_trap
+
+/* The assembly instructions in two parts have no difference. 
+   Must keep nop in BD slot, even the ISA has no BD slot.(keep consistency)
+   The macro user/caller may(or not) include regbase.h */
+
+
+.macro INSTALL_TEMP_EXCEPTION_VECTOR
+.set push
+.set noreorder
+
+#if defined(_MIPS_REGDEF_H_)
+/* reg symbols would be replaced by those defined in regbase.h */
+
+    la      a0, INT_TEMP_general_ex_vector
+    ins     a0, zero, 0, 12
+    ori     a0, a0, EBASE_WG
+    mtc0    a0, C0_EBASE
+    ehb
+
+#if !defined(__MIPS_I7200__) /* I7200 CFG5.K & CV are RO */
+    li      a0, 0
+    li      a1, 0x1
+    ins     a0, a1, CFG5_CV_SHIFT, 1
+    ins     a0, a1, CFG5_K_SHIFT, 1
+    mtc0    a0, C0_CONFIG5
+    ehb
+#endif
+
+#if defined(__MIPS_I7200__)
+    li      a0, 0x38  /* write 1 to clear */
+#else
+    li      a0, 0x7
+#endif
+    mtc0    a0, C0_WATCHHI
+    mtc0    zero, C0_WATCHLO
+    mtc0    a0, C0_WATCHHI, 1
+    mtc0    zero, C0_WATCHLO, 1
+    mtc0    a0, C0_WATCHHI, 2
+    mtc0    zero, C0_WATCHLO, 2
+    mtc0    a0, C0_WATCHHI, 3
+    mtc0    zero, C0_WATCHLO, 3
+#if defined(__MIPS_I7200__)
+    mtc0    a0, C0_WATCHHI, 4
+    mtc0    zero, C0_WATCHLO, 4
+    mtc0    a0, C0_WATCHHI, 5
+    mtc0    zero, C0_WATCHLO, 5
+    mtc0    a0, C0_WATCHHI, 6
+    mtc0    zero, C0_WATCHLO, 6
+    mtc0    a0, C0_WATCHHI, 7
+    mtc0    zero, C0_WATCHLO, 7
+#endif
+    
+    la      a0, error_epc_trap
+    mtc0    a0, C0_ERRPC
+    mtc0    zero, C0_CAUSE
+    mtc0    zero, C0_COMPARE
+    mtc0    zero, C0_KSCRATCH3 // zero scratch3 for exception status
+    mtc0    zero, C0_STATUS       // write C0_STATUS
+    ehb
+
+#else  /* _MIPS_REGDEF_H_ */
+
+    la      $a0, INT_TEMP_general_ex_vector
+    ins     $a0, $zero, 0, 12
+    ori     $a0, $a0, EBASE_WG
+    mtc0    $a0, C0_EBASE
+    ehb
+
+#if !defined(__MIPS_I7200__) /* I7200 CFG5.K & CV are RO */
+    li      $a0, 0
+    li      $a1, 0x1
+    ins     $a0, $a1, CFG5_CV_SHIFT, 1
+    ins     $a0, $a1, CFG5_K_SHIFT, 1
+    mtc0    $a0, C0_CONFIG5
+    ehb
+#endif
+
+
+#if defined(__MIPS_I7200__)
+    li      $a0, 0x38  /* write 1 to clear */
+#else
+    li      $a0, 0x7   /* write 1 to clear */
+#endif
+    mtc0    $a0, C0_WATCHHI
+    mtc0    $zero, C0_WATCHLO
+    mtc0    $a0, C0_WATCHHI, 1
+    mtc0    $zero, C0_WATCHLO, 1
+    mtc0    $a0, C0_WATCHHI, 2
+    mtc0    $zero, C0_WATCHLO, 2
+    mtc0    $a0, C0_WATCHHI, 3
+    mtc0    $zero, C0_WATCHLO, 3
+#if defined(__MIPS_I7200__)
+    mtc0    $a0, C0_WATCHHI, 4
+    mtc0    $zero, C0_WATCHLO, 4
+    mtc0    $a0, C0_WATCHHI, 5
+    mtc0    $zero, C0_WATCHLO, 5
+    mtc0    $a0, C0_WATCHHI, 6
+    mtc0    $zero, C0_WATCHLO, 6
+    mtc0    $a0, C0_WATCHHI, 7
+    mtc0    $zero, C0_WATCHLO, 7
+#endif
+    
+    la      $a0, error_epc_trap
+    mtc0    $a0, C0_ERRPC
+    mtc0    $zero, C0_CAUSE
+    mtc0    $zero, C0_COMPARE
+    mtc0    $zero, C0_KSCRATCH3 // $zero scratch3 for exception status
+    mtc0    $zero, C0_STATUS       // write C0_STATUS
+    ehb
+
+#endif
+
+.set pop
+.endm INSTALL_TEMP_EXCEPTION_VECTOR
+
+
+
+
+
+.macro RESET_EXCEPTION_SP_ARRAY
+.set push
+.set noreorder
+    /* Only Core0 VPE0 do exception stack reset. SST_Exception_SP is set to $zero for exception vector
+     * to know if we are in early boot flow or in dormant flow.
+     */
+
+#if defined(_MIPS_REGDEF_H_)
+/* reg symbols would be replaced by those defined in regbase.h */
+
+    mfc0    a0, C0_EBASE
+    ext     a0, a0, 0, 10
+#if defined(__MIPS_I7200__)
+    srl     a1, a0, 2
+    subu    a0, a0, a1
+#endif
+    bgtz    a0, INT_excep_sp_reset_done
+    nop
+
+    li      a0, 0xFFFFFFFF
+    la      a1, dormant_exception_area_ptr
+    sw      a0, 0(a1)
+
+INT_excep_sp_reset_done:
+    // function end!
+
+#else  /* _MIPS_REGDEF_H_ */
+
+    mfc0    $a0, C0_EBASE
+    ext     $a0, $a0, 0, 10
+#if defined(__MIPS_I7200__)
+    srl     $a1, $a0, 2
+    subu    $a0, $a0, $a1
+#endif
+    bgtz    $a0, INT_excep_sp_reset_done
+    nop
+
+    li      $a0, 0xFFFFFFFF
+    la      $a1, dormant_exception_area_ptr
+    sw      $a0, 0($a1)
+
+INT_excep_sp_reset_done:
+    // function end!
+
+#endif
+
+.set pop
+.endm RESET_EXCEPTION_SP_ARRAY
+
+
+
+
+#endif // __SST_TEMP_EX_HANDLERS_H__
diff --git a/mcu/interface/service/sst/swla_public.h b/mcu/interface/service/sst/swla_public.h
new file mode 100644
index 0000000..7984c83
--- /dev/null
+++ b/mcu/interface/service/sst/swla_public.h
@@ -0,0 +1,43 @@
+#ifndef SWLA_PUBLIC_H
+#define SWLA_PUBLIC_H
+
+#include "kal_public_defs.h"
+
+
+typedef enum 
+{
+   SA_stop = 0,
+   SA_start = 1,
+   SA_label = 2
+} SA_ACTION_T;
+
+typedef enum 
+{
+   TAG_NEST_BEGIN   = 0xE0,
+   TAG_NEST_END     = 0xE1,
+   TAG_SINGLE_LABEL = 0xE2,
+   TAG_BEGIN_POINT  = 0xE3,
+   TAG_END_POINT    = 0xE4,
+   TAG_VPE1_CHILD_BEGIN  = 0xE5,
+   TAG_VPE1_CHILD_END    = 0xE6,
+   TAG_CPU_FREQUENCY     = 0xE7
+} SA_TAG_T;	
+
+
+
+
+
+kal_uint32 SLA_Enable(void);
+kal_uint32 SLA_Disable(void);
+kal_uint32 SLA_Respond(void);
+kal_uint32 SLA_Pause(void);
+
+
+void SLA_CustomLogging(kal_char *customJob, SA_ACTION_T saAction);
+void SLA_CustomLogging_NoEMM(kal_char *customJob, SA_ACTION_T saAction);
+void SLA_HWLogging(kal_char *customJob, SA_ACTION_T saAction);
+void SLA_VPE1ChildFunctionLogging(kal_uint32 index, SA_ACTION_T saAction, kal_uint8 TCID, kal_uint8 coreID) DECLARE_MIPS16;
+
+
+
+#endif
diff --git a/mcu/interface/service/sst/swtr_public.h b/mcu/interface/service/sst/swtr_public.h
new file mode 100644
index 0000000..5f8df0a
--- /dev/null
+++ b/mcu/interface/service/sst/swtr_public.h
@@ -0,0 +1,4 @@
+#ifndef SWTR_PUBLIC_H
+#define SWTR_PUBLIC_H
+
+#endif
diff --git a/mcu/interface/service/sst/system_profiler_public.h b/mcu/interface/service/sst/system_profiler_public.h
new file mode 100644
index 0000000..744358a
--- /dev/null
+++ b/mcu/interface/service/sst/system_profiler_public.h
@@ -0,0 +1,611 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   system_profiler.h
+ *
+ * Project:
+ * --------
+ *   
+ *
+ * Description:
+ * ------------
+ *   
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef SYSPROFILER_PUBLIC_H
+#define SYSPROFILER_PUBLIC_H
+
+#include "swla_public.h"
+#include "mcu_pmu_montr_public.h"
+#include "kal_public_defs.h"
+#include "cpu_info.h"
+#include "ex_public.h"
+
+
+typedef enum {
+	SYSPRO_SW_SWLA_MODE = 0,
+	SYSPRO_SW_SWTR_MODE,
+	SYSPRO_MODE_END
+}SYSPRO_MODE;
+
+typedef enum 
+{
+    SYSPRO_CORE0 = 0,
+    SYSPRO_CORE1,
+#if defined(__MD95__)
+#ifndef __MD95_IS_2CORES__
+    SYSPRO_CORE2,
+#endif // ifndef(__MD95_IS_2CORES__)
+
+#elif defined(__MD97__) || defined(__MD97P__)
+    SYSPRO_CORE2,
+    SYSPRO_CORE3,
+#endif
+    SYSPRO_NUM
+}SYSPRO_MCU_CORE;
+
+
+#if defined(__MTK_TARGET__) && !defined(__MAUI_BASIC__)  && !defined(__ESL_HRT__)
+
+#if defined(__MD95__)
+
+#define __SYSTEM_PROFILER_ON__
+#define __SWLA_SNAPSHOT_FEATURE__
+#define __SWLA_SNAPSHOT_FEATURE_DEBUG__
+
+#elif defined(__MD97__) || defined(__MD97P__)
+
+#define __SYSTEM_PROFILER_ON__
+#define __SYSPRO_DEFAULT_MIN_BUFF_SIZE__
+//#define __SWLA_SNAPSHOT_FEATURE__
+//#define __SWLA_SNAPSHOT_FEATURE_DEBUG__
+
+#else
+    #error "Unsupported chip"
+#endif
+#endif
+
+/* DHL will call PMU API. So APIs should be exported to be linked.*/
+#if defined(__MTK_TARGET__)
+#define __SWLA_MIPS_PMU_EXIST__
+#endif
+
+#define MAX_SYSPRO_NUMBER (SYS_MCU_NUM_CORE)
+#define MAX_SWLA_NUMBER (SYS_MCU_NUM_CORE)
+#define MAX_SWTR_NUMBER (SYS_MCU_NUM_CORE)
+#define MAX_SW_SWTR_NUMBER (SYS_MCU_NUM_CORE)
+#define BASIC_INFO_SIZE (8)
+#define SYSPROFILER_INITCORE (0)
+#define SYSPRO_HW_SWTR_DEFAULT_SAMPLE_RATE (4096)
+
+#if defined(__MD95__)
+#define MAX_TC_NUMBER (4)
+#elif defined(__MD97__) || defined(__MD97P__)
+#define MAX_TC_NUMBER (6)
+#else
+    #error "Unsupported chip"
+#endif
+
+#if defined(__MD95__)
+#define SYS_PRO_HEADER_MINOR_VER (3)
+#define SYS_PRO_HEADER_MAJOR_VER (1)
+#elif defined(__MD97__) || defined(__MD97P__)
+#define SYS_PRO_HEADER_MINOR_VER (0)
+#define SYS_PRO_HEADER_MAJOR_VER (4)
+#else
+    #error "Unsupported chip"
+#endif
+#define SYS_PRO_HEADER_PADDING   (0)
+#define SYS_PRO_HEADER_MAGIC     (0xEE)
+
+/* 
+ * IF extra add-on parts are required, please modify this following number
+ */
+// 14 is the number of ASM add-on (6 built-in and 8 extra data)  --> but current is no ASM, can change
+#define MAX_ADDON_INFO_NUM 14
+#define MAX_PLATFORM_NAME_LEN 16
+#define MAX_FLAVOR_NAME_LEN 32
+#define MAX_SW_LABEL_LEN 64
+#define HEADER_SCRATCHPAD_LEN 128
+
+typedef struct SysProfiler_SummayHeader_T
+{
+    // version Info: since ver 1.03
+    kal_uint8     minor_ver;
+    kal_uint8     major_ver;
+    kal_uint8     padding;
+    kal_uint8     magic;   // should always be 0xEE
+    
+#if defined(__MD95__)     // version Info: since ver1.03(For Gen93/95)
+    kal_uint32    header_sz;
+    kal_uint32    main_desc_sz;
+#elif defined(__MD97__) || defined(__MD97P__)    // version Info: since ver4.0 (For Gen97)  
+    kal_uint8     vpe0_ic_info;
+    kal_uint8     vpe1_ic_info;
+    kal_uint8     vpe2_ic_info;
+    kal_uint8     vpe3_ic_info;
+    kal_uint32    platform_info;
+#else
+    #error "Unsupported chip"    
+#endif
+    kal_uint32    addon_desc_sz;
+} SysProfiler_SummaryHeader;
+
+typedef struct SysProfiler_MainDescHeader_T
+{
+    kal_char      mode_name[4];
+    kal_uint32    core_id;
+    kal_uint32    mdsys_timebase;
+    kal_uint32    modemsys_timebase_low;
+    kal_uint32    modemsys_timebase_high;
+    kal_uint32    log_sz;
+    kal_uint32    raw_begin_pos;    
+#if defined(__MD97__) || defined(__MD97P__)	
+    kal_uint32    cpu_clock_mhz;
+#else
+	kal_uint32    padding;
+#endif
+    kal_char      platformName[MAX_PLATFORM_NAME_LEN];
+    kal_char      flavorName[MAX_FLAVOR_NAME_LEN];
+    kal_char      SWLabel[MAX_SW_LABEL_LEN];
+} SysProfiler_MainDescHeader;
+
+typedef struct SysProfiler_AddonDescHeader_T
+{
+  kal_uint32     log_sz;
+  kal_char       ext_name[12];
+} SysProfiler_AddonDescHeader;
+
+typedef struct SysProfiler_LoggingHeader_T
+{
+   SysProfiler_SummaryHeader    summary;
+   SysProfiler_MainDescHeader   main_desc;
+   SysProfiler_AddonDescHeader  addon_info[MAX_ADDON_INFO_NUM]; 
+   kal_char                     header_padding[HEADER_SCRATCHPAD_LEN]; /* SPV scratchpad, content will be output to header region of sla.bins */
+} SysProfiler_LoggingHeader;
+
+typedef struct SysProfiler_DumpMemoryInfo_T
+{
+    kal_uint32 base_addr1;
+    kal_uint32 length1;
+    kal_uint32 base_addr2;
+    kal_uint32 length2;
+} SysProfiler_DumpMemInfo;
+
+#if defined(__MD95__)
+#if defined(__SWLA_MIPS_PMU_EXIST__)
+typedef struct SysProfiler_PMCSettingParameter_T
+{
+   SYSPRO_MODE                  mode;
+   SYSPRO_MCU_CORE              coreID;
+   kal_uint8                    TCID;
+   IAPMU_MONITOR_EVENT_TYPE     PMC0Event;
+   IAPMU_MONITOR_TARGET_TYPE    PMC0Type;
+   IAPMU_MONITOR_EVENT_TYPE     PMC1Event;
+   IAPMU_MONITOR_TARGET_TYPE    PMC1Type;
+} SysProfiler_PMCSettingParameter;
+
+typedef struct SysProfiler_DHLPMCParameter_T
+{
+   SysProfiler_PMCSettingParameter    parameter[MAX_SWLA_NUMBER * MAX_TC_NUMBER];
+} SysProfiler_DHLPMCParameter;
+
+typedef struct SysProfiler_PMCSettingLocalParameterForILM_T
+{
+   LOCAL_PARA_HDR
+   SysProfiler_PMCSettingParameter    parameter[MAX_TC_NUMBER];
+} SysProfiler_PMCSettingLocalParameterForILM;
+
+#endif
+#elif defined(__MD97__) || defined(__MD97P__)
+
+#define SYSPROFILER_CM2_NUM 4
+typedef struct CM2ConfigParameter_T
+{
+    kal_uint32 Event;
+    kal_uint32 Qualifier;
+    kal_uint32 BegAddr;
+    kal_uint32 EndAddr;
+    kal_uint32 VPEMask;
+}CM2ConfigParameter;
+
+#define SYSPROFILER_PMC_NUM 4
+typedef struct PMCConfigParameter_T
+{
+    kal_uint32 Event;
+    kal_uint32 Type;
+}PMCConfigParameter;
+
+typedef struct SysProfiler_CM2SettingParameter_T
+{
+    SYSPRO_MODE     mode;
+    SYSPRO_MCU_CORE coreID;
+    CM2ConfigParameter    CM2_parameter[SYSPROFILER_CM2_NUM];
+}SysProfiler_CM2SettingParameter;
+
+typedef struct SysProfiler_PMCSettingParameter_T
+{
+   SYSPRO_MODE                  mode;
+   SYSPRO_MCU_CORE              coreID;
+   PMCConfigParameter           PMC_parameter[SYSPROFILER_PMC_NUM];
+} SysProfiler_PMCSettingParameter;
+
+typedef struct SysProfiler_DHLPMCParameter_T
+{
+   SysProfiler_PMCSettingParameter    parameter[MAX_SWLA_NUMBER * MAX_TC_NUMBER];
+} SysProfiler_DHLPMCParameter;
+
+typedef struct SysProfiler_PMCSettingLocalParameterForILM_T
+{
+   LOCAL_PARA_HDR
+   SysProfiler_PMCSettingParameter    parameter;
+} SysProfiler_PMCSettingLocalParameterForILM;
+
+#else
+    #error "Unsupported chip"    
+#endif
+
+
+typedef enum
+{
+    SYSPRO_SW_ADDON,
+    SYSPRO_ADDON_TYPE_END,
+} SYSPROFILER_ADDON_TYPE;
+
+typedef enum
+{
+    SYSPRO_SWLA_ADDON,
+    SYSPRO_SWTR_ADDON,
+    SYSPRO_ADDON_PROFILER_TYPE_END,
+} SYSPROFILER_ADDON_PROFILER_TYPE;
+
+typedef enum{
+    SYSPRO_ERROR_CODE_SUCCESS = 0,
+    SYSPRO_ERROR_CODE_START = 0x10,
+    SYSPRO_ERROR_CODE_BUFFER_TOO_SMALL,
+    SYSPRO_ERROR_CODE_BUFFER_TOO_LARGE,
+    SYSPRO_ERROR_CODE_WRONG_MODE,
+    SYSPRO_ERROR_CODE_WAIT_IDLE_FAIL,
+    SYSPRO_ERROR_CODE_OVER_ADDON_INDEX,
+    SYSPRO_ERROR_CODE_OVER_ADDON_SIZE,
+    SYSPRO_ERROR_CODE_INVALID_SAMPLE_RATE,
+    SYSPRO_ERROR_CODE_SW_START = 0x20,
+    SYSPRO_ERROR_CODE_SWLA_ALREADY_ENABLE,
+    SYSPRO_ERROR_CODE_SWLA_RAM_BUFFER_IN_USED,
+    SYSPRO_ERROR_CODE_SWTR_ALREADY_ENABLE,
+    SYSPRO_ERROR_CODE_SWTR_RAM_BUFFER_IN_USED,
+    SYSPRO_ERROR_CODE_OUT_OF_SUPPORT_COREID,
+    SYSPRO_ERROR_CODE_INVALID_MODE,
+    SYSPRO_ERROR_CODE_BUFFER_ADDRESS_SIZE,
+    SYSPRO_ERROR_CODE_PROFILER_NOT_ENABLE,
+    SYSPRO_ERROR_CODE_INVALID_PROFILER_ADDON,
+    SYSPRO_ERROR_CODE_INVALID_ADDON_OPTION,
+    SYSPRO_ERROR_CODE_NO_ADDON_AVAILABLE,
+    SYSPRO_ERROR_CODE_NO_EXTRA_ADDON_AVAILABLE,
+    SYSPRO_ERROR_CODE_DUPLICATED_ADDON,
+    SYSPRO_ERROR_CODE_NULL_FUNCTION_PTR,
+    SYSPRO_ERROR_CODE_PMC_PARAMETER_INVALID,
+    SYSPRO_ERROR_CODE_DEPRECATED_FUNCTION,
+    SYSPRO_ERROR_CODE_NO_AVAILABLE_SNAPSHOT_BUFFER,
+    SYSPRO_ERROR_CODE_SNAPSHOT_AGAIN_IN_SHORT_TIME,
+    SYSPRO_ERROR_CODE_NO_SUPPORT_DUMP_LEVEL,
+    SYSPRO_ERROR_CODE_INIT_FAIL,
+    
+
+    SYSPRO_ERROR_CODE_CORE_0    = 0x0000,
+    SYSPRO_ERROR_CODE_CORE_1    = 0x0100,
+    SYSPRO_ERROR_CODE_CORE_2    = 0x0200,
+    SYSPRO_ERROR_CODE_CORE_3    = 0x0300,
+    //SYSPRO_ERROR_CODE_MCU_ASM   = 0x0400,
+    //SYSPRO_ERROR_CODE_INFRA_ASM = 0x0500,
+
+    SYSPRO_ERROR_CODE_END,
+} SYSPROFILER_ERROR_CODE;
+
+
+#if defined(__SWLA_SNAPSHOT_FEATURE__)
+
+typedef enum
+{
+    SYSPRO_SNAPSHOT_CORE_IDLE,
+    SYSPRO_SNAPSHOT_CORE_START,
+    SYSPRO_SNAPSHOT_CORE_DONE
+} SYSPROFILER_SNAPSHOT_CORE_STATUS_TYPE ;
+
+
+typedef enum
+{
+    SYSPRO_SNAPSHOT_BUFF_INDEX_0,
+/*
+    SYSPRO_SNAPSHOT_BUFF_INDEX_1,
+    SYSPRO_SNAPSHOT_BUFF_INDEX_2,
+    SYSPRO_SNAPSHOT_BUFF_INDEX_3,
+    SYSPRO_SNAPSHOT_BUFF_INDEX_4,
+    SYSPRO_SNAPSHOT_BUFF_INDEX_5,
+    SYSPRO_SNAPSHOT_BUFF_INDEX_19=19,
+*/
+    SYSPRO_SNAPSHOT_BUFF_NUM,
+    SYSPRO_SNAPSHOT_BUFF_COMMON,            /* Reserved for common case */
+    SYSPRO_SNAPSHOT_BUFF_HRT_FAIL,          /* For Hard-Read-Time fail case */
+    SYSPRO_SNAPSHOT_BUFF_END = 0xFFFFFFFF   /* Force this enum 32bit */
+} SYSPROFILER_SNAPSHOT_BUFF_ID_ENUM ;
+
+/* if this structure change, should also modify tool */
+typedef struct SysProifler_Snapshot_Core_t
+{
+    kal_uint32 seg1_src_addr;
+    kal_uint32 seg1_dst_addr;
+    kal_uint32 seg1_size;
+    kal_uint32 seg1_gdma_result;
+    kal_uint32 seg2_src_addr;
+    kal_uint32 seg2_dst_addr;
+    kal_uint32 seg2_size;
+    kal_uint32 seg2_gdma_result;
+    kal_uint32 lisr_used;
+    kal_uint32 lisr_in_time;
+    kal_uint32 lisr_out_time;
+    SysProfiler_LoggingHeader header;
+    SYSPROFILER_ERROR_CODE err_code;
+    SYSPROFILER_SNAPSHOT_CORE_STATUS_TYPE status;
+    SYSPRO_MODE mode;
+    
+} SysProfiler_Snapshot_Core;
+
+/* if this structure change, should also modify tool */
+typedef struct SysProfiler_Snapshot_Info_t
+{
+    kal_uint32 has_snapshot;
+    kal_uint32 trigger_time_us;
+    kal_uint32 trigger_time_tick;
+    kal_uint32 trigger_vpe;
+    kal_uint32 caller;
+    SysProfiler_Snapshot_Core core[MAX_SYSPRO_NUMBER];
+}SysProfiler_Snapshot_Info;
+
+#endif
+
+typedef enum
+{
+    SYSPRO_MIN_BUFF_SIZE,
+    SYSPRO_MAX_BUFF_SIZE,
+    SYSPRO_CUSTOM_BUFF_SIZE,    
+}SYSPROFILER_ADJUST_BUFF_TYPE;
+
+#define IS_SWLA_MODE(MODE) ( MODE == SYSPRO_SW_SWLA_MODE )
+#define IS_SWTR_MODE(MODE) ( MODE == SYSPRO_SW_SWTR_MODE )
+
+void SysProfiler_Init(void);
+kal_uint32 SysProfiler_Start(void);
+kal_uint32 SysProfiler_StartCoreProfilerByMode( SYSPRO_MODE mode, kal_uint32 samplingRate);
+kal_uint32 SysProfiler_StartPlatformProfilerByMode( SYSPRO_MODE mode, kal_uint32 sysSamplingRate, kal_uint32 infraSamplingRate);
+kal_uint32 SysProfiler_Stop(void);
+kal_uint32 SysProfiler_StopCoreProfiler(void);
+kal_uint32 SysProfiler_StopPlatformProfiler(void);
+void SysProfiler_ASMStop(void);
+SYSPROFILER_ERROR_CODE SysProfiler_SetMode(SYSPRO_MODE mode);
+SYSPROFILER_ERROR_CODE SysProfiler_SetSampleRate(kal_uint32 sampleRate);
+kal_uint32 SysProfiler_RetriveHeader( kal_uint8** headerStartAddress, kal_uint32* headerSize, kal_uint8 coreID);
+kal_uint32 SysProfiler_RetriveLoggingBuffer(kal_uint32 **info, kal_uint16 *count, kal_uint8* region_config, kal_uint8 coreID);
+kal_bool SysProfiler_CheckRAMAvailability(kal_uint32 idx, kal_uint8 coreID);
+SYSPROFILER_ERROR_CODE SysProfiler_RegisterAddon( SYSPROFILER_ADDON_TYPE addonType, kal_uint32 addonSize, kal_char addonName[], void (*SYSPRO_AddonInfoInitFunc)(void), void *SA_AddonInfoLoggingFunc, kal_bool SA_SwapOutLogging, SYSPROFILER_ADDON_PROFILER_TYPE profilerType, SYSPRO_MCU_CORE coreID);
+kal_bool SysProfiler_QueryCoreProfilerModeAndRunningStatus( SYSPRO_MODE* returnMode, kal_bool* returnRunningStatus);
+kal_bool SysProfiler_QueryPlatformProfilerModeAndRunningStatus( SYSPRO_MODE* returnMode, kal_bool* returnRunningStatus);
+kal_bool SysProfiler_QueryAddonExist(char *addonPrefix, SYSPRO_MODE mode, kal_uint32 coreID);
+kal_bool SysProfiler_QueryHeaderScratchpad(kal_uint8 coreID, kal_uint8** addr, kal_uint32* size, kal_uint32* header_offset);
+
+#if defined(__SWLA_MIPS_PMU_EXIST__)
+SYSPROFILER_ERROR_CODE SysProfiler_PassPMCParameterFromDHL(SysProfiler_DHLPMCParameter* DHLParameter);
+#if defined(__MD95__)
+kal_bool SysProfiler_PassPMCParameterFromMDDBG(SysProfiler_PMCSettingParameter PMCParameter[], ilm_struct ilm);
+#elif defined(__MD97__) || defined(__MD97P__)
+kal_bool SysProfiler_PassPMCParameterFromMDDBG(SysProfiler_PMCSettingParameter PMCParameter, ilm_struct ilm);
+#else
+    #error "Unsupported chip"
+#endif
+#endif
+SYSPROFILER_ERROR_CODE SysProfiler_PassPMCParameterByATCMD(kal_uint8* data_str);
+SYSPROFILER_ERROR_CODE SysProfiler_TurnOnELMAddon(kal_uint32 coreID);
+SYSPROFILER_ERROR_CODE SysProfiler_TurnOnEBMAddon(kal_uint32 coreID);
+#if defined(__MD95__)
+SYSPROFILER_ERROR_CODE SysProfiler_TurnOnCM2Addon(kal_uint32 coreID, kal_uint32 counter);
+SYSPROFILER_ERROR_CODE SysProfiler_TurnOnICM2Addon(kal_uint32 coreID, kal_uint32 counter);
+#elif defined(__MD97__) || defined(__MD97P__)
+SYSPROFILER_ERROR_CODE SysProfiler_ConfigCM2fromATCMD(kal_uint32 coreID, kal_uint8* data_str, SysProfiler_CM2SettingParameter* config);
+SYSPROFILER_ERROR_CODE SysProfiler_TurnOnCM2Addon(kal_uint32 coreID, SysProfiler_CM2SettingParameter *config);
+#else
+    #error "Unsupported chip"
+#endif
+void SysProfiler_Adjust_buffer(SYSPROFILER_ADJUST_BUFF_TYPE type, kal_uint32 buffersize);
+SYSPROFILER_ERROR_CODE SysProfiler_TriggerInitAddonByATCMD(kal_uint8 *data_str);
+kal_bool SysProfiler_RegisterDefaultAddonFromMDDBG(void);
+#if defined(__SWLA_SNAPSHOT_FEATURE__)
+SYSPROFILER_ERROR_CODE SysProfiler_BufferSnapshot(SYSPROFILER_SNAPSHOT_BUFF_ID_ENUM* buffer_id);
+#endif
+
+#endif
diff --git a/mcu/interface/service/sst/usip_api_public.h b/mcu/interface/service/sst/usip_api_public.h
new file mode 100644
index 0000000..4d30c43
--- /dev/null
+++ b/mcu/interface/service/sst/usip_api_public.h
@@ -0,0 +1,145 @@
+#ifndef __USIP_API_PUBLIC_H__
+#define __USIP_API_PUBLIC_H__
+
+#if defined(__MD97__) || defined(__MD97P__)
+#include "dsp_module_based_api_public.h"
+#else //defined(__MD97__)
+
+#include "dsp_control_public.h"
+
+/***************************************************************/
+/********* Enum for BootDoneCheck Return Value *************/
+/***************************************************************/
+typedef enum{
+    uSIP_NOTYETDONE,
+    uSIP_BOOTDONE,
+    uSIP_NOT_DEACTIVEDONE,
+    uSIP_DEACTIVEDONE
+}uSIP_BOOTDONECHECK_RETVALUE;
+
+#define uSIP_NOT_ACTIVEDONE     uSIP_NOTYETDONE
+#define uSIP_ACTIVEDONE         uSIP_BOOTDONE
+
+/***************************************************************/
+/********* Variable Prototype **********************************/
+/***************************************************************/
+extern kal_uint32 duty_rat[DSP_CONTROL_CDIF_CORE_NUM];
+
+/***************************************************************/
+/********* Function Prototype **********************************/
+/***************************************************************/
+/* FirstBoot API */
+extern kal_uint32 firstboot_topsm_query(DSP_CDIF_CORE_ENUM);
+
+/***** Common API *****/
+extern DSP_CONTROL_IDLE_FLAG_STATUS usip_check_idle_flag(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern void query_usip_pc(kal_uint32*, kal_uint32*);
+extern void query_scq16_waite_signal(kal_uint8*, kal_uint8*);
+extern void firstboot_activate(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_bool is_myself_duty_rat(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_uint32 return_dutyrat_of_thread(DSP_CDIF_CORE_ENUM);
+
+/***** Activate Relatives *****/
+extern void usip_activate(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/***** Deactivate Relatives *****/
+extern void usip_deactivate(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern USIP_CONTROL_STATUS usip_deactive_done_check(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/* Check Boot Done API*/
+extern USIP_CONTROL_STATUS usip_active_done_check(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_bool is_usip_vic_enable(DSP_CDIF_CORE_ENUM);
+extern void rake_later_trigger_ungate();
+/* Check status APIs */
+extern kal_bool dsp_uSIP_thread_is_deactive(DSP_CDIF_CORE_ENUM);
+
+/* DDL Relatives */
+extern void uSIP_inner_ddl_start(uSIP_API_USER_INNER ,DDL_MODE);
+extern void uSIP_brp_ddl_start(uSIP_API_USER_BRP , DDL_MODE);
+extern void uSIP_fec_tx_ddl_start(uSIP_API_USER_FEC , DDL_MODE);
+extern void uSIP_fec_rx_ddl_start(uSIP_API_USER_FEC , DDL_MODE);
+extern void uSIP_inner_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_brp_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_fec_tx_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_fec_rx_ddl_status_mode_query(DDL_STATUS* , DDL_MODE*);
+extern void uSIP_rake_as_tcm_for_inner_ddl_status_mode_query(DDL_STATUS *status, DDL_MODE *bin_mode);
+extern void ddl_clear_inner_ddl_protection_trigger();
+extern kal_uint32 dsp_check_ddl_user_status(DSP_CDIF_CORE_ENUM, kal_uint32);
+extern kal_bool ddl_has_user_call_activate(DSP_CDIF_CORE_ENUM, kal_uint32);
+
+/***** Sleep Flow APIs for user *****/
+/* FirstBoot API */
+#define topsm_return_dutyrat_of_inner                   firstboot_topsm_query(DSP_CONTROL_USIP0_INNER)
+#define topsm_return_dutyrat_of_brp                     firstboot_topsm_query(DSP_CONTROL_USIP0_BRP)
+#define topsm_return_dutyrat_of_fec                     firstboot_topsm_query(DSP_CONTROL_USIP1_FEC)
+#define topsm_return_dutyrat_of_speech                  firstboot_topsm_query(DSP_CONTROL_USIP1_SPEECH)
+
+#define is_myself_duty_user_of_inner(user_id)           is_myself_duty_rat(DSP_CONTROL_USIP0_INNER, user_id)
+#define is_myself_duty_user_of_brp(user_id)             is_myself_duty_rat(DSP_CONTROL_USIP0_BRP, user_id)
+#define is_myself_duty_user_of_fec(user_id)             is_myself_duty_rat(DSP_CONTROL_USIP1_FEC, user_id)
+#define is_myself_duty_user_of_speech(user_id)          is_myself_duty_rat(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+/* Check idle APIs */
+#define dsp_uSIP_inner_check_idle_flag(user_id)         usip_check_idle_flag(DSP_CONTROL_USIP0_INNER, user_id)
+#define dsp_uSIP_brp_check_idle_flag(user_id)           usip_check_idle_flag(DSP_CONTROL_USIP0_BRP, user_id)
+#define dsp_uSIP_fec_check_idle_flag(user_id)           usip_check_idle_flag(DSP_CONTROL_USIP1_FEC, user_id)
+#define dsp_uSIP_speech_check_idle_flag(user_id)        usip_check_idle_flag(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+/* First Boot Activate Use */
+#define inner_firstboot_activate(user_id)               firstboot_activate(DSP_CONTROL_USIP0_INNER, user_id)
+#define brp_firstboot_activate(user_id)                 firstboot_activate(DSP_CONTROL_USIP0_BRP, user_id)
+#define fec_firstboot_activate(user_id)                 firstboot_activate(DSP_CONTROL_USIP1_FEC, user_id)
+#define speech_firstboot_activate(user_id)              firstboot_activate(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+/* Activate APIs*/
+#define dsp_uSIP_inner_activate(user_id)                usip_activate(DSP_CONTROL_USIP0_INNER, user_id)
+#define dsp_uSIP_brp_activate(user_id)                  usip_activate(DSP_CONTROL_USIP0_BRP, user_id)
+#define dsp_uSIP_fec_activate(user_id)                  usip_activate(DSP_CONTROL_USIP1_FEC, user_id)
+#define dsp_uSIP_speech_activate(user_id)               usip_activate(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+/* Activate check APIs */
+#define uSIP_INNER_BootDoneCheck(user_id)               usip_active_done_check(DSP_CONTROL_USIP0_INNER, user_id)
+#define uSIP_BRP_BootDoneCheck(user_id)                 usip_active_done_check(DSP_CONTROL_USIP0_BRP, user_id)
+#define uSIP_FEC_BootDoneCheck(user_id)                 usip_active_done_check(DSP_CONTROL_USIP1_FEC, user_id)
+#define uSIP_SPEECH_BootDoneCheck(user_id)              usip_active_done_check(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+#define dsp_uSIP_inner_active_done_check(user_id)       uSIP_INNER_BootDoneCheck(user_id)
+#define dsp_uSIP_brp_active_done_check(user_id)         uSIP_BRP_BootDoneCheck(user_id)
+#define dsp_uSIP_fec_active_done_check(user_id)         uSIP_FEC_BootDoneCheck(user_id)
+#define dsp_uSIP_speech_active_done_check(user_id)      uSIP_SPEECH_BootDoneCheck(user_id)
+
+
+/* Deactivate APIs */
+#define dsp_uSIP_inner_deactivate(user_id)              usip_deactivate(DSP_CONTROL_USIP0_INNER, user_id)
+#define dsp_uSIP_brp_deactivate(user_id)                usip_deactivate(DSP_CONTROL_USIP0_BRP, user_id)
+#define dsp_uSIP_fec_deactivate(user_id)                usip_deactivate(DSP_CONTROL_USIP1_FEC, user_id)
+#define dsp_uSIP_speech_deactivate(user_id)             usip_deactivate(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+/* Deactivate check APIs */
+#define dsp_uSIP_inner_deactive_done_check(user_id)     usip_deactive_done_check(DSP_CONTROL_USIP0_INNER, user_id)
+#define dsp_uSIP_brp_deactive_done_check(user_id)       usip_deactive_done_check(DSP_CONTROL_USIP0_BRP, user_id)
+#define dsp_uSIP_fec_deactive_done_check(user_id)       usip_deactive_done_check(DSP_CONTROL_USIP1_FEC, user_id)
+#define dsp_uSIP_speech_deactive_done_check(user_id)    usip_deactive_done_check(DSP_CONTROL_USIP1_SPEECH, user_id)
+
+/* Check status APIs */
+#define dsp_uSIP_inner_is_deactive                      dsp_uSIP_thread_is_deactive(DSP_CONTROL_USIP0_INNER)
+
+/***** DDL Flow APIs for user *****/
+// Trigger DDL
+#define dsp_uSIP_inner_ddl_start(user_id, bin_mode)     uSIP_inner_ddl_start(user_id, bin_mode)
+#define dsp_uSIP_brp_ddl_start(user_id,bin_mode)        uSIP_brp_ddl_start(user_id, bin_mode)   
+#define dsp_uSIP_fec_tx_ddl_start(user_id,bin_mode)     uSIP_fec_tx_ddl_start(user_id, bin_mode) 
+#define dsp_uSIP_fec_rx_ddl_start(user_id,bin_mode)     uSIP_fec_rx_ddl_start(user_id, bin_mode) 
+
+// Check uSIP inner DDL mode/status
+#define dsp_uSIP_inner_ddl_status_mode_query(status, bin_mode)   uSIP_inner_ddl_status_mode_query(status, bin_mode)
+#define dsp_uSIP_brp_ddl_status_mode_query(status, bin_mode)     uSIP_brp_ddl_status_mode_query(status, bin_mode)
+#define dsp_uSIP_fec_tx_ddl_status_mode_query(status, bin_mode)  uSIP_fec_tx_ddl_status_mode_query(status, bin_mode)
+#define dsp_uSIP_fec_rx_ddl_status_mode_query(status, bin_mode)  uSIP_fec_rx_ddl_status_mode_query(status, bin_mode)
+#define usip_check_ddl_user_status(thread, user_bitmap) dsp_check_ddl_user_status(thread, user_bitmap)
+
+// clear inner ddl_protection
+#define dsp_uSIP_inner_clear_ddl_protection()     ddl_clear_inner_ddl_protection_trigger()
+
+#endif //defined(__MD97__)
+#endif  /* __USIP_API_PUBLIC_H__ */