[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/service/sst/include/ex_item.h b/mcu/service/sst/include/ex_item.h
new file mode 100644
index 0000000..390f0d7
--- /dev/null
+++ b/mcu/service/sst/include/ex_item.h
@@ -0,0 +1,1671 @@
+/*****************************************************************************
+*  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_item.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!
+ * 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!
+ * 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_ITEM_H
+#define _EX_ITEM_H
+
+#if !defined(__OFFLINE_EX_LOG_PARSER__)
+#include "kal_general_types.h"
+#include "reg_base.h"
+#include "intrCtrl.h"
+#include "kal_public_defs.h"
+#include "ex_public.h"
+#include "SST_mem_utility.h"
+#if defined(__MIPS_MMU_EXIST__)
+#include "mips_mmu.h"
+#endif
+#include "mpu_public.h"
+#else
+#include "ex_item_types.h"
+#include "cpu_info.h"
+#endif /*__OFFLINE_EX_LOG_PARSER__*/
+
+/*******************************************************************************
+ * Enum Type Definition
+ *******************************************************************************/
+
+
+/* exception enter category */
+typedef enum
+{
+    EXCEPTION_ENTER_CATEGORY_NO_EXCEPTION = 0,
+    EXCEPTION_ENTER_CATEGORY_TLBREFILL,
+    EXCEPTION_ENTER_CATEGORY_CACHEERR,
+    EXCEPTION_ENTER_CATEGORY_GENERAL,
+    EXCEPTION_ENTER_CATEGORY_NMI,
+    EXCEPTION_ENTER_CATEGORY_CTI,
+    EXCEPTION_ENTER_CATEGORY_DORMANT,
+    EXCEPTION_ENTER_CATEGORY_EXCEPTION_IN_ASM_BOOT,
+#if !defined(__OFFLINE_EX_LOG_PARSER__) && !defined(_MSC_VER)
+} exception_enter_category;
+#else
+} exception_enter_category_format;
+typedef kal_uint8 exception_enter_category;
+#endif
+
+typedef enum
+{
+    /* mips exception codes in cause[exccode] */
+    INTERRUPT_EXCEPTION                = 0x0,
+    TLB_MOD_EXCEPTION                  = 0x1,
+    TLB_MISS_LOAD_EXCEPTION            = 0x2,
+    TLB_MISS_STORE_EXCEPTION           = 0x3,
+    ADDRESS_ERROR_LOAD_EXCEPTION       = 0x4,
+    ADDRESS_ERROR_STORE_EXCEPTION      = 0x5,
+    INSTR_BUS_ERROR                    = 0x6,
+    DATA_BUS_ERROR                     = 0x7,
+    SYSTEM_CALL_EXCEPTION              = 0x8,
+    BREAKPOINT_EXCEPTION               = 0x9,
+    RESERVED_INSTRUCTION_EXCEPTION     = 0xA,
+    COPROCESSORS_UNUSABLE_EXCEPTION    = 0xB,
+    INTEGER_OVERFLOW_EXCEPTION         = 0xC,
+    TRAP_EXCEPTION                     = 0xD,
+    MSA_FLOATING_POINT_EXCEPTION       = 0xE,
+    FLOATING_POINT_EXCEPTION           = 0xF,
+    COPROCESSOR_2_IS_1_EXCEPTION       = 0x10,
+    COR_EXTEND_UNUSABLE_EXCEPTION      = 0x11,
+    COPROCESSOR_2_EXCEPTION            = 0x12,
+    TLB_READ_INHIBIT_EXCEPTION         = 0x13,
+    TLB_EXECUTE_INHIBIT_EXCEPTION      = 0x14,
+    MSA_UNUSABLE_EXCEPTION             = 0x15,
+    MDMX_EXCEPTION                     = 0x16,
+    WATCH_EXCEPTION                    = 0x17,
+    MCHECK_EXCEPTION                   = 0x18,
+    THREAD_EXCEPTION                   = 0x19,
+    DSP_UNUSABLE_EXCEPTION             = 0x1A,
+    RESERVED_27_EXCEPTION              = 0x1B,
+    RESERVED_28_EXCEPTION              = 0x1C,
+    MPU_NOT_ALLOW_EXCEPTION            = 0x1D,
+    CACHE_ERROR_EXCEPTION_DBG_MODE     = 0x1E,
+    RESERVED_31_EXCEPTION              = 0x1F,
+
+    /* exception types for nmi and cache error exception vectors */
+    NMI_EXCEPTION                      = 0x20,
+    CACHE_ERROR_EXCEPTION              = 0x21,
+
+    /* These are used to replace TLB_MISS_LOAD/STORE_EXCEPTION
+     * codes when using tlb refill exception vector.
+     * TLB_MISS_LOAD/STORE_EXCEPTION code is used for tlb invalid */
+    TLB_REFILL_LOAD_EXCEPTION          = 0x22,
+    TLB_REFILL_STORE_EXCEPTION         = 0x23,
+
+    END_CPU_EXCEPTION_TYPE             = 0x2F,
+
+    STACKACCESS_EXCEPTION              = 0x30,
+	SYS_FATALERR_EXT_TASK_EXCEPTION    = 0x31,
+	SYS_FATALERR_EXT_BUF_EXCEPTION     = 0x32,
+    /* Assertion */
+    ASSERT_FAIL_EXCEPTION              = 0x50,
+    ASSERT_DUMP_EXTENDED_RECORD        = 0x51,
+    ASSERT_FAIL_NATIVE                 = 0x52,
+    ASSERT_CUSTOM_ADDR                 = 0x53,
+    ASSERT_CUSTOM_MODID                 = 0x54,
+    ASSERT_CUSTOM_MOFID                 = 0x55,
+    /* cross core triggered */
+    CC_INVALID_EXCEPTION               = 0x60,
+//    CC_CS_EXCEPTION                    = 0x61,
+    CC_MD32_EXCEPTION                  = 0x62,
+//    CC_C2K_EXCEPTION                   = 0x63,
+//    CC_VC_EXCEPTION                    = 0x64,
+    CC_USIP_EXCEPTION                   = 0x65,
+    CC_SCQ_EXCEPTION                    = 0x66,
+    CC_SONIC_EXCEPTION                    = 0x67,
+    /* HW triggered */
+    EMI_MPU_VIOLATION_EXCEPTION        = 0x70,
+
+    AP_EXCEPTION                        = 0x80,
+
+    NUM_EXCEPTION,
+    END_EXCEPTION_TYPE                 = 0xFFFF
+#if !defined(__OFFLINE_EX_LOG_PARSER__) && !defined(_MSC_VER)
+} exception_type;
+#else
+} exception_type_format;
+typedef kal_uint16 exception_type;
+#endif
+
+typedef enum ex_maincontent_type_t
+{
+    EX_MAINCONTENT_TYPE_ASSERT             = 0,
+    EX_MAINCONTENT_TYPE_FATAL,
+    EX_MAINCONTENT_TYPE_CUSTOM_ASSERT
+#if !defined(__OFFLINE_EX_LOG_PARSER__) && !defined(_MSC_VER)
+} EX_MAINCONTENT_TYPE_T;
+#else
+} EX_MAINCONTENT_TYPE_T_FORMAT;
+typedef kal_uint8 EX_MAINCONTENT_TYPE_T;
+#endif /*__OFFLINE_EX_LOG_PARSER__*/
+
+
+
+#define INTSRAM_CODE_CORRUPT "ISPRAM"
+#define DYNINTSRAM_CODE_CORRUPT "DYNISPRAM"
+#define VECTOR_TABLE_CORRUPT "INTVECT"
+#define L2SRAM_C_CODE_CORRUPT  "C_L2SRAM"
+#define L2SRAM_NC_CODE_CORRUPT  "NC_L2SRAM"
+#define LOCK_WAITED_TOO_LONG_CORRUPT   "WAITLOCK"
+#define POSSIBLE_DEADLOCK_CORRUPT  "DEADLOCK"
+#define LOCK_HELD_TOO_LONG_CORRUPT   "HELDLOCK"
+#define CACHE_CORRUPT   "CACHECOR"
+#define L2CACHE_LOCK_CORRUPT   "L2$LOCK"
+#define DYNL2CACHE_LOCK_CORRUPT   "DYNL2$L"
+#define MPU_CORRUPT   "MPU"
+typedef enum
+{
+    Healthy = 0,
+    ISPRAMCorrupted = 1,
+    ISPRAMDynamicRegionCorrupted = 2,
+    SystemStackCorrupted = 3,
+    TaskStackCorrupted = 4,
+    HISRStackCorrupted = 5,
+    VectorTableCorrupted = 6,
+    L2SRAMCachedCorrupted = 7,
+    L2SRAMNonCachedCorrupted = 8,
+    SharedInternalSRAMCorrupted = 9,
+    LockWaitedTooLongCorrupted = 10,
+    PossibleDeadlockCorrupted = 11,
+    LockHeldTooLongCorrupted = 12,
+    CacheCorrupted = 13,
+    L2CacheLockCorrupted = 14,
+    DynamicL2CacheLockCorrupted = 15,
+    MPUCorrupted = 16,
+    StackFrameCorrupted = 17,
+#if !defined(__OFFLINE_EX_LOG_PARSER__) && !defined(_MSC_VER)
+} EX_DIAGNOSIS_T;
+#else
+} EX_DIAGNOSIS_T_FORMAT;
+typedef kal_uint8 EX_DIAGNOSIS_T;
+#endif
+
+typedef enum
+{
+    EX_AUTO_STEP                              = 0,
+    EX_BEGIN                                  = 0,
+
+    // exception enter part
+    EX_SAVE_MDCIRQ_STATUS_BEFORE_CTI          = 0x1,
+    EX_TRIGGER_CTI                            = 0x2,
+    EX_SAVE_MDCIRQ_STATUS_AFTER_CTI           = 0x3,
+    EX_BACKUP_EX_REGISTERS                    = 0x4,
+    EX_STOP_SLA                               = 0x5,
+    EX_SSS_PF_EXCP                            = 0x6,
+    EX_RESTORE_IRQ_MASK_BACKUP                = 0x7,
+    EX_SWITCH_WDT_PHASE1                      = 0x8,
+    EX_SAVE_CORE_CONTEXT                      = 0x9,
+    EX_UPDATE_NON_OFFENDING_CONTEXT           = 0xA,
+    EX_KICK_WDT                               = 0xB,
+    EX_DUMP_MPU                               = 0xC,
+    EX_SET_EX_MPU                             = 0xD,
+    EX_WAIT_FOR_OTHER_CORES                   = 0xE,
+    EX_MDCIRQ_MASK_ALL                        = 0xF,
+    EX_HANDLE_WATCH_REG                       = 0x10,
+    EX_CHANGE_DI_TC                           = 0x11,
+    EX_HALT_OTHER_TC_CLEAR_EXL                = 0x12,
+    EX_RELEASE_OS_LOCKS                       = 0x13,
+    EX_BACKUP_EX_COUNT                        = 0x14,
+    EX_ENTER_EXCEPTION_SETUP_DONE             = 0x15,
+    EX_ENTER_EXCEPTION_PHASE2                 = 0x16,
+    EX_SAVE_OFFENDING_CACHE_LINES             = 0x17,
+    EX_CM2_REGION_DUMP                        = 0x18,
+    EX_ENTER_EXCEPTION_PHASE3                 = 0x19,
+    EX_GET_BREAK_CODE                         = 0x1A,
+    
+    //exception handling part
+    EX_KAL_ASSERT_HANDLER                     = 0x30,
+    EX_KAL_FATAL_ERROR_HANDLER_INT            = 0x31,
+    EX_KAL_EXCEPTION_HANDLER                  = 0x32,
+    EX_KAL_ECT_QUERY                          = 0x33,
+    EX_KAL_CTI_HANDLER                        = 0x34,
+    EX_EXCEPTION_HANDLER                      = 0x35,
+
+    //system data collection part
+    EX_INIT_PCMON                             = 0x40,
+    EX_KICK_WDT2                              = 0x41,
+    EX_GET_PDAMON                             = 0x42,
+    EX_WRITE_OFFENDING_PCMON_TO_EMM           = 0x43,
+    EX_KICK_WDT16                             = 0x44,
+    EX_INIT_BUSMON                            = 0x45,
+    EX_START_PDAMON                           = 0x46,
+    EX_INIT_EX_OVERVIEW                       = 0x47,
+    EX_PREPARE_PARAM                          = 0x48,
+    EX_INIT_LOG                               = 0x49,
+    EX_KICK_WDT3                              = 0x4A,
+    EX_INIT_MCU_SYSINFO                       = 0x4B,
+    EX_BUSDRV_GET_DUMP_INFO                   = 0x4C,
+    EX_KICK_WDT4                              = 0x4D,
+    EX_DUMP_BUSMPU_ERR                        = 0x4E,
+    EX_DUMP_BUSMPU_IRQ_STS                    = 0x4F,
+    EX_KICK_WDT5                              = 0x50,
+    EX_INIT_DSM                               = 0x51,
+    EX_KICK_WDT6                              = 0x52,
+    EX_INIT_MPU                               = 0x53,
+    EX_KICK_WDT7                              = 0x54,
+    EX_WAIT_USIP                              = 0x55,
+    EX_WAIT_MD32                              = 0x56,
+    EX_WAIT_SONIC                             = 0x57,
+    EX_WAIT_SAP                               = 0x58,
+    EX_INIT_DONE                              = 0x59,
+
+    //writing data to exrecord & shm
+    EX_POST_INIT_EXRECORD                     = 0x70,
+    //autosteps
+    EX_DEFINE_MAIN_REASON_DONE                = 0x7A,
+    EX_COPY_DVFS_EX_DATA                      = 0x7B,
+    EX_HW_DATA_SAVE_DONE                      = 0x7C,
+    EX_POST_INIT_EXRECORD_DONE                = 0x7D,
+
+    // external communication
+    EX_CC_EXT_COMM                            = 0x100,
+    EX_CC_EXT_COMM_OPEN_PORT                  = 0x110,
+    EX_CC_EXT_COMM_OPEN_PORT_DONE             = 0x13F,
+    EX_CC_EXT_COMM_CCCI_HANDSHAKE             = 0x140,
+    //autosteps
+    EX_CC_EXT_COMM_CCCI_HANDSHAKE_DONE        = 0x16F,
+    EX_CC_EXT_COMM_OUTPUT_META                = 0x170,
+    //autosteps
+    EX_CC_EXT_COMM_OUTPUT_META_DONE           = 0x180,
+    EX_CC_EXT_COMM_FLUSH_PORT                 = 0x181,
+    //autosteps
+    EX_CC_EXT_COMM_FLUSH_PORT_PART1           = 0x190,
+    EX_CC_EXT_COMM_FLUSH_PORT_PART2           = 0x1A0,
+    EX_CC_EXT_COMM_FLUSH_PORT_PART3           = 0x1B0,
+    EX_CC_EXT_COMM_FLUSH_PORT_PART4           = 0x1C0,
+    EX_CC_EXT_COMM_FLUSH_PORT_PART5           = 0x1D0,
+    //autosteps
+    EX_CC_EXT_COMM_FLUSH_PORT_DONE            = 0x1E0,
+    EX_CC_EXT_COMM_DONE                       = 0x1FF,
+    
+    // process
+    EX_PROCESS                                = 0x200,
+    EX_L1_AUDIO_RESET_DEVICE                  = 0x201,
+    EX_L1D_PAUSE_DSP                          = 0x202,
+    EX_KICK_WDT14                             = 0x203,
+    EX_TL1_FORCE_STALL                        = 0x204,
+    EX_KICK_WDT15                             = 0x205,
+    EX_MSG_OUTPUT                             = 0x206,
+    EX_OUTPUT_LOG                             = 0x207,
+    EX_USIP_CADEFA                            = 0x208,
+    EX_MD32_CADEFA                            = 0x209,
+    EX_SONIC_CADEFA                           = 0x20A,
+    EX_SONIC_CADEFA_DONE                      = 0x20B,
+    EX_OUTPUT_USIP_LOG                        = 0x20C,
+    EX_OUTPUT_MD32_LOG                        = 0x20D,
+    EX_OUTPUT_SONIC_LOG                       = 0x20E,
+    EX_OUTPUT_SONIC_LOG_DONE                  = 0x20F,
+    EX_FLC2DEBUG_ASSERT_CALLBACK              = 0x210,
+    EX_FLC2DEBUG_ASSERT_CALLBACK_DONE         = 0x211,
+    EX_DHL_CALL_EXCEPTION_CUSTOM_LOGGING      = 0x212,
+    EX_DHL_CALL_EXCEPTION_CUSTOM_LOGGING_DONE = 0x213,
+    EX_INFO_SAVE                              = 0x214,
+    INITIALIZE_FDD_TABLES                     = 0x215,
+    INITIALIZE_FDD_TABLES_DONE                = 0x216,
+    EX_SAVE_LOG                               = 0x217,
+    EX_SAVE_LOG_DONE                          = 0x218,
+    EX_PROCESS_DONE                           = 0x240,
+    
+    
+    // 1st non-offending vpe
+    EX_START_DSP_COMMUNICATION                = 0x300,
+    EX_INIT_DSP                               = 0x301,
+    EX_INIT_USIP                              = 0x302,
+    //autosteps
+    EX_KICK_WDT8                              = 0x30C,
+    EX_INIT_USIP_DONE                         = 0x30D,
+    EX_INIT_MD32                              = 0x30E,
+    //autosteps
+    EX_KICK_WDT9                              = 0x318,
+    EX_INIT_MD32_DONE                         = 0x319,
+    EX_INIT_SONIC                             = 0x31A,
+    //autosteps
+    EX_KICK_WDT10                             = 0x324,
+    EX_INIT_SONIC_DONE                        = 0x325,
+    EX_INIT_DSP_DONE                          = 0x326,
+
+    // 2nd non-offending vpe
+    EX_START_HW_COMMUNICATION                 = 0x400,
+    EX_INIT_STOP_HW                           = 0x401,
+    EX_ASM_STOP                               = 0x402,
+    EX_ASM_STOP_DONE                          = 0x403,
+    EX_DIGIRF_MIPI_PATH_STOP                  = 0x404,
+    EX_DIGIRF_MIPI_PATH_STOP_DONE             = 0x405,
+    EX_SCC_STOP                               = 0x406,
+    EX_SCC_STOP_DONE                          = 0x407,
+    EX_HW_DUMP                                = 0x408,
+    EX_DVFS_EX_DATA_READ                      = 0x409,
+    EX_HW_DUMP_DONE                           = 0x40A,
+    EX_DSP_EX_INIT                            = 0x40B,
+    EX_DSP_EX_INIT_DONE                       = 0x40C,
+    EX_INIT_STOP_HW_DONE                      = 0x40B,
+
+    // rest of the non-offending vpe
+    EX_START_INT_OFFSHOOT                     = 0x450,
+
+    // nested exception specific steps
+    EX_NESTED_LOG_INIT                        = 0x500,
+    EX_NESTED_PDAMON_INIT                     = 0x501,
+    EX_START_NESTED_PDAMON                    = 0x502,
+    EX_START_NESTED_PDAMON_DONE               = 0x503,
+    EX_NESTED_PROCESS                         = 0x504,
+    EX_NESTED_PROCESS_DONE                    = 0x505,
+
+    // reboot
+    EX_EX_REBOOT                              = 0x600,
+    EX_REMOVE_SENSITIVE_FOR_DUMP              = 0x601,
+    EX_KICK_WDT11                             = 0x602,
+    EX_SSF_DEINIT                             = 0x603,
+    EX_RESET_EXCP_SP                          = 0x604,
+    EX_WRITE_EXRECORD                         = 0x605,
+    
+    // reboot mp (silent reboot)
+    EX_EX_REBOOT_MP                           = 0x700,
+    EX_CCCI_INFO_PASSED_4MP                   = 0x780,
+    //autosteps
+    EX_CCCI_INFO_PASSED_4MP_DONE              = 0x790,
+
+
+    EX_EX_REBOOT_MP_DONE                      = 0x606,
+    EX_INIT_DUMP                              = 0x607,
+    EX_KICK_WDT12                             = 0x608,
+    EX_CCCI_INFO_PASSED                       = 0x609,
+    //autosteps
+    EX_CCCI_INFO_PASSED_DONE                  = 0x619,
+    EX_KICK_WDT13                             = 0x61A,
+    EX_SWITCH_WDT_PHASE2                      = 0x61B,
+    EX_CHECK_ELT_TRACES                       = 0x61C,
+#if defined(CHIP10992)
+    EX_CLEAN_CACHE_BEFORE_HANDOVER            = 0x61D,
+    EX_CLEAN_CACHE_BEFORE_ON_DEMAND           = 0x61E,
+#endif
+    //Ex flow complete step for silent reboot
+    EX_HANDOVER_MP                            = 0x7EF,
+
+    //Ex flow complete step for memdump
+    EX_HANDOVER                               = 0x7FF,
+
+    //Ex flow complete step for non-offending vpes
+    EX_ON_DEMAND                              = 0x7FF,
+
+    EX_RESET_HANDOVER                         = 0x8EF,
+
+#if !defined(__OFFLINE_EX_LOG_PARSER__) && !defined(_MSC_VER)
+} exception_flow_index;
+#else
+} exception_flow_index_format;
+typedef kal_uint16 exception_flow_index;
+#endif
+
+typedef enum {
+    AFOUND_NO_OUTPUT = 0x0,
+    AFOUND_TO_TRACE = 0x1,
+    AFOUND_TO_EXRECORD = 0x2
+} afound_output_types;
+
+/*******************************************************************************
+ * Constant Definition - Common
+ *******************************************************************************/
+/* structure usage */
+#define EX_UNIT_NAME_LEN 8
+#define NBR_TC_PER_CORE     (SYS_MCU_NUM_TC/SYS_MCU_NUM_CORE)
+#define NBR_VPE_PER_CORE    (SYS_MCU_NUM_VPE/SYS_MCU_NUM_CORE)
+#define NBR_CORE            (SYS_MCU_NUM_CORE)
+#define TOTAL_VPE_COUNT     (SYS_MCU_NUM_VPE)
+#define TOTAL_VICTIM_VPE_COUNT (TOTAL_VPE_COUNT - 1)
+
+#define SST_GET_VPE_ID(core,tc) ((core)*NBR_VPE_PER_CORE + (tc)/(NBR_TC_PER_CORE/NBR_VPE_PER_CORE))
+
+/* Use real vpe count for these*/
+#define EX_WAIT_VPE_MASK     ((1 << SYS_MCU_NUM_VPE) - 1)
+#define EXCEPTION_ENTER_MASK ((1 << SYS_MCU_NUM_VPE) - 1)
+/* This is hardcoded to max nbr of tlbs in interaptiv.
+ * Can be reduced to match correct count of tlbs in hw if we know tlbs wont increase after that */
+#define NUMBER_OF_TLBS 64
+
+#if defined(__MIPS_I7200__)
+#define NBR_OF_WATCH_REGS 8
+#define NBR_OF_KSCRATCH_REGS 6
+#else
+#define NBR_OF_WATCH_REGS 4
+#define NBR_OF_KSCRATCH_REGS 3
+#endif
+
+
+/*******************************************************************************
+ * Data Structure Definition - Common
+ *******************************************************************************/
+/*******************************************************************************
+ * Macro API Definition - Common
+ *******************************************************************************/
+#define EX_GET_COREID_BY_VPEID(VPEID) (VPEID/NBR_VPE_PER_CORE)
+#define EX_GET_COREVPEID_BY_VPEID(VPEID) (VPEID % NBR_VPE_PER_CORE)
+#if defined(__MD97__) || defined(__MD97P__)
+/* For Gen97 Shaolin Configuration: 6 TCs per Core. (2:2:2) */
+#define EX_GET_MAINTC_BY_VPEID(VPEID) (EX_GET_COREVPEID_BY_VPEID(VPEID) * 2)
+#else
+#error No config yet
+#endif
+/***************************** -structure start- *******************************/
+//PRAGMA_BEGIN_PACK_STRUCT
+/* Exception header, used to track the exception type */
+typedef struct ex_exception_record_header_t
+{
+    exception_type ex_type;                  /* offset: 0x, length:  2 */
+    kal_uint8      ex_offending_vpe_id;      /* offset: 0x, length:  1 */
+    kal_uint8      ex_offending_tc_id;       /* offset: 0x, length:  1 */
+    kal_uint8      ex_nvram;                 /* offset: +0x, length: 1 - for nvram */
+    kal_uint8      ex_serial_num;            /* offset: +0x, length: 1 - for nvram */
+    boot_mode_type boot_mode;                /* offset: +0x, length: 1 - normal mode/meta mode... */
+    kal_uint8      boot_status;              /* offset: +0x, length: 1 - early stage or not */
+    kal_uint32     ex_total_core;            /* offset: 0x, length:  4 - how many cores in mcu */
+} EX_HEADER_T;
+
+/* SW load information */
+#define EX_SWLABEL_LEN 32
+#define EX_SWPRJ_LEN 32
+#define EX_SWFLAVOR_LEN 32
+#define EX_SWBUILDTIME_LEN 16
+typedef struct ex_sw_loadinfo_t
+{
+    kal_char    sw_label[EX_SWLABEL_LEN];
+    kal_char    sw_project_name[EX_SWPRJ_LEN];
+    kal_char    sw_flavor[EX_SWFLAVOR_LEN];
+    kal_char    sw_buildtime[EX_SWBUILDTIME_LEN];
+} EX_LOADINFO_T;
+
+
+/* First Offender information */
+typedef struct _ex_timestamp_struct
+{
+    kal_uint32 USCNT;      /* offset: +0x, length: 4 */  /* us counter saved exception occuring time */
+    kal_uint32 frameno;    /* offset: +0x, length: 4 */  /* frameno saved exception occuring time */
+} ex_timestamp_struct;
+typedef struct _ex_basic_offending_info_t
+{
+    ex_timestamp_struct ex_timestamp;                         /* offset: +0x, length: */
+    kal_char            execution_unit[EX_UNIT_NAME_LEN];     /* offset: +0x, length: */
+    kal_uint32          processing_lisr;                      /* offset: +0x, length: */
+    kal_uint32          stack_ptr;                            /* offset: +0x, length: */
+    kal_uint32          lr;                                   /* offset: +0x, length: */
+    kal_uint32          pc;                                   /* offset: +0x, length: */
+    kal_uint8           tc_status;                            /* offset: +0x, length: */
+    kal_uint8           pad[3];                               /* offset: +0x, length: */
+} EX_BASIC_OFFENDING_INFO_T;
+
+/* Environment information */
+typedef struct ex_diagnosis_info_t
+{   /* Diagnosis information for Healthy Check */
+    kal_char         healthy_check_owner[EX_UNIT_NAME_LEN];   /* offset: +0x, length: 8 */
+    EX_DIAGNOSIS_T   corrupted_owner;                         /* offset: +0x, length: 1 */
+    kal_uint8        ELM_status;                              /* offset: +0x, length: 1 */
+    kal_uint8        pad[2];                                  /* offset: +0x, length: 2 */
+} EX_DIAGNOSISINFO_T;
+typedef struct ex_environment_info_t
+{
+    kal_uint32  interrupt_mask[2];                            /* offset: +0x, length: 8 */
+    EX_DIAGNOSISINFO_T  diagnosis;                            /* offset: +0x, length: 12 */
+    kal_uint32  force_dump;                                   /* offset: +0x, length: 4 */
+} EX_ENVINFO_T;
+
+
+/*******************************************************************************
+ * Data Structure Definition - general cpu info
+ *******************************************************************************/
+typedef struct _ex_gpr_reg_t
+{
+    kal_uint32 ZERO;
+    kal_uint32 AT;
+    kal_uint32 V0;
+    kal_uint32 V1;
+    kal_uint32 A0;
+    kal_uint32 A1;
+    kal_uint32 A2;
+    kal_uint32 A3;
+    kal_uint32 T0;
+    kal_uint32 T1;
+    kal_uint32 T2;
+    kal_uint32 T3;
+    kal_uint32 T4;
+    kal_uint32 T5;
+    kal_uint32 T6;
+    kal_uint32 T7;
+    kal_uint32 S0;
+    kal_uint32 S1;
+    kal_uint32 S2;
+    kal_uint32 S3;
+    kal_uint32 S4;
+    kal_uint32 S5;
+    kal_uint32 S6;
+    kal_uint32 S7;
+    kal_uint32 T8;
+    kal_uint32 T9;
+    kal_uint32 K0;
+    kal_uint32 K1;
+    kal_uint32 GP;
+    kal_uint32 SP;
+    kal_uint32 FP_OR_S8;
+    kal_uint32 RA;
+} EX_GPR_REG_T;
+
+/* NOTE: if changing this struct, please chagne SAVE_EX_CPU_REG_T @ ex_hdlr_gcc.S macro as well */
+typedef struct _ex_cpu_reg_t
+{
+    EX_GPR_REG_T GPR;
+    kal_uint32 hi;
+    kal_uint32 lo;
+    kal_uint32 status;
+    kal_uint32 cause;
+    kal_uint32 EPC;
+    kal_uint32 ErrorEPC;
+    kal_uint32 BadVAddr;
+    kal_uint32 Count;
+    kal_uint32 VPEControl;
+    kal_uint32 Context;
+    kal_uint32 ContextConfig;
+    kal_uint32 EntryHi;
+    kal_uint32 ErrCtl;
+#if defined(__MIPS_I7200__)
+    kal_uint32 BadInstr;
+    kal_uint32 BadInstrX;
+#endif
+} EX_CPU_REG_T;
+
+// Dormant Save
+typedef struct _ex_min_cpu_reg_t
+{
+    kal_uint32 RA;
+    kal_uint32 status;
+    kal_uint32 EPC;
+    kal_uint32 cause;
+    kal_uint32 SP;
+    kal_uint32 BadVAddr;
+    kal_uint32 reserved0;
+    kal_uint32 reserved1;
+} EX_CPU_MIN_REG_T;
+
+typedef struct _ex_tc_reg_t
+{
+    EX_GPR_REG_T GPR;
+    kal_uint32 hi;
+    kal_uint32 lo;
+    /* Thread Context per-TC */
+    kal_uint32 TCStatus;
+    kal_uint32 TCBind;
+    kal_uint32 TCRestart;
+    kal_uint32 TCHalt;
+    kal_uint32 TCContext;
+    kal_uint32 TCSchedule;
+#if defined(__MIPS_IA__)
+    kal_uint32 TCScheFBack;
+    kal_uint32 TCOpt;
+#endif
+    kal_uint32 UserLocal;
+    kal_uint32 LLAddr;
+    kal_uint32 EntryHi;
+    kal_uint32 Status;
+#if defined(__MIPS_I7200__)
+    kal_uint32 BatchCacheOpStatus;
+#endif
+#if defined(__MIPS_IA__)
+    kal_uint32 PerfCtl0;
+    kal_uint32 PerfCtl1;
+
+#endif
+    kal_uint32 PerfCnt0;
+    kal_uint32 PerfCnt1;
+#if defined(__MIPS_I7200__)
+    kal_uint32 PerfCnt2;
+    kal_uint32 PerfCnt3;
+#endif
+} EX_TC_REG_T;
+
+typedef struct _ex_vpe_reg_t
+{
+    /* Thread Context per-VPE */
+    kal_uint32 SRSConf0;
+    kal_uint32 SRSCtl;
+    kal_uint32 SRSMap;
+
+    /* Configuration and Status */
+    kal_uint32 Config;
+    kal_uint32 Config2;
+    kal_uint32 Config5;
+    kal_uint32 Config7;
+    kal_uint32 EBase;
+    kal_uint32 IntCtl;
+
+    /*TLB Management */
+    kal_uint32 Index;
+    kal_uint32 EntryLo0;
+    kal_uint32 EntryLo1;
+    kal_uint32 Context;
+    kal_uint32 ContextConfig;
+    kal_uint32 PageMask;
+    kal_uint32 PageGrain;
+    kal_uint32 Wired;
+    kal_uint32 BadVAddr;
+
+    /* Memory Segmentation */
+    kal_uint32 SegCtl0;
+    kal_uint32 SegCtl1;
+    kal_uint32 SegCtl2;
+
+    /* Exception Control */
+    kal_uint32 Cause;
+    kal_uint32 EPC;
+    kal_uint32 ErrorEPC;
+#if defined(__MIPS_I7200__)
+    kal_uint32 BadInstr;
+    kal_uint32 BadInstrX;
+    kal_uint32 BEVVA;
+#endif
+
+    /* Timer */
+    kal_uint32 Count;
+    kal_uint32 Compare;
+
+    /* Cache Management */
+    kal_uint32 ITagLo;
+    kal_uint32 IDataLo;
+    kal_uint32 IDataHi;
+    kal_uint32 DTagLo;
+    kal_uint32 DTagHi;
+    kal_uint32 DDataLo;
+#if defined(__MIPS_IA__)
+    kal_uint32 L23TagLo;
+    kal_uint32 L23DataLo;
+    kal_uint32 L23DataHi;
+#endif
+    kal_uint32 ErrCtl;
+    kal_uint32 CacheErr;
+
+    /* VPE Management per-VPE */
+    kal_uint32 VPEControl;
+    kal_uint32 VPEConf0;
+    kal_uint32 VPEConf1;
+#if defined(__MIPS_IA__)
+    kal_uint32 VPESchedule;
+    kal_uint32 VPEScheFBack;
+#endif
+    kal_uint32 VPEOpt;
+
+
+    /* Performance Monitoring */
+    /* Debug and Trace */
+    kal_uint32 Debug;
+    kal_uint32 DEPC;
+    kal_uint32 WatchLo[NBR_OF_WATCH_REGS];
+    kal_uint32 WatchHi[NBR_OF_WATCH_REGS];
+    kal_uint32 YQMask;
+#if defined(__MIPS_I7200__)
+    kal_uint32 KScratch[NBR_OF_KSCRATCH_REGS];
+#endif
+}EX_VPE_REG_T;
+
+typedef struct _ex_cm2_error_info_t
+{
+    kal_uint32 ErrorMask;
+    kal_uint32 ErrorCause;
+    kal_uint32 ErrorAddr;
+    kal_uint32 ErrorMult;
+} EX_CM2_ERROR_INFO_T;
+
+typedef struct _ex_core_reg_t
+{
+    /* VPE Management per-CORE */
+    kal_uint32 MVPControl;
+    kal_uint32 MVPConf0;
+    kal_uint32 MVPConf1;
+    kal_uint32 CDMMBase;
+#if defined(__MIPS_I7200__)
+    kal_uint32 BatchCacheOpControl;
+    kal_uint32 SRAMCoreControl;
+#endif
+    EX_VPE_REG_T vperegs[NBR_VPE_PER_CORE];
+    EX_TC_REG_T tcregs[NBR_TC_PER_CORE];
+} EX_CORE_REG_T;
+
+typedef struct _ex_core_info_t
+{
+    /* VPE Management per-CORE */
+    kal_uint32 MVPControl;
+    kal_uint32 MVPConf0;
+    kal_uint32 MVPConf1;
+    kal_uint32 CDMMBase;
+#if defined(__MIPS_I7200__)
+    kal_uint32 BatchCacheOpControl;
+    kal_uint32 SRAMCoreControl;
+#endif
+} EX_CORE_INFO_T;
+
+#if !defined(__OFFLINE_EX_LOG_PARSER__)
+#define EX_CACHE_LINES_SAVED 4
+typedef struct _ex_interaptiv_t
+{
+   EX_CORE_REG_T coreregs[NBR_CORE];
+   EX_CM2_ERROR_INFO_T cm2_error_info;
+   void *cm2_reg_dump;
+   /* struct CPC_State? */
+   /* struct GIC_State? */
+   /* struct ITC_State? */
+
+   struct l1_icache_line offending_l1_icache_data[EX_CACHE_LINES_SAVED];
+   struct l2_cache_line offending_l2_icache_data[EX_CACHE_LINES_SAVED];
+#if defined(__MIPS_MMU_EXIST__)
+   MIPS_MMU_INFO_T tlbs[SYS_MCU_NUM_VPE][NUMBER_OF_TLBS];
+#endif
+} EX_INTERAPTIV_T;
+#endif /* !__OFFLINE_EX_LOG_PARSER__ */
+
+typedef struct _ex_info_t
+{
+    EX_CPU_REG_T *SST_Exception_Regs;
+    kal_uint32 SST_Exception_Timestamp;
+    kal_uint32 SST_Exception_GLB_Timestamp;
+    exception_enter_category ExceptionEnterCategory;
+    kal_uint16 global_exception_flag;
+    kal_uint8 vpeid;
+    kal_uint8 tcid;
+} EX_INFO_T;
+
+
+/*******************************************************************************
+ * Data Structure Definition - FULL_OFFENDING_INFO for the 1st offender
+ *******************************************************************************/
+#define EX_STACK_DUMP_LEN 7
+typedef struct _ex_full_offending_info_t
+{
+    EX_TC_REG_T             tc_info;
+    EX_VPE_REG_T            vpe_info;
+    EX_CORE_INFO_T          core_info;
+    exception_enter_category  ex_enter_category;
+    kal_uint8               pad[3];
+    kal_uint32              stack_dump[EX_STACK_DUMP_LEN];
+} EX_FULL_OFFENDING_INFO_T;
+
+/*******************************************************************************
+ * Data Structure Definition - VICTIM_INFO
+ *******************************************************************************/
+typedef struct _ex_victim_info_t
+{
+    kal_uint8               vpeid;
+    kal_uint8               tcid;
+    exception_enter_category  ex_enter_category;
+    kal_uint16               global_exception_flag;
+    kal_uint32              sst_exception_timestamp;
+    kal_uint32              offendingPC;
+    EX_CPU_REG_T            cpu_info;
+} EX_VICTIM_INFO_T;
+
+typedef struct _ex_ne_info_t
+{
+    exception_enter_category  ex_enter_category;
+    kal_uint16               global_exception_flag;
+    kal_uint32              sst_exception_timestamp;
+    kal_uint32              offendingPC;
+    EX_CPU_REG_T            cpu_info;
+} EX_NE_INFO_T;
+
+/*******************************************************************************
+ * Data Structure Definition - Fatal Error in general
+ *******************************************************************************/
+
+#define EX_FATALERR_ANALYSIS_OWNER_LEN 8
+#define EX_FATALERR_ANALYSIS_CORE_LEN  7
+#define EX_FATALERR_DESCRIPTION_PARAM_LEN 16
+#define EX_FATALERR_ANALYSIS_PARAM_LEN 40
+#define EX_FATALERR_GUIDELINE_PARAM_LEN 16
+
+typedef struct ex_fatalerror_code_t
+{
+    kal_uint32 code1;
+    kal_uint32 code2;
+    kal_uint32 code3;
+} EX_FATALERR_CODE_T;
+
+typedef struct ex_analysis_t
+{
+    kal_char    offender[EX_UNIT_NAME_LEN];
+    kal_bool    is_cadefa_supported;
+    kal_uint8   pad[7];
+
+    // TODO: remove
+    kal_uint32 trace;
+    kal_uint8 param[EX_FATALERR_ANALYSIS_PARAM_LEN];
+} EX_ANALYSIS_T;
+
+typedef struct ex_description_t
+{
+    kal_uint32 trace;
+    kal_uint8 param[EX_FATALERR_DESCRIPTION_PARAM_LEN];
+} EX_DESCRIPTION_T;
+
+typedef struct ex_guideline_t
+{
+    kal_uint32 trace;
+    kal_uint8 param[EX_FATALERR_GUIDELINE_PARAM_LEN];
+} EX_GUIDELINE_T;
+
+
+/*******************************************************************************
+ * Data Structure Definition - Fatal Error extended
+ *******************************************************************************/
+
+#define EX_CTRLBUFF_SRCFILE_LEN 32 /* filename */
+typedef struct
+{
+    kal_char ex_his_owner[EX_UNIT_NAME_LEN];                        /* control buffer owner */
+    kal_char ex_his_source[EX_CTRLBUFF_SRCFILE_LEN]; /* source file */
+    kal_uint32 ex_his_line;                          /* line number */
+    kal_uint32 ex_his_count;                         /* number of identical entries */
+} EX_CTRLBUFF_HISTORY_T;
+
+typedef struct
+{
+    kal_uint32 ex_buf_RTOS_header1;  /* RTOS overhead 1, 0: allocated, else next pointer */
+    kal_uint32 ex_buf_RTOS_header2;  /* RTOS overhead 2, pointer to its control block */
+    kal_uint32 ex_buf_KAL_header1; /* KAL overhead 1, header (0xF1F1F1F1) */
+    kal_uint32 ex_buf_KAL_header2; /* KAL overhead 2, task ID */
+    kal_uint32 ex_buf_KAL_header3; /* KAL overhead 3, pointer to its control block) */
+    kal_uint32 ex_buf_poolID;      /* Buffer pointer */
+    kal_uint32 ex_buf_KAL_footer1; /* KAL footer: 0xF2F2F2F2 */
+    kal_uint32 ex_buf_KAL_footer2; /* KAL footer appended after size requested */
+} EX_CTRLBUFF_COMMON_T;
+
+typedef struct
+{
+    kal_char ex_buf_source[EX_CTRLBUFF_SRCFILE_LEN];  /* Source file name */
+    kal_uint32 ex_buf_line;                           /* line number */
+} EX_CTRLBUFF_OWNER_T;
+
+typedef union
+{
+    EX_CTRLBUFF_HISTORY_T history; /* length: 32 */
+    EX_CTRLBUFF_COMMON_T common;   /* length: 32 */
+} EX_CTRLBUFF_INFO_T;
+
+typedef struct
+{
+    kal_uint32 ex_ctrlbuf_size;           /* offset: +0x13C, length: 4 */   /* control buffer size per entry */
+    kal_uint32 ex_ctrlbuf_num;            /* offset: +0x140, length: 4 */   /* total number of entries */
+    EX_CTRLBUFF_INFO_T ex_ctrlbuf_top;    /* offset: +0x144, length: 32 */   /* top occupation history node */
+    EX_CTRLBUFF_INFO_T ex_ctrlbuf_second; /* offset: +0x164, length: 32 */   /* second occupation history node */
+    EX_CTRLBUFF_INFO_T ex_ctrlbuf_third;  /* offset: +0x184, length: 32 */   /* third occupation history node */
+    EX_CTRLBUFF_OWNER_T ex_monitor[3];    /* offset: +0x1A4, length: 48 */
+    kal_uint32 ex_reserved[2];            /* offset: +0x1D4, length: 16 */   /* reserved */
+} EX_CTRLBUFF_T;
+
+typedef struct
+{
+    module_type ex_his_module;  /* module ID */
+    kal_uint8 ex_his_source[EX_UNIT_NAME_LEN]; /* timer name */
+    kal_uint32 ex_his_hf;       /* es buffer handling function */
+    kal_uint32 ex_his_count;    /* number of identical entries */
+} EX_ESBUFF_HISTORY_T;
+
+typedef struct
+{
+    kal_uint32 ex_esbuf_size;              /* offset: +0x13C, length: 4 */   /* event scheduler buffer size per entry */
+    kal_uint32 ex_esbuf_num;               /* offset: +0x140, length: 4 */   /* total number of entries */
+    EX_ESBUFF_HISTORY_T ex_esbuf_top;      /* offset: +0x144, length: 20 */   /* top occupation history node */
+    EX_ESBUFF_HISTORY_T ex_esbuf_second;   /* offset: +0x158, length: 20 */   /* second occupation history node */
+    EX_ESBUFF_HISTORY_T ex_esbuf_third;    /* offset: +0x16C, length: 20 */   /* third occupation history node */
+} EX_ESBUFF_T;
+
+typedef struct
+{
+    kal_uint16 ex_q_src_mod;        /* source module ID */
+    kal_uint8 ex_q_count;           /* total number of identical message */
+    kal_uint8 ex_q_config_entry;    /* total number of entries */
+    kal_uint16 ex_q_msg_id;         /* message ID */
+    kal_uint16 ex_q_cur_mes_no;     /* tatal number of messages left in queue */
+} EX_QUEUE_T;
+
+typedef struct
+{
+    kal_char ex_task_name[EX_UNIT_NAME_LEN];       /* task name */
+    kal_char ex_task_stack_gp[8];     /* guard pattern:STACK_END */
+    kal_uint32 ex_task_cur_status;    /* task current status, eg. RUNNING, READY etc */
+    EX_QUEUE_T ex_task_external_q;    /* task external queue */
+    EX_QUEUE_T ex_task_internal_q;    /* task internal queue */
+    kal_uint32 ex_reserved;           /* reserved */
+} EX_TASKINFO_T;
+
+
+
+/*******************************************************************************
+ * Constant Definition and Exported Type - Fatal Error
+ *******************************************************************************/
+
+#define EX_MAX_TASK_DUMP 4
+#define EX_QUEUE_TRACK 20
+typedef struct ex_fatalerror_t
+{
+    EX_FATALERR_CODE_T error_code;                 /* offset: +0x, length: */
+    EX_ANALYSIS_T analysis;                        /* offset: +0x, length:  */
+
+    union
+    {
+        EX_CTRLBUFF_T ctrl_buff;                   /* offset: +0x, length:  */
+        EX_ESBUFF_T es_buff;                       /* offset: +0x, length: */
+        EX_TASKINFO_T task_info[EX_MAX_TASK_DUMP]; /* offset: +0x, length:  */
+    } info;
+
+    kal_uint32  ext_queue_pending_cnt;
+    kal_uint32  ext_queue_pending[EX_QUEUE_TRACK];
+    EX_DESCRIPTION_T description;                  /* offset: +0x, length: */
+    EX_GUIDELINE_T guideline;                      /* offset: +0x, length: */
+} EX_FATALERR_T;
+
+typedef struct ex_nested_fatalerror_t
+{
+    EX_FATALERR_CODE_T error_code;                 /* offset: +0x, length: */
+} EX_NE_FATALERR_T;
+
+
+/*******************************************************************************
+ * Constant Definition and Exported Type - Assert Failure
+ *******************************************************************************/
+#define EX_HEADER_SIZE                sizeof(EX_HEADER_T)
+#define EX_SWVER_LEN                  sizeof(EX_LOADINFO_T)
+#define EX_ENVINFO_SIZE               sizeof(EX_ENVINFO_T)
+#define EX_BASIC_OFFENDING_INFO_SIZE  sizeof(EX_BASIC_OFFENDING_INFO_T)
+#define EX_FULL_OFFENDING_INFO_SIZE   sizeof(EX_FULL_OFFENDING_INFO_T)
+#define EX_TOTAL_VICTIM_INFO_SIZE     ((sizeof(EX_VICTIM_INFO_T))*TOTAL_VICTIM_VPE_COUNT)
+
+#define EX_ASSERTFAIL_FILEPATH_LEN 256
+#define EX_ASSERTFAIL_FILENAME_LEN 64
+#define EX_GUARD_LEN 4
+#define EX_ASSERTFAIL_SIZE EX_ASSERTFAIL_FILEPATH_LEN + \
+                           EX_ASSERTFAIL_FILENAME_LEN + \
+                           sizeof(kal_uint32) * 4 + \
+                           EX_GUARD_LEN
+
+
+#define EX_ASSERTFAIL_DUMP_LEN  ((EX_LOG_SIZE - (EX_HEADER_SIZE + EX_SWVER_LEN + \
+                                 EX_BASIC_OFFENDING_INFO_SIZE +  EX_ENVINFO_SIZE + \
+                                 EX_FULL_OFFENDING_INFO_SIZE + \
+                                 EX_ASSERTFAIL_SIZE + EX_TOTAL_VICTIM_INFO_SIZE)) & ~(4-1))
+
+
+typedef struct ex_assert_fail_t
+{
+    kal_char filepath[EX_ASSERTFAIL_FILEPATH_LEN];
+    kal_char filename[EX_ASSERTFAIL_FILENAME_LEN];  /* offset: +0xD8, length: 64 */
+    kal_uint32 linenumber;                          /* offset: +0xF0, length: 4 */
+    kal_uint32 parameters[3];                       /* offset: +0xF4, length: 12 */
+    kal_uint8 dump[EX_ASSERTFAIL_DUMP_LEN];         /* offset: +0x100, length: 244 */
+    kal_uint32 custom_param;                        /* offset: +0x1FC, length: 4 */
+} EX_ASSERTFAIL_T;
+
+typedef struct ex_nested_assert_fail_t
+{
+    kal_char filename[EX_ASSERTFAIL_FILENAME_LEN];  /* length: 64 */
+    kal_uint32 linenumber;                          /* length: 4 */
+} EX_NE_ASSERTFAIL_T;
+
+
+/*******************************************************************************
+ * Globally Exported Data Structure
+ *******************************************************************************/
+typedef union
+{
+    EX_FATALERR_T fatalerr;
+    EX_ASSERTFAIL_T assert;
+} EX_CONTENT_T;
+
+typedef union
+{
+    EX_NE_FATALERR_T fatalerr;
+    EX_NE_ASSERTFAIL_T assert;
+} EX_NE_CONTENT_T;
+
+/* Standard strutcure of an exception log */
+typedef struct ex_exception_log_t
+{
+    EX_HEADER_T                  header;                          /* offset: +0x0 length: */
+    EX_LOADINFO_T                load_info;                       /* offset: +0x, length: */
+    EX_BASIC_OFFENDING_INFO_T    basic_info;
+    EX_ENVINFO_T                 envinfo;                         /* offset: , length:  */
+    EX_FULL_OFFENDING_INFO_T     full_info;
+    EX_CONTENT_T                 content;                         /* offset: , length:  */
+    EX_VICTIM_INFO_T             victim_info[TOTAL_VICTIM_VPE_COUNT];
+} EX_LOG_T;
+
+typedef struct ex_nested_exception_log_t
+{
+    exception_type ex_type;
+    EX_NE_INFO_T   info;
+    EX_NE_CONTENT_T content;
+} EX_NE_LOG_T;
+
+/* parameter to ex_init_log */
+typedef struct
+{
+    exception_type type;
+    kal_bool ext;
+    kal_uint32 *code1;
+    kal_uint32 *code2;
+    kal_uint32 *code3;
+    kal_uint32 e1;
+    kal_uint32 e2;
+    kal_uint32 e3;
+    ASSERT_DUMP_PARAM_T *dump_param;
+    kal_uint32 custom_param;
+} EX_INIT_LOG_PARAM_T;
+
+/*******************************************************************************
+ * ELT nvram reading format
+ *******************************************************************************/
+/*==========================================*/
+/* NOTE: The structure is frozen; offset of content should be FIXED. */
+/*==========================================*/
+/* TODO */
+
+
+/***************************** -structure end- *******************************/
+//PRAGMA_END_PACK_STRUCT
+/*******************************************************************************
+ * Globally Exported macro
+ *******************************************************************************/
+#define EX_LOG_DESCRIPTION_PARAM ex_log_ptr->content.fatalerr.description.param
+#define EX_LOG_ANALYSIS_PARAM ex_log_ptr->content.fatalerr.analysis.param
+#define EX_LOG_ANALYSIS_OWNER ex_log_ptr->content.fatalerr.analysis.offender
+#define EX_LOG_ANALYSIS_CADEFA ex_log_ptr->content.fatalerr.analysis.is_cadefa_supported
+#define EX_LOG_GUIDELINE_PARAM ex_log_ptr->content.fatalerr.guideline.param
+#if !defined(__MTK_TARGET__) || (defined(__MTK_TARGET__) && defined(DRV_DEBUG))
+#define SET_EX_STEP(x)
+#define GET_EX_STEP()
+#define GET_NE_STEP()
+#define GET_EX_STEP_BY_VPE(vpe)
+#define GET_NE_STEP_BY_VPE(vpe)
+#define SET_HS(core, status)
+#define GET_HS(core)
+#else
+#define SET_EX_STEP(x)                         ex_set_step_logging(x)
+#define GET_EX_STEP()                          ex_get_step_logging(kal_get_current_vpe_id(), KAL_FALSE)
+#define GET_NE_STEP()                          ex_get_step_logging(kal_get_current_vpe_id(), KAL_TRUE)
+#define GET_EX_STEP_BY_VPE(vpe)                ex_get_step_logging((kal_uint32)vpe, KAL_FALSE)
+#define GET_NE_STEP_BY_VPE(vpe)                ex_get_step_logging((kal_uint32)vpe, KAL_TRUE)
+#define SET_HS(core, status)                   ex_set_value((kal_uint32*)ex_##core##_hs_ptr, status)
+#define GET_HS(core)                           ex_get_value((kal_uint32*)ex_##core##_hs_ptr)
+#endif /* !defined(__MTK_TARGET__) || (defined(__MTK_TARGET__) && defined(DRV_DEBUG)) */
+
+
+/*******************************************************************************
+ * Globally Exported Function Prorotype
+ *******************************************************************************/
+
+extern void ex_init_log();
+extern kal_uint32 ex_get_corenum();
+extern void ex_init_nested_log(kal_uint32 ex_category);
+extern void ex_post_init_log();
+extern void ex_define_main_reason();
+extern void ex_save_log();
+extern void ex_output_log(void);
+extern kal_int8 ex_init_ctrl_buff_log(kal_uint32 *target_ptr, kal_uint32 code1, kal_uint32 code2, kal_char **offender_source_file_full_name);
+extern kal_int8 ex_init_es_buff_log(kal_uint32 *target_ptr);
+extern void ex_memory_dump_init(void);
+extern void ex_output_loadinfo(kal_bool is_meta);
+extern kal_bool ex_isNested(void);
+extern kal_uint32* INT_GetExlog(void);
+extern kal_bool ex_IsSupport_OnlineSST_For_GAT(kal_int32 code1);
+extern void ex_output_afound(afound_output_types output_types);
+
+#ifdef __MTK_TARGET__
+extern void ex_reset_hw(void);
+extern void ex_reboot(void);
+
+extern void ex_init_step_logging(void);
+extern void ex_set_step_logging(kal_uint16 start_step);
+extern void ex_fire_extern_step_logging(kal_uint32 info);
+extern kal_bool INT_IsAnyCore_Enter_Exception();
+extern void INT_EnterExceptionForOtherCore();
+extern kal_uint32 sst_get_main_exception_vpe(void);
+extern kal_uint32 sst_get_main_exception_core(void);
+
+extern kal_bool ex_init_pcmon();
+extern kal_bool ex_init_nested_pcmon();
+extern void ex_init_dsm();
+extern void ex_hw_dump();
+extern void ex_hw_data_save();
+extern void KickWDT();
+extern void ex_switchWDT_phase1();
+
+#if defined(__TST_MODULE__)
+extern void ex_reappear_log(void);
+extern void ex_cadefa(kal_bool bypass_nested, kal_bool is_meta);
+extern void ex_cadefa_common(kal_bool bypass_nested, kal_bool bLocalCore, EX_LOG_T * log_ptr);
+extern void ex_output_for_meta(void);
+#else
+#define ex_reappear_log()
+#define ex_cadefa(bypass_nested, kal_meta)
+#define ex_cadefa_common(bypass_nested, bLocalCore, log_ptr)
+#define ex_output_for_meta()
+#endif /* __TST_MODULE__ */
+
+#endif  /* __MTK_TARGET__ */
+
+#ifdef __STACK_ALIGN_MPU__
+kal_uint32 ex_stack_overflow_check_by_mpu(void);
+#endif
+
+extern kal_uint8 sst_increment_exception_count();
+extern void ex_backup_exception_count();
+/*******************************************************************************
+ * Globally Exported variables
+ *******************************************************************************/
+extern EX_LOG_T *ex_log_ptr;
+#if defined(__MTK_TARGET__)
+extern kal_atomic_int32 SST_occupied_core_op_atomic[];
+extern kal_uint32 sst_dc_offshoot_vpeid;
+extern kal_uint32 sst_hw_offshoot_vpeid;
+extern kal_uint32 INT_Exception_Type;
+extern kal_uint32 sst_offending_coreid;
+extern kal_uint32 sst_offending_vpeid;
+extern kal_uint32 sst_offending_tcid;
+extern kal_uint32 INT_Exception_GLBTS;
+
+extern void sst_snprintf(char *s, kal_uint32 size, const char *template, ...);
+#else
+#define sst_snprintf kal_snprintf
+#endif /* __MTK_TARGET__ */
+
+
+#endif /* _EX_ITEM_H */
+
+