[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/l1/cl1/common/cphevdosch.h b/mcu/interface/l1/cl1/common/cphevdosch.h
new file mode 100644
index 0000000..098388c
--- /dev/null
+++ b/mcu/interface/l1/cl1/common/cphevdosch.h
@@ -0,0 +1,340 @@
+/*****************************************************************************
+*  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) 2016
+*
+*  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).
+*
+*****************************************************************************/
+#ifndef _CPHEVDOSCH_H_
+#define _CPHEVDOSCH_H_
+
+//#include "cl1common.h"
+#include "kal_general_types.h"
+
+#define SCH_MAX_PILOTS            56
+#define SCH_KEPT_PILOTS           20
+#define SYS_MAX_ACTIVE_LIST_PILOTS       6 /* max number of pilot pn's in acitve list  */
+#define SYS_MAX_CANDIDATE_LIST_PILOTS   10 /* max number of pilot pn's in candidate list  */
+#define SYS_MAX_NEIGHBOR_LIST_PILOTS    56 /* max number of pilot pn's in neighbor list  */
+#define SYS_MAX_REMAINING_LIST_PILOTS    5 /* max number of pilots in remaining set */
+
+
+#define SCH_MAX_PER_PILOT_PATHS   16
+#define SCH_VERIF_NUM_PILOTS_FOUR  4
+#define SCH_VERIF_NUM_PILOTS_ONE   1
+#define SCH_ALWAYS_SRCH            1
+#define SCH_NOT_ALWAYS_SRCH        0
+#define SCH_MAX_USABLE_PATHS      42
+#define SCH_MAX_PER_PILOT_USABLE_PATHS    7
+
+#define SCH_USABLE_PATH_SPY_UPDATE_CNT 10
+
+#define SCH_KEPT_PILOTS           20
+#define SCH_PILOT_ENABLE           1
+#define SCH_PILOT_DISABLE          0
+#define SCH_PILOT_KEEP             1
+#define SCH_PILOT_DONT_KEEP        0
+#define SCH_PPM_SLOT_Q6        15625
+/* #define SCH_STAT_TO_ECIO_Q29   23981*/
+#define SCH_STAT_TO_ECIO_Q29   (31655*2)  /*temp fix for pilot fluctuation, match shift 1 change */
+
+#define SCH_MINUS8DBQ16        10387
+#define SCH_MINUS11DBQ16        5206
+#define SCH_MINUS12DBQ16        4135
+#define SCH_MINUS14DBQ16        2609
+#define SCH_MINUS14p5DBQ16      2325
+#define SCH_MINUS15DBQ16        2072
+#define SCH_MINUS18DBQ16        1038
+#define SCH_MINUS21DBQ16         520
+#define SCH_MAX_NUM_FINGERS         6
+#define SCH_MIN_OFFSET_DIST_TC2     2
+#define SCH_HALF_CHIP_TC2           1
+#define SCH_ONE_CHIP_TC2            2
+
+#define SCH_FINGER_ALLOC_CNT        3
+
+/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPT: Period in half-slots before next buffer capture NOTE: the CAPLEN<= BUFFCAPT period
+define ONLINE search mode values */
+#define SCH_HW_PROG_ONL_INBUF_CTL_CAPT_PERIOD      7   /* Capture at (M+1) half slots intervals, i.e., 6.668ms */
+
+/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPINT: Num of buffers captured before INTR is triggered
+define ONLINE search mode values */
+#define SCH_HW_PROG_ONL_INBUF_CTL_CAPTURES_PER_INTR  8    /* Interrupt to CP every N*(M+1) half slots, 53.3ms */
+
+
+/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPT: Period in half-slots before next buffer capture NOTE: the CAPLEN<= BUFFCAPT period
+define DFS search mode values */
+#define SCH_HW_PROG_DFS_INBUF_CTL_CAPT_PERIOD      3   /* Capture at (M+1) half slots intervals, i.e., 3.334ms */
+
+/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPINT: Num of buffers captured before INTR is triggered
+define DFS search mode values */
+#define SCH_HW_PROG_DFS_INBUF_CTL_CAPTURES_PER_INTR  2    /* Interrupt to CP every N*(M+1) half slots, 6.668ms */
+
+/* Sch HW programming for SRDO_INBUF_CTL:ANTENNA_INIT_EN :-
+  Enable changing the source antenna (main OR diversity, based on the value in
+  SRDO_INBUF_CTL:ANTENNA_INIT ), in Antenna-toggle search mode
+  (SRDO_INBUF_CTL:ANT_MODE = 0x2/ 0x3)
+  NOTE: IMD requires last buffer to be captured as MAIN hence based on the
+  number of buffers captured, change the starting source accordingly
+*/
+#define SCH_HW_INBUF_CTL_ANTENNA_INIT_EN_USED    1
+#define SCH_HW_INBUF_CTL_ANTENNA_INIT_EN_NOTUSED   0
+#define SCH_HW_INBUF_CTL_ANTENNA_INIT_NOTUSED  SCH_HW_PROG_INBUF_ANT_MODE_MAIN //Don't care value for SRDO_INBUF_CTL:ANTENNA_INIT field
+
+#define    RMC_SCH_LOGIQ_MAX_BUFFER_LENGTH    0x8C0 /*1024+96chip 2x*/
+
+/* Sch HW programming for SRDO_INBUF_CTL:ANT_MODE :-
+Define type to indicate input source antenna */
+typedef enum
+{
+  SCH_HW_PROG_INBUF_ANT_MODE_MAIN                 = 0,
+  SCH_HW_PROG_INBUF_ANT_MODE_DIV                  = 1,
+  SCH_HW_PROG_INBUF_ANT_MODE_ALTERNATE_PER_CAPT   = 2,    /* Alternate antenna after each capture NOTE: Multiple captures before search HW interrupt is triggered. Also each cpature can be multiple half-slots long */
+  SCH_HW_PROG_INBUF_ANT_MODE_ALTERNATE_PER_HFSLOT = 3,   /* Alternate antenna after each half slot*/
+}SchHwProgInBufAntModeT;
+
+typedef enum
+{
+  HW_RESET,
+  HW_PAUSE,
+  INIT_ACQ_PN_SRCH,
+  INIT_ACQ_ONLINE_PN_SRCH,
+  INIT_ACQ_VERIF_SRCH,
+  MINI_ACQ,
+  FAST_SEARCH,
+  ONLINE,
+  OFFSET_ADJ,
+  FAST_FULL_SEARCH,
+  SCH_MODE_UNUSED_1,
+  SCH_MODE_UNUSED_2,
+  DFS,
+  MEAS_6MS_SRCH,
+  MEAS_ONLINE_SCAN
+} SchModeT;
+
+typedef struct
+{
+    kal_uint16 PilotPN;      /* PilotPN 0 to 511 */
+    kal_int16 StartOffset;   /* Start offset to search,  Tc/2 (-1024,...,+1023.5 chips) */
+} SchCfgPnListT; 
+
+typedef struct
+{
+    kal_int8 NumPilots;        /* Number of Pilots in the Active list */
+    kal_uint16 WinSize;        /* Window Size */
+    SchCfgPnListT PnListQ[SYS_MAX_ACTIVE_LIST_PILOTS];
+} SchCfgActListT;
+
+typedef struct
+{
+    kal_int8 NumPilots;       /* Number of Pilots in the Candidate list */
+    kal_uint16 WinSize;      /* Window Size */
+    SchCfgPnListT PnListQ[SYS_MAX_CANDIDATE_LIST_PILOTS];
+} SchCfgCandListT;
+
+typedef struct
+{
+    kal_int8 NumPilots;       /* Number of Pilots in the Neighbor list */
+    kal_uint16 WinSize[SYS_MAX_NEIGHBOR_LIST_PILOTS];        /* Window information */
+    SchCfgPnListT PnListQ[SYS_MAX_NEIGHBOR_LIST_PILOTS];
+} SchCfgNeighListT;
+
+typedef struct
+{
+    kal_int8 NumPilots;       /* Number of Pilots in the Remaining list */
+    kal_uint16 WinSize;      /* Window Size */
+    SchCfgPnListT PnListQ[SYS_MAX_REMAINING_LIST_PILOTS];
+} SchCfgRemListT;
+
+
+typedef struct
+{
+    kal_int16 ListNum;       /* total search list number (A+C+N+R) */
+    SchCfgActListT Active;
+    SchCfgCandListT Candidate;
+    SchCfgNeighListT Neighbor;
+    SchCfgRemListT Remaining;
+} SchListT;
+
+typedef struct
+{
+  kal_uint16 WinSize;       /* Window Size */
+  kal_int16 WinOffset;      /* Window Offset */
+} WinT;
+
+typedef struct
+{
+  kal_uint16 PilotPN;      /* PilotPN 0 to 511 */
+  kal_int16 Offset;       /* Tc/2 resolution */
+} AcqListQT;
+
+typedef struct
+{
+    kal_int16 ListNum;      
+    AcqListQT PnListQ[SCH_VERIF_NUM_PILOTS_FOUR];
+} SchAcqListT; 
+
+typedef struct
+{
+    SchModeT SchMode;
+    kal_uint16 SchInitAcqNumHalfSlotBufCap;   
+    kal_uint8  Antenna;
+    kal_bool  antenna_init_en;
+    kal_uint32 antenna_init; //Not Valid as antenna_init_en is FALSE
+    kal_bool   Div_only;
+    kal_uint16 SchInitAcqWinSizeTc;
+    kal_uint16 SchInitAcqWinOffsetTc;   
+    kal_uint16 SchMiniAcqWinSizeIndex;
+    //intkal_bool  bHwdPwrSavingDoPwrUp;//no this mode for 93
+    kal_bool  SchStartDlyEn;
+    kal_uint32  SchStartDlyCnt;
+    SchListT SchList;
+    SchAcqListT SchAcqSrch;
+} CphEvdoSchModeConfigStruct;
+
+typedef struct
+{
+   kal_uint16 Metric;
+   kal_uint16 PilotPN;
+   kal_int16 Offset;  /* Offset in Tc/2 (-1024,...,+1023.5 chips) */
+} SchSortQT;
+
+typedef struct
+{
+   kal_uint16  Count;
+   SchSortQT SortQ[SCH_MAX_PILOTS];
+} SchSortT;
+
+typedef struct
+{
+  kal_uint16 Stat;         /* Stat for path */
+  kal_int16 StatOffset;    /* Stat Offset in Tc/2 (-1024,...,+1023.5 chips) */
+  kal_uint8 PathValid;     /* Indicates if path is valid (passes thresh) */
+  kal_uint8 NumAvg;        /* Number of times offset was found */
+  kal_uint8 Ant;           /* Source antenna */
+} SchPathQT;
+
+typedef struct
+{
+  kal_uint16 PilotPN;      /* PilotPN 0 to 511 */
+  kal_int16 Offset;        /* strongest offset found,  Tc/2 (-1024,...,+1023.5 chips) */
+  kal_int16 StartOffset;   /* Start offset to search,  Tc/2 (-1024,...,+1023.5 chips) */
+  kal_uint16 MaxStat;       /* Maximum statistic in the path buffer */
+  kal_uint16 PwrEst;       /* Sum of usable path power */
+#ifdef MTK_PLT_ON_PC
+  kal_int16  Strength_db;  /* pilot strength in db */
+#endif
+  kal_uint8 NumWinSearch;  /* Number of times the pilot was searched */
+  kal_uint8 PilotFound;    /* Indicates if the H/W found the pilot */
+  SchPathQT PathQ[SCH_MAX_PER_PILOT_PATHS];
+} ListQT;
+
+typedef struct
+{
+  kal_int8 NumPilots;        /* Number of Pilots in the Active list */
+  kal_uint16 WinSize;        /* Window Size */
+  kal_uint8 MACIndex[SYS_MAX_ACTIVE_LIST_PILOTS];      /* MAC Index */
+  kal_int8 PcgId[SYS_MAX_ACTIVE_LIST_PILOTS];
+  kal_uint8 RABLength[SYS_MAX_ACTIVE_LIST_PILOTS];
+  kal_uint8 RABOffset[SYS_MAX_ACTIVE_LIST_PILOTS];
+  kal_uint8 RAChannelGain[SYS_MAX_ACTIVE_LIST_PILOTS];
+  kal_uint8 DRCCover[SYS_MAX_ACTIVE_LIST_PILOTS];
+  kal_uint8 DSC[SYS_MAX_ACTIVE_LIST_PILOTS];   /* oxff means NULL */
+  ListQT ListQ[SYS_MAX_ACTIVE_LIST_PILOTS];
+} ActListT;
+
+typedef struct
+{
+  kal_int8 NumPilots;       /* Number of Pilots in the Candidate list */
+  kal_uint16 WinSize;      /* Window Size */
+  ListQT ListQ[SYS_MAX_CANDIDATE_LIST_PILOTS];
+} CandListT;
+
+typedef struct
+{
+  kal_int8 NumPilots;       /* Number of Pilots in the Neighbor list */
+  WinT Win[SYS_MAX_NEIGHBOR_LIST_PILOTS];        /* Window information */
+  ListQT ListQ[SYS_MAX_NEIGHBOR_LIST_PILOTS];
+} NeighListT;
+
+typedef struct
+{
+  kal_int8 NumPilots;       /* Number of Pilots in the Remaining list */
+  kal_uint16 WinSize;      /* Window Size */
+  ListQT ListQ[SYS_MAX_REMAINING_LIST_PILOTS];
+} RemListT;
+
+typedef struct
+{
+  kal_int16 PilotSeq;
+  kal_uint8 ConnSetupFlag;
+  kal_uint8 TcaFlag;
+  kal_int16 ListNum;       /* total search list number (A+C+N+R) */
+  ActListT Active;
+  CandListT Candidate;
+  NeighListT Neighbor;
+  RemListT Remaining;
+} RmcSchStatusT;
+
+typedef struct 
+{
+    SchModeT SchMode;
+    SchSortQT *pSortQ;   /**For store INIT_PN_SRCH result: SCH_KEPT_PILOTS.*/
+    RmcSchStatusT *pSchStatus; /**For store other search result.*/
+} CphEvdoSchResultReadStruct; 
+
+typedef struct
+{
+   kal_int8             ImdAdcI;    /* IMD ADC I samples */
+   kal_int8             ImdAdcQ;    /* IMD ADC Q samples */
+} RmcSchLogIQComplexSampleT;
+
+
+typedef struct
+{
+      kal_int8   tbd;
+}CphEvdoSchTestIqDumpAdsStruct;
+    
+void CphEvdoSchInit();
+void CphEvdoPauseConfig(kal_uint8 PauseBit);
+void CphEvdoSchModeConfig(CphEvdoSchModeConfigStruct *ads_ptr);
+void CphEvdoSchResultRead(CphEvdoSchResultReadStruct *ads_ptr);
+void CphEvdoSchLogIqRead(RmcSchLogIQComplexSampleT *ads_ptr);
+#if 0 /**Just used for debug.*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+kal_bool CphEvdoSchReadSchDone(void);
+#ifdef MTK_PLT_ON_PC_IT
+void CphEvdoSchWriteSchDone(kal_bool SchDone);
+#endif
+#endif
+