[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/hif/hmu.h b/mcu/interface/service/hif/hmu.h
new file mode 100644
index 0000000..9b7e9f3
--- /dev/null
+++ b/mcu/interface/service/hif/hmu.h
@@ -0,0 +1,410 @@
+/*****************************************************************************
+*  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) 2012
+*
+*  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:
+ * ---------
+ *   hmu.c
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *   This file is the header file of Host Interface Management Unit.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 08 07 2017 cs.huang
+ * [MOLY00268551] Task batch scheduling for LTE Low power
+ * HMU for TG change
+ *
+ * 08 07 2017 cs.huang
+ * [MOLY00268551] Task batch scheduling for LTE Low power
+ * HMU for TG change
+ *
+ * 02 06 2017 steve.kao
+ * [MOLY00195563] [6293][EL2][UPCM][RATDM][EPDCP] Initial feature integrations
+ * 	
+ * 	[UMOLYA][TRUNK][HMU] Set HMU_GPTIMER_PRIODIC_INTERVAL as 1 ms for UESIM only
+ *
+ * 09 26 2016 cammie.yang
+ * [MOLY00195563] [6293][EL2][UPCM][RATDM][EPDCP] Initial feature integrations
+ * [TRUNK] UPCM/RATDM/EPDCP feature integrations from PS.DEV
+ *
+ * 09 19 2016 cammie.yang
+ * [MOLY00195563] [6293][EL2][UPCM][RATDM][EPDCP] Initial feature integrations
+ * [PS.DEV][HMU] modify tick uint of HMU_GPTIMER_PRIODIC_INTERVAL in modis environment for NWSIM TC_7_3_6_1
+ *
+ * 11 11 2015 ap.wang
+ * [MOLY00148947] [HMU] Change PALLADIUM GPT timer to 1ms
+ * .
+ *
+ * 11 10 2015 ap.wang
+ * [MOLY00148746] [HMU] Check timer feature
+ * .
+ *
+ * 11 10 2015 ap.wang
+ * [MOLY00148746] [HMU] Check timer feature
+ *
+ * 03 02 2015 ap.wang
+ * [MOLY00097320] [HMU] Rollback HMU 10ms patch for FPGA to 1ms
+ * Rollback HMU 10ms patch for FPGA
+ *
+ * 12 31 2014 ap.wang
+ * [MOLY00089916] [HMU] HIF ON/OFF for power saving
+ * .
+ *
+ * 11 13 2014 cs.huang
+ * [MOLY00071215] [HMU] Modify HMU tick to 10ms for 6291 FPGA freqency too slow
+ * Merging
+ * 	
+ * 	//UMOLY/DEV/MT6291_DEV/mcu/pcore/interface/service/hif/hmu.h
+ * 	
+ * 	to //UMOLY/TRUNK/UMOLY/mcu/pcore/interface/service/hif/hmu.h
+ *
+ * 07 04 2014 ap.wang
+ * [MOLY00071481] [HMU] Add HIF boot init to Application init
+ * .
+ *
+ *
+ * 06 10 2014 ap.wang
+ * [MOLY00067367] [HMU] Modify GPT timer to MS callback for R8 on MOLY
+ * .
+ *
+ * 04 28 2014 ap.wang
+ * [MOLY00063912] [HMU] HMU temp solution for K2 MD2
+ * HMU temp solution for K2 MD2
+ *
+ * 03 11 2013 ap.wang
+ * [MOLY00011696] [HMU] HMU code refine and compile warning fix
+ * [HMU] Add copyright header and change ipc_reload condition
+ ****************************************************************************/
+
+/*******************************************************************************
+ * Include header files
+ *******************************************************************************/
+
+#ifndef __HMU_H__
+#define __HMU_H__
+
+#include "hmu_conf_data.h"
+/*************************************************************************
+ * Type Definitions
+ *************************************************************************/
+
+//#if defined(__MTK_TARGET__)
+//#define hmu_printf               dbg_print
+//#else
+//#define hmu_printf               	kal_printf
+//#endif
+#define hmu_printf
+
+#define HMU_GPTIMER_INIT_INTERVAL	(100U)  //100 ms 
+
+#if defined(__MTK_TARGET__)
+    #if defined(__PALLADIUM__)
+        #define HMU_GPTIMER_PRIODIC_INTERVAL (1U)	// 1ms 
+    #elif defined(__FPGA__)
+        #define HMU_GPTIMER_PRIODIC_INTERVAL (10U)	// 10ms 
+    #else
+        #define HMU_GPTIMER_PRIODIC_INTERVAL (1U)	// 1ms 
+    #endif
+#elif defined(__U4G_ADAPTOR__)
+        #define HMU_GPTIMER_PRIODIC_INTERVAL (1U)	// 1ms. to ensure that GCF TC_7_3_6_1 will pass in NWSIM
+#else
+        #define HMU_GPTIMER_PRIODIC_INTERVAL (10U)	// 10ms
+#endif
+
+/** 
+ * @brief enumeration for HMU API return codes 
+ */
+typedef enum
+{
+	HMU_OK							= 0,	
+
+	HMU_INIT_NOFUNC					= (-1),
+	HMU_NOT_INIT					= (-2),
+	HMU_ALREADY_INIT				= (-3),
+	
+	HMU_QUERY_FAIL					= (-10),
+	HMU_QUERY_OUTOFBUF 				= (-11),
+	HMU_QUERY_NVRAMFAIL				= (-12),
+	HMU_QUERY_NOMATCHING			= (-13),
+
+}hmuReturnCode_enum;
+
+typedef enum
+{
+	HMU_PRE_FUNC					= 0,	
+	HMU_MAIN_FUNC					= 1,	
+	HMU_POST_FUNC					= 2,	
+}hmuFuncType_enum;
+
+/** 
+ * @brief hmu_check_timer() return value 
+ */
+typedef enum
+{
+        HMU_CHECK_TIMER_SUCCESS		= 0,
+	HMU_CHECK_TIMER_WARNING		= 1,
+	HMU_CHECK_TIMER_ERROR		= 2,
+}HMU_CHECK_TIMER_ENUM;
+
+/** 
+ * @brief enumeration for HMU Boot method, 
+ * Currently, we have
+ * (1) HMU_BOOT_NORMAL : this setting is for normal booting with USB,SDIO,CCIF .... 
+ *   When you select HMU_BOOT_NORMAL in hmu_init, the HMU configuration file will be loaded from NVRAM_EF_HMU_CONFIG_LID 
+ * (2) HMU_BOOT_HD L this setting is for USB Host detection booting
+ *   When you select HMU_BOOT_HD in hmu_init, the HMU configuration file will be loaded from NVRAM_EF_HMU_HD_CONFIG_LID  
+ */
+typedef enum
+{
+	HMU_BOOT_NORMAL =  0,
+	HMU_BOOT_HD ,
+}hmuBootType_enum;
+
+typedef enum
+{
+	HMU_TIMER_SOURCE_DSP =  0,
+	HMU_TIMER_SOURCE_SYS ,
+}hmuTimerSource_enum;
+/** 
+ * @name: _HMU_INTERNAL_STRUCT
+ * @brief the structure for Init function and hif emu device types registration table
+ */
+typedef struct _HMU_INTERNAL_STATE_STRUCT {
+	kal_bool 	hmuBootInit;
+	kal_bool 	hmuInit ;
+	kal_eventgrpid		hmuHifEgId ;
+} hmu_internal_state_struct ;
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_boot_init
+ * DESCRIPTION
+ *  HMU 1st boot Init function to init global mutex and gptimer
+ * PARAMETERS
+ *  
+ * RETURNS
+ *  success or fail
+ *****************************************************************************/
+kal_int32 hmu_boot_init(void) ;
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_hifeg_set
+ * DESCRIPTION
+ *  Set one or more the events to resume the HIF task.
+ * PARAMETERS
+ *  events - events to set. 
+ *           See also HIF_DRV_EG_XXX defined in hmu_conf_data.h for more information.
+ * RETURNS
+ *  the eg set result, success or fail
+ *****************************************************************************/
+kal_status hmu_hifeg_set(kal_uint32 events);
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_hifeg_wait
+ * DESCRIPTION
+ *  Wait and clear the one or more HIF events.
+ * PARAMETERS
+ *  events - events to wait. 
+ *           See also HIF_DRV_EG_XXX defined in hmu_conf_data.h for more information.
+ * RETURNS
+ *  The event happened.
+ *****************************************************************************/
+kal_uint32 hmu_hifeg_wait(kal_uint32 events);
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_start_hif_sys_timer
+ * DESCRIPTION
+ *  start the sys timer for HIF tasking. This API should be called from PWSV module to restart
+ *  the timer after wake up from PWSV
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void hmu_start_hif_sys_timer(void) ;
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_stop_hif_sys_timer
+ * DESCRIPTION
+ *  stop the sys timer to pause HIF tasking. This API should be called at the beginning of 
+ *  PWSV procedure
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void hmu_stop_hif_sys_timer(void) ;
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_dsp_timer_kick
+ * DESCRIPTION
+ *  The dsp periodical timer should kick this API to schedul the HIF tasking when the dsp 
+ *  timer exists. 
+ * PARAMETERS
+ *  void
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void hmu_dsp_timer_kick(void) ;
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_switch_hif_timer
+ * DESCRIPTION
+ *  The dsp periodical timer should kick this API to schedul the HIF tasking when the dsp 
+ *  timer exists. 
+ * PARAMETERS
+ *  source - (1) HMU_TIMER_SOURCE_DSP 
+ *			(2) HMU_TIMER_SOURCE_SYS
+ * RETURNS
+ *  void
+ *****************************************************************************/
+void hmu_switch_hif_timer(hmuTimerSource_enum source) ;
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_except_init
+ *
+ * DESCRIPTION
+ *  Trigger an upper layer device module to hook with TTYCORE and then proceed 
+ *  exception flow if an exception happens before hmu_init() completes.
+ *
+ * PARAMETERS
+ *  N/A
+ *
+ * RETURNS
+ *  KAL_TRUE if caller is allowed to proceed the exception flow; 
+ *  KAL_FALSE if there's no proper callback function registered by 
+ *            upper layer device modules or something wrong while executing 
+ *            the callback function.
+ *****************************************************************************/
+kal_bool hmu_except_init(void); 
+
+/*****************************************************************************
+ * FUNCTION
+ *  hif_boot_init
+ * DESCRIPTION
+ *  HIF boot init function to initial HIF module without task.
+ * PARAMETERS
+ *  
+ * RETURNS
+ *  success or fail
+ *****************************************************************************/
+kal_int32 hif_boot_init(void) ;
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_hifeg_stop
+ * DESCRIPTION
+ *  stop one or more HIF events.
+ * PARAMETERS
+ *  events - events to wait. 
+ *           See also HIF_DRV_EG_XXX defined in hmu_conf_data.h for more information.
+ * RETURNS
+ *  The enabled events.
+ *****************************************************************************/
+kal_uint32 hmu_hifeg_stop(kal_uint32 events);
+
+/*****************************************************************************
+ * FUNCTION
+ *  hmu_hifeg_start
+ * DESCRIPTION
+ *  start one or more HIF events.
+ * PARAMETERS
+ *  events - events to wait. 
+ *           See also HIF_DRV_EG_XXX defined in hmu_conf_data.h for more information.
+ * RETURNS
+ *  The enabled events.
+ *****************************************************************************/
+kal_uint32 hmu_hifeg_start(kal_uint32 events);
+
+/*****************************************************************************
+ * FUNCTION
+ * hmu_check_timer
+ * DESCRIPTION
+ * Check HMU timer source whether is normal 
+ * PARAMETERS
+ *  
+ * RETURNS
+ * HMU_CHECK_TIMER_ENUM : return checking result
+ *****************************************************************************/
+kal_uint32 hmu_check_timer(kal_uint32 events);
+
+/*****************************************************************************
+ * FUNCTION
+ * hmu_check_timer_start / hmu_check_timer_stop 
+ * DESCRIPTION
+ * Start / Stop HMU checking timer
+ * PARAMETERS
+ *  
+ * RETURNS
+ *****************************************************************************/
+void hmu_check_timer_start();
+void hmu_check_timer_stop();
+
+/*****************************************************************************
+ * FUNCTION
+ * hmu_tg_callback
+ * DESCRIPTION
+ * Callback from task group hisr
+ * PARAMETERS
+ *  
+ * RETURNS
+ *****************************************************************************/
+#if defined(__LP_SCHEDULE_ENABLE__) && defined(__LP_SCHEDULE_HMU_RESCHEDULE__)
+#define __HMU_TG_TIMER_SUPPORT__
+#endif
+void hmu_tg_timer_callback();
+
+#endif /*__HMU_H__*/