[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/l1/interface/gl1/common_reg.h b/mcu/l1/interface/gl1/common_reg.h
new file mode 100644
index 0000000..a9278be
--- /dev/null
+++ b/mcu/l1/interface/gl1/common_reg.h
@@ -0,0 +1,100 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   common_reg.h
+ *
+ * Project:
+ * --------
+ *   MT6208
+ *
+ * Description:
+ * ------------
+ *   Definition of common H/W register address used in L1D/UL1D
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * $Revision: $
+ * $Modtime: $
+ * $Log: $
+ *
+ * removed!
+ * removed!
+ * All HW register read/write should use volatile
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * add to source control recursely
+ *
+ * removed!
+ * removed!
+ * Solve compile error
+ *******************************************************************************/
+
+#ifndef _COMMON_REG_H_
+#define _COMMON_REG_H_
+
+/*=============================================================================*/
+
+typedef volatile unsigned short* SRAMADDR;         /* SRAM addr is 16 bits  */
+typedef volatile unsigned short  SRAMDATA;         /* SRAM data is 16 bits  */
+typedef volatile unsigned short* APBADDR;          /* APB addr is 32 bits   */
+typedef volatile unsigned short  APBDATA;          /* APB data is 16 bits   */
+typedef volatile unsigned long*  APBADDR32;        /* APB addr is 32 bits   */
+typedef volatile unsigned long   APBDATA32;        /* APB data is 16 bits   */
+typedef volatile unsigned short* DPRAMADDR;        /* DPRAM addr is 16 bits */
+typedef volatile signed   short* DPRAMADDR_S;      /* DPRAM addr is 16 bits */
+typedef volatile unsigned short  DPRAMDATA;        /* DPRAM data is 16 bits */
+
+#endif
+
diff --git a/mcu/l1/interface/gl1/fcs.h b/mcu/l1/interface/gl1/fcs.h
new file mode 100644
index 0000000..441bb36
--- /dev/null
+++ b/mcu/l1/interface/gl1/fcs.h
@@ -0,0 +1,130 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   fcs.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is for FCS driver.
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef L1_FCS_H
+#define L1_FCS_H
+
+#include "reg_base.h"
+#include "kal_general_types.h"
+
+//#define FCS_CG_SET2 ((volatile kal_uint32*)(BASE_MADDR_CLK_CTRL+0x0004))/* FCS gate clock */
+//#define FCS_CG_CLR2 ((volatile kal_uint32*)(BASE_MADDR_CLK_CTRL+0x0008))/* FCS ungate clock */
+
+#define FCS_DATA   ((volatile kal_uint16*)(FCS2G_base+0x0000))/* FCS data */
+#define FCS_DLEN   ((volatile kal_uint16*)(FCS2G_base+0x0004))/* FCS data length */
+#define FCS_PAR1   ((volatile kal_uint16*)(FCS2G_base+0x0008))/* FCS parity MSB part */
+#define FCS_PAR2   ((volatile kal_uint16*)(FCS2G_base+0x000C))/* FCS parity LSB part */
+#define FCS_STAT   ((volatile kal_uint16*)(FCS2G_base+0x0010))/* FCS codec status register */
+#define FCS_RST   ((volatile kal_uint16*)(FCS2G_base+0x0014))/* FCS codec reset register */
+
+extern void fcs_feed_stream(kal_uint8* data,kal_uint16 len,kal_uint8 BIT_ORDER,kal_uint8 PAR_ORDER,kal_uint8 EN_DEC);
+extern void get_fcs_parity(kal_uint8* parity);
+extern kal_bool get_fcs_result(void);
+
+#define FCS_CLK_OFF() PDN_SET(PDN_FCS_SLV_DBCLK)//HW_WRITE(FCS_CG_CLR2,(1 << 15))
+#define FCS_CLK_ON() PDN_CLR(PDN_FCS_SLV_DBCLK)//HW_WRITE(FCS_CG_SET2,(1 << 15))
+
+#endif
+
diff --git a/mcu/l1/interface/gl1/internal/l1d_interface_l1core.h b/mcu/l1/interface/gl1/internal/l1d_interface_l1core.h
new file mode 100644
index 0000000..2bda2c1
--- /dev/null
+++ b/mcu/l1/interface/gl1/internal/l1d_interface_l1core.h
@@ -0,0 +1,120 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ * l1d_pcore_interface.h
+ *
+ * Project:
+ * --------
+ * MT6291
+ *
+ * Description:
+ * ------------
+ * RF Interface for MD internal
+ *
+ * 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!
+ *
+ *----------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+ 
+#ifndef  _L1D_INTERFACE_L1CORE_H_
+#define  _L1D_INTERFACE_L1CORE_H_
+/*===============================================================================*/
+
+/*******************************************************************************
+ * #include
+ ******************************************************************************/
+
+/*******************************************************************************
+ * #define
+ ******************************************************************************/
+                        
+/*******************************************************************************
+ * typedef
+ ******************************************************************************/
+/** Structure Prototypes can be seen by other files**/
+
+/*******************************************************************************
+ * Global Functions Prototype (Interface)
+ ******************************************************************************/
+/** Function Prototypes can be used by other files **/
+
+kal_uint32 L1D_GetBandSupport_L1Core( void );
+void GL1D_CDF_UPDATE_RXD_ENABLE_FLAG(RASPublicParams* L1_RAS_Custom);
+
+#if IS_GSM_TX_DETECTOR_SUPPORT
+void GL1D_TxD_Start();
+#endif
+
+
+#endif /* End of #ifndef  _L1D_INTERFACE_L1CORE_H_ */
diff --git a/mcu/l1/interface/gl1/l1_afc.h b/mcu/l1/interface/gl1/l1_afc.h
new file mode 100644
index 0000000..5924338
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_afc.h
@@ -0,0 +1,257 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   l1_afc.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Multi-mode AFC control interface
+ *
+ * Author:
+ * -------
+ *
+ * $Log$
+ *
+ * 05 21 2021 shrikant.nandagawali
+ * [MOLY00665438] [Colgin][MT2735][New feature][MD] Wide temperature.[EWSP0000255811]
+ *
+ * 06 08 2018 dinesh.kumar
+ * [MOLY00315229][6295][cotms]UL1D FPU removing
+ *
+ * 05 14 2018 tim.tsai
+ * [MOLY00324757] [MMRFD] remove legacy option
+ * .
+ *
+ * 03 28 2018 dinesh.kumar
+ * [MOLY00315229][6295][cotms]UL1D FPU removing
+ *
+ * 06 06 2017 sj.cheng
+ * [MOLY00254832] [MMRF]xl1sim single mode trigger MMRF task
+ *
+ * 03 29 2017 aman.singh
+ * [MOLY00237873] [6293][EL1] Gemini L+L
+ *
+ * 10 04 2016 aman.singh
+ * [MOLY00186076] [L1D][Modify] Changes for warning removal
+ * 	
+ * 	.
+ *
+ * 09 12 2016 yi-ying.lin
+ * [MOLY00202968] [MMRF] move multi-afc share memory definition to mml1_rf_afc.h
+ * .
+ *
+ * 08 25 2016 yi-ying.lin
+ * [MOLY00199309] [MMRF] remove mmafc cross-core structure definition
+ * .
+ *
+ * 10 06 2015 ola.lee
+ * [MOLY00144115] [L1D] Update RF Conflict Dispatch API for SRLTE
+ * 	.
+ *
+ * 09 07 2015 glen.hua
+ * [MOLY00140544] [Jade][L+W]AFC change for L+W project
+ * 	.
+ *
+ * 09 07 2015 glen.hua
+ * [MOLY00140544] [Jade][L+W]AFC change for L+W project
+ * 	.
+ *
+ * 07 21 2015 yi-ying.lin
+ * [MOLY00130526] [L1D][Modify] Move MMAFC MD1/MD3 afc database structure definition to cross-core folder
+ * 	.
+ *
+ * 07 06 2015 my.tu
+ * [MOLY00109555] [TK6291][EL1D] Update the latest code (AFC)
+ * 	[EL1D RX] sync afc code from EL1S (UMOLY).
+ *
+ * 07 06 2015 yi-ying.lin
+ * [MOLY00123233] [L1D][Modify] Fix the MD3 query API
+ * 	.
+ *
+ * 07 04 2015 my.tu
+ * [MOLY00109555] [TK6291][EL1D] Update the latest code (AFC)
+ * [EL1D RX] cotsx development. Merging from //UMOLY/DEV/TK6291_DEV/mcu/l1core/modem/...1403997
+ *
+ * 06 18 2015 yi-ying.lin
+ * [MOLY00122572] [L1D][Modify] fix build error for multi-afc api to accesss the SHM
+ * 	.
+ *
+ * 06 18 2015 yi-ying.lin
+ * [MOLY00122410] [L1D][Modify] fix multi-afc api
+ * 	.
+ *
+ * 06 16 2015 yi-ying.lin
+ * [MOLY00121452] [L1D][Modify] Add multi-afc update and query share-memory API
+ * 	.
+ *
+ * 10 06 2014 ola.lee
+ * [MOLY00080299] [L1D] Check in 2G Fix AFC for MT6169
+ * 	.
+ *
+ * 04 11 2013 yi-ying.lin
+ * [MOLY00013948] [MT6290 PO admit] Check in AST3002 & protocol code for 6290 MULTI_MODE_TDS project
+ * .
+ *
+ * 03 19 2013 ola.lee
+ * [MOLY00012185] [Fix-AFC] Check-in Fix-AFC related modification(L1D/UL1D/SM) into WR8 & MOLY
+ * .
+ *
+ * 03 11 2013 ij.chang
+ * [MOLY00011276] [UL1D][Modify] Merge Code From WR8.W1248.MD.WG.MP to MOLY for MT6290 SB
+ * .
+ * 
+ * 09 28 2012 ziv.tsai
+ * [MOLY00004274] [L1D][Modify] Multi_Mode AFC control TDD part
+ * .
+ * 
+ * 08 30 2012 ziv.tsai
+ * [MOLY00002838] [Need Patch][Build Error] WR8 build error for MT6583_MD2_TDD128HSPA(DEFAULT)
+ * .Add TDD support for multi-mode afc
+ *
+ * 06 28 2012 ziv.tsai
+ * [MOLY00000052] [MT6280] Some coding improvement for multi-mode afc and cell search
+ * .
+ *
+ * 05 25 2012 ziv.tsai
+ * removed!
+ * .
+ *
+ ****************************************************************************/
+
+#ifndef _L1_AFC_H_
+#define _L1_AFC_H_
+
+
+#include "l1_core_private.h"
+
+#include "l1_types.h"
+#include "kal_general_types.h"
+
+#include "mml1_rf_afc.h"
+
+/* Status update function*/
+extern void      L1_MULTI_AFC_UPDATE_MODE(kal_uint8 sim_num, kal_uint8 rat /*0:2G,1:3G,2:LTE*/, kal_uint8 new_mode);
+extern void      L1_MULTI_AFC_SWITCH_CONTROL_MODE(kal_uint8 sim_num, kal_uint8 rat, kal_uint8 mode );
+
+/* Interface Query function*/
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+extern void      L1_MULTI_AFC_QUERY_PREVIOUS_ACTIVE_RAT(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 *return_rat, kal_int32 *return_Dac );
+extern void      L1_MULTI_AFC_QUERY_ACTIVE_RAT(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 *return_rat, kal_int32 *return_Dac );
+#else
+extern void      L1_MULTI_AFC_QUERY_PREVIOUS_ACTIVE_RAT(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 *return_rat, kal_int16 *return_Dac );
+extern void      L1_MULTI_AFC_QUERY_ACTIVE_RAT(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 *return_rat, kal_int16 *return_Dac );
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+#if IS_MULTI_MODE_AFC_IN_32BITS
+extern void      L1_MULTI_AFC_QUERY_LATEST_UPDATE_RAT(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 *return_rat, kal_int32 *return_dac, kal_uint16 *return_temp, kal_int32 *return_time_diff);
+#else
+extern void      L1_MULTI_AFC_QUERY_LATEST_UPDATE_RAT(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 *return_rat, kal_int16 *return_dac, kal_uint16 *return_temp, kal_int32 *return_time_diff);
+#endif
+extern kal_uint8 L1_MULTI_AFC_QUERY_MODE(kal_uint8 src_sim, kal_uint8 src_ask);
+extern kal_bool  L1_MULTI_AFC_QUERY_OTHER_RAT_DEDICATE(kal_uint8 src_sim, kal_uint8 src_rat);
+extern kal_uint8 L1_MULTI_AFC_QUERY_LATEST_AFC_MODE_OWNER(kal_uint8 src_sim, kal_uint8 src_rat);
+extern kal_uint8 L1_MULTI_AFC_QUERY_MD_LATEST_ACTIVE_RAT(kal_uint8 src_md, kal_uint8 src_sim, kal_uint8 src_rat);
+
+/*---> Interface Query function with GEMINI Integraded*/
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+extern void      L1_MULTI_AFC_QUERY_PREVIOUS_ACTIVE_RAT_GEMINI(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 dest_sim, kal_uint8 *return_rat, kal_int32 *return_Dac );
+#else
+extern void      L1_MULTI_AFC_QUERY_PREVIOUS_ACTIVE_RAT_GEMINI(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 dest_sim, kal_uint8 *return_rat, kal_int16 *return_Dac );
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+extern void      L1_MULTI_AFC_QUERY_ACTIVE_RAT_GEMINI(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 dest_sim, kal_uint8 *return_rat, kal_int16 *return_Dac );
+extern kal_bool  L1_MULTI_AFC_QUERY_OTHER_RAT_DEDICATE_GEMINI(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 dest_sim);
+
+/* Internal Query function*/
+#if IS_MULTI_MODE_AFC_IN_32BITS
+kal_int32 L1_MULTI_AFC_QUERY_DAC(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 dest_sim, kal_uint8 dest_rat);
+#else
+kal_int16 L1_MULTI_AFC_QUERY_DAC(kal_uint8 src_sim, kal_uint8 src_rat, kal_uint8 dest_sim, kal_uint8 dest_rat);
+#endif
+/* SHM update function*/
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+void L1_MULTI_AFC_UPDATE_AFC_IN_SHM(kal_uint8 src_sim, kal_uint8 src_rat, kal_int32 afc_dac, kal_uint16 temper);
+#else
+void L1_MULTI_AFC_UPDATE_AFC_IN_SHM(kal_uint8 src_sim, kal_uint8 src_rat, kal_int16 afc_dac, kal_uint16 temper);
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+/*---------------------------------------*/
+/* API function which shall provided by each rat*/
+
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+extern kal_int32  L1D_AFC_Query_DacValue(kal_uint8 query_sim);
+extern kal_int32 UL1D_AFC_Query_DacValue(kal_uint8 sim_idx);
+extern kal_int32 TL1D_AFC_Query_DacValue(void);
+extern kal_int32 EL1D_AFC_Query_DacValue(kal_uint8 sim_index);
+#else
+extern kal_int16  L1D_AFC_Query_DacValue(kal_uint8 query_sim);
+extern kal_int16 UL1D_AFC_Query_DacValue(kal_uint8 sim_idx);
+extern kal_int16 TL1D_AFC_Query_DacValue(void);
+extern kal_int16 EL1D_AFC_Query_DacValue(kal_uint8 sim_index);
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+
+extern void  L1D_AFC_Set_ControlMode(void);
+extern void UL1D_AFC_Set_ControlMode(kal_uint8 mode);
+//extern void TL1D_AFC_Set_ControlMode(); /* 3G_TD use L1D_AFC_Control_Switch_DM(false) to set control mode */
+extern kal_uint32 EL1D_RxAfc_Multi_Tms_Read_Auxadc_Latest_Temperature(void);
+
+/* API function when Fix AFC enabled */
+typedef enum
+{
+   dac_2_ppb = 0  ,  /* 0 */
+   ppb_2_dac      ,  /* 1 */
+} afc_convert_type;
+
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+extern kal_int32 L1_MULTI_AFC_CONVERT_AFC_DATA(kal_int32 afc_data_ori, kal_uint8 convert_type);
+#else
+extern kal_int16 L1_MULTI_AFC_CONVERT_AFC_DATA(kal_int16 afc_data_ori, kal_uint8 convert_type);
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+extern kal_int32 L1_MULTI_AFC_QUERY_FREQ_TO_DAC_STEP(void);
+extern kal_int32 EL1D_RxAfc_Multi_Tms_Interp_Calc(kal_uint32 tfc_u);
+#if defined ( MT6293 ) || defined (  __MD93__ ) || defined (  __MD97__ )
+extern void EL1D_RxAfc_Multi_Tms_Fac_Scurve_Generation_Proc(kal_uint32 fac_c0, kal_uint32 fac_c1, kal_uint32 fac_c2, kal_uint32 fac_c3);
+#else
+extern void EL1D_RxAfc_Multi_Tms_Fac_Scurve_Generation_Proc(kal_int32 fac_c0, kal_int32 fac_c1, kal_int32 fac_c2, kal_int32 fac_c3);
+#endif
+
+
+#endif
+
diff --git a/mcu/l1/interface/gl1/l1_core.h b/mcu/l1/interface/gl1/l1_core.h
new file mode 100644
index 0000000..687adcf
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_core.h
@@ -0,0 +1,1293 @@
+/*******************************************************************************
+*  Modification Notice:
+*  --------------------------
+*  This software is modified by MediaTek Inc. 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:
+ * ---------
+ *   l1_core.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Layer1 core interface to stack adaptation layer
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ *******************************************************************************/
+
+/******************************************************************************
+ *
+ *  File:            %P%
+ *  -----
+ *
+ *  SCCS Version:    %I%
+ *  -------------
+ *
+ *  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 Communications Consultants Worldwide Limited (C) 2001
+ *
+ *  Project:
+ *  --------
+ *
+ *  Software Unit:  Layer1 core interface to stack adaptation layer.
+ *  --------------
+ *
+ *  Description:
+ *  ------------
+ *
+ *
+ *  Modification History:
+ *  ---------------------
+ *  Date       Vers  Auth  Details
+ *  ----       ----  ----  -------
+ *  28-Mar-01  2.1   VKL   Initial version
+ *  17-Apr-01  2.2   VKL   split report period setting for scan list and power
+ *                         control flag
+ *                         added functions for PTCCh and PBCCh
+ *                         moved protitypes for surround cell engine to and
+ *                         from other files
+ *  27-Apr-01  2.3   VKL   changed prototypes for PTCChStart and PBCChStart
+ *  01-May-01  2.4   VKL   add prototypes for TBF start and stop
+ *  21-May-01  2.5   VKL   added functions to set NBCCh, BCCh and PBCCh
+ *                          priority.
+ *                         added functions for PCh, PAGCh, PRACh, and
+ *                          interference measurements.
+ *                         surround cell power measurements now done in
+ *                          separate module, not in report period any more.
+ *                         change parameters of L1T_CBChStart
+ *  15-Jul-01  2.6   VKL   Added multiband support to power scan
+ *                         Changed mode param to PCh and PPCh handlers
+ *                         Change type of tx power params to PowerControlLevel
+ *                         Moved PTCCh handler to other file
+ *                         PPCh supports extended paging mode now
+ *                         PAGCh now has additional syncTimeSlot parameter
+ *                         Changed interface to set up TBF
+ *                         Added interface for interference measurements
+ *                         Added interface for extended easurements
+ *                         Changed interface for surround cell measurements
+ *                         Added interface for BCCh power measurements
+ *                         Added interface for handling of power level C
+ *                         Added interface for uplink power control
+ *                         Added interface to reset timing advance
+ *                         Added burstLength parameter to L1T_RAChSetParams()
+ *                         and L1T_PRAChSetParams()
+ *  08-Aug-01  2.7   VKL   Added L1T_SetServingBCChARFCN()
+ *                         Added startTimeSlot parameter to L1T_FCChTStart()
+ *                         Changed params to L1T_CSetParams()
+ *
+ *  02-Sep-01  2.8   VKL   Modify CBCh functions, replace L1T_ReportPeriodSetPowerControl()
+ *                         by L1T_ReportPeriodSetParams(), frameOffset and ebitOffset now
+ *                         passed through DChParams instead of being arguments of L1T_DChStart(),
+ *                         ...Handover() and ...Back(), add timing advance parameter to
+ *                         L1T_DChStopHandover(), add L1T_TBFRepeatAllocation(),
+ *                         L1T_TBFSetPowerControl(), L1T_TBFSetTimingAdvance(), remove priority
+ *                         parameter from L1T_ExtendedMeasurementStartDedi(), remove
+ *                         L1T_TimingCorrectionStart() and L1T_TimingCorrectionStop(), remove
+ *                         L1T_PowerControlSetParams() and L1T_PowerControlClearParams(), add mode
+ *                         parameter to L1T_SurroundGetBestSix(), L1T_SurroundUpdateBCCh() gets
+ *                         mask parameter instead of allSysInfos flag, cleanup BSIC vs. TSC usage
+ *  04-Sep-01  2.9   APB   Fix merge errors
+ *  12-Sep-01  2.10  VKL   L1T_PBCChStart() now gets mode, correct spelling of L1T_PPChSetExtenedPaging
+ *                         Add L1T_TBFSetHoppingSequence(), L1T_TBFReleaseTimeSlots(),
+ *                         L1T_SurroundSuspend() and L1T_SurroundResume()
+ *  13-Sep-01  2.11  VKL   Add functions for neighbour PBCCh receive
+ *  26-Sep-01  2.12  VKL   Added L1T_ListPowerScanStart(), L1T_AGChXXX()
+ *                         Added L1I_CBChSkip(), L1T_PollRespXXX()
+ *                         Remove surround and BCCh measurement prototypes
+ *                         Added L1T_SurroundHandleReport()
+ *                         Removed L1T_SurroundReadBCChExt()
+ *  01-Oct-01  2.13  VKL   Remove 'ndrx' parameter from L1T_CSetParams()
+ *  03-Oct-01  2.14  VKL   Add restart parameter to L1T_SurroundSetBAList()
+ *  08-Oct-01  2.15  VKL   Add L1T_GetTimingAdvance()
+ *  09-Oct-01  2.16  VKL   Add parameters to L1T_NPBCChStart() for AGC
+ *  10-Oct-01  2.17  VKL   Add per cell AFC support
+ *  12-Oct-01  2.18  VKL   Add L1T_GetCurrentAfcParams()
+ *  17-Oct-01  2.19  VKL   Add mode parameter to L1T_CBChSetParams()
+ *  26-Oct-01  2.20  VKL   Change surround cell functions to support enhanced
+ *                         measurement reporting.
+ *  05-Nov-01  2.21  VKL   Add startTimeSlot parameter to L1T_SChTStart
+ *  06-Nov-01  2.22  VKL   Add inteface for NC and ext measurements
+ *  08-Nov-01  2.23  VKL   Added L1T_SurroundSetPPCh() and L1T_SurroundSetPCh()
+ *  09-Oct-01  2.24  VKL   Add param to L1T_SChTStart().
+ *                         Add functions to control BCCh receive by SCE in
+ *                          packet transfer mode
+ *  17-Oct-01  2.25  VKL   Add L1T_AGCReset()
+ *                         Remove L1T_CResetCounter()
+ *  21-Nov-01  2.26  VKL   Pass flag 'gprs' to L1T_FCChT()
+ *                         Make PRACh aware of syncTimeSlot
+ *                         Add L1T_GetC()
+ *  04-Dec-01  2.27  VKL   Change CBCh interface for separate norm/ext handling
+ *                         Add startFrameNumber to L1T_TBFSetPowerControl()
+ *
+ *****************************************************************************/
+#ifndef l1_generic_l1_core_h
+#define l1_generic_l1_core_h
+
+#include "l1_types.h"
+
+#include "mph_types.h"
+#include "kal_general_types.h"
+#include "gmss_public.h"
+
+/* --- init ----------------------------------------------------------------- */
+
+void L1T_Init( void );
+void L1T_Exit( void );
+void L1T_SelectFrequencyBand1900( bool selected );
+
+/* --- report dispatch ------------------------------------------------------ */
+
+void L1T_DispatchReports( void );
+
+/* --- callbacks called from within the core -------------------------------- */
+/* --- implemented elsewhere ------------------------------------------------ */
+
+void L1A_DispatchReport( Report* report );
+void L1I_WakeTask( void );
+void L1T_internal_wake_up_task( void );
+#if !(IS_DUAL_CORE_GL1AC_MODEM_SUPPORT)
+void L1I_HandleL2Uplink( void );
+#endif
+
+bool L1I_CheckSendMessage( l1c_sim_mode_enum );
+void L1I_SetHisrRunning(bool);
+
+#ifdef __GL1_GEMINI__
+void L1A_DispatchReport_2( Report* report );
+#endif
+#if (GEMINI_PLUS_GSM >= 3)
+void L1A_DispatchReport_3( Report* report );
+#endif
+#if (GEMINI_PLUS_GSM >= 4)
+void L1A_DispatchReport_4( Report* report );
+#endif
+
+#if defined(__GL1_MULTI_MODE__) && defined(__GL1_GEMINI__)
+FCChPriority L1A_GetFCChPriority( uint8 sim_idx );
+#endif
+
+/* --- resetting the AGC when everything is lost ---------------------------- */
+
+/* L1A should call this when entering scan mode */
+void L1T_AGCReset( void );
+
+/* --- changing serving cell ------------------------------------------------ */
+
+void       L1T_SetServingBCChARFCN( ARFCN arfcn );
+void       L1T_SetServingBCChBSIC( BSIC bsic );
+AfcParams* L1T_GetCurrentAfcParams( void );
+AfcParams* L1T_GetManualAfcParams( void );
+AfcParams* L1I_AFCGetParams( uint8 simIndex );
+void L1I_BackupCurrentAfcParams( AfcParams* CurrentAfcParams );
+#ifdef __GL1_MULTI_MODE__
+AfcParams* L1I_AFCGetStandbyParams( uint8 simIndex );
+#endif
+
+/* --- synchronisation ------------------------------------------------------ */
+
+void L1T_SetSync( int32 frameOffset, intx ebitOffset );
+#ifdef __GL1_GEMINI__
+void L1T_ModifySetSync( ARFCN arfcn, BSIC bsic, int32* frameOffset, intx* ebitOffset );
+void L1T_SetSIMStatus(bool is_SIM1);
+bool L1I_GetSIMStatus(l1c_sim_mode_enum);
+void L1T_SetSIMConfigBitmap(uint8 bitmap);
+#endif
+/* --- power scan ----------------------------------------------------------- */
+
+void L1T_PowerScanStart( intx bands, PowerScanResults* results );
+void L1T_ListPowerScanStart( intx arfcnCount, ARFCN* arfcns, PowerScanResults* results, kal_bool isCGIPowerScan );
+void L1T_PowerScanStop( void );
+void L1I_PowerScanStop( void );
+
+#ifdef __GL1_GEMINI__
+void L1T_PowerScanSetInitData( 
+                                     int8 sampleNo, 
+                                     VirtualPowerScanState virtual_powerscan_state
+#ifdef __GL1_GEMINI_WCDMA__
+                                    ,PowerScanPurpose purpose
+#endif /* __GL1_GEMINI_WCDMA__ */
+#ifdef __GL1_QUICK_MCC_SEARCH__
+                                    ,bool is_quick_mcc_search
+#endif 
+);
+
+#ifdef __GEMINI__
+void L1T_PowerScanSetParam( uint32 scanPeriod, uint32 scanLength );
+#endif
+
+#ifdef  __GL1_GEMINI__
+void L1T_ReceiveVirtualSuspendCnf(void);
+#endif
+//PowerScanParamStruct* L1T_PowerScanGetParamBuffer(void);
+#endif
+#if defined(__GL1_GEMINI__) && defined(__GL1_MULTI_MODE__)
+void L1T_PowerScanRestart(void);
+bool L1T_Check_IfNeed_PowerScanRestart(void);
+bool L1T_Check_IfNeed_PowerScanRestart_VNull(void);
+void L1T_ResetPowerScanRestartedCount(kal_bool is_reset);
+#endif
+
+
+/* --- FCCh ----------------------------------------------------------------- */
+#ifdef __LTE_RAT__ 
+void L1T_FCChStartWithOffset( ARFCN arfcn, bool isSrvccTimingValid, int32 frameOffset, intx ebitOffset, bool frequencyCorrect, AfcParams* afc, bool newcell, bool manual );
+#endif
+void L1T_FCChStart( ARFCN arfcn, bool frequencyCorrect, AfcParams* afc, bool newcell, bool manual );
+void L1T_FCChStop( void );
+#ifdef __GL1_GEMINI__
+void L1T_FCChSetPriority( FCChPriority priority );
+void L1T_FCChPriorityRestart( ARFCN arfcn, bool frequencyCorrect, AfcParams* afc, bool newcell, bool manual );
+#endif
+#if defined( __GEMINI__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+void L1T_FCChSetInitData( uint16 interval );
+/*TBD: L1C maintains two-element arrays; one for mode, and another for SIM*/
+#endif /* defined( __GEMINI__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )*/
+
+/* --- SCh ------------------------------------------------------------------ */
+
+void L1T_SChStart( ARFCN arfcn, int32 frameOffset, intx ebitOffset, AfcParams* afc, bool manual );
+void L1T_SChStop( void );
+#ifdef __GL1_GEMINI__
+void L1T_SChSetPriority( SChPriority priority );
+#endif
+
+/* --- Serving SCh -------------------------------------------------------------- */
+#ifdef __ADDITIONAL_SERVING_SB_TRACKING__
+void L1T_ServingSChStart( void );
+#endif
+
+/* --- neighbour cell BCCh -------------------------------------------------- */
+
+void L1T_NBCChStart( ARFCN arfcn, BSIC bsic, int32 frameOffset, intx ebitOffset, intx mask, AfcParams* afc, bool adjacent );
+void L1T_NBCChSetPriority( NBCChPriority priority );
+void L1T_NBCChStop( void );
+bool L1T_NBCChSCStop( void );
+void L1T_NBCChReportStop( void );
+
+#ifdef __GL1_GEMINI__
+void L1T_NBCChSetPriorityIndex( uint16 priority_index);
+#endif
+
+
+/* --- BCCh ----------------------------------------------------------------- */
+
+void L1T_BCChStart( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, intx mask );
+void L1T_BCChSetMask( intx mask );
+void L1T_BCChSetPriority( bool high );
+void L1T_BCChStop( void );
+
+/* --- PCh ------------------------------------------------------------------ */
+
+void L1T_PChSetParams( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, bool combinedCCCh, bool extendedPaging, intx pagingIndex, intx pagingMultiFrame, intx pagingPeriod, intx agchBlocksReserved, bool gprs, bool nom3withPPCh );
+void L1T_PChSetExtendedPaging( bool extendedPaging );
+void L1T_PChStart( void );
+void L1T_PChStop( void );
+void L1T_PChSetSCIdleMode( bool active );
+#if defined (__MONITOR_PAGE_DURING_TRANSFER__) || defined(__GL1_GEMINI__)
+void L1T_PChSetPriority( bool high );
+void L1T_QueryNextPChFN(uintx* NextPChFN);
+bool L1I_QueryPChStatus(l1c_sim_mode_enum);
+#endif /* __MONITOR_PAGE_DURING_TRANSFER__ || __GEMINI__ */
+
+#ifdef __SMART_PAGING_IN_IDLE__
+void L1T_SetSmartPaging(bool);
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void L1T_SetMSIdentity(kal_bool is_imsi_present, l1_imsi_struct imsi, kal_bool is_tmsi_present, kal_uint8* tmsi, kal_bool is_ptmsi_present, kal_uint8* ptmsi );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+#endif /*__SMART_PAGING_IN_IDLE__*/
+
+/* --- AGCh ----------------------------------------------------------------- */
+
+void L1T_AGChStart( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, bool combinedCCCh );
+void L1T_AGChStop( void );
+
+/* --- CBCh ----------------------------------------------------------------- */
+
+#ifdef __L1_CB__
+void L1T_CBChSetParams( HoppingSequence* hs, TSC tsc, bool combinedCCCh, TimeSlot timeSlot, TimeSlot syncTimeSlot );
+void L1T_CBChStart( bool ext );
+void L1T_CBChStop( bool ext );
+void L1T_CBChSkip( bool ext, intx blocks );
+void L1T_CBChSetPriority( bool top );
+#endif
+/* ------------ tx power limit for DCH and RACH ------------------------------*/
+void       L1T_SetMaxTxPower(Power power);
+Power      L1T_GetMaxTxPower( void );
+
+/* --- RACh ----------------------------------------------------------------- */
+
+void        L1T_RAChSetParams( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, bool combinedCCCh, PowerControlLevel txPower, intx burstLength, TSC tsc );
+FrameNumber L1T_RAChStart( FrameNumber startFrameNumber, RAChData rachData );
+void        L1T_RAChStop( void );
+
+/* --- report period -------------------------------------------------------- */
+
+void L1T_ReportPeriodSetParams( bool powerControl, bool dtxAllowed );
+void L1T_DChULDTX( bool dtxAllowed );
+
+/* --- hopping sequence management ------------------------------------------ */
+
+HoppingSequence* L1T_AllocHoppingSequence( void );
+
+/* --- DCh ------------------------------------------------------------------ */
+
+DChParams* L1T_DChGetParamsBuffer( void );
+void       L1T_DChStart( FrameNumber startFrameNumber );
+
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT   
+void       L1T_DChHandover( FrameNumber startFrameNumber,kal_uint8* SABMData );
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+void       L1T_DChHandover( FrameNumber startFrameNumber );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+
+#ifdef __GL1_MULTI_MODE__
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT 
+void       L1T_InterRATDChStart( FrameNumber startFrameNumber ,kal_uint8* SABMData );
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+void       L1T_InterRATDChStart( FrameNumber startFrameNumber );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+void       L1I_InterRATDChEnterStandby( void );
+#endif /* __GL1_MULTI_MODE__ */
+
+void       L1T_DChBack( FrameNumber startFrameNumber );
+void       L1T_DChRestart( FrameNumber startFrameNumber, FrameNumber frameOffset, intx ebitOffset );
+void       L1T_DChStop( bool isHandover );
+#if defined(__GL1_MULTI_MODE__) || defined(__BLIND_HANDOVER__)
+void       L1T_DChStopPendingHS(void);
+#endif
+void       L1T_DChSetHoppingSequence( HoppingSequence* hs, FrameNumber startFrameNumber );
+void       L1T_DChSetCiphering( bool enable, int8 algorithm, uint8 key[ ] );
+void       L1T_AsyncHandoverStart(void);
+void       L1T_AsyncHandoverEnd(void);
+#if defined(__AMR_SUPPORT__) || defined(__AMRWB_LINK_SUPPORT__)
+void       L1T_DChSetChannelMode( TChMode channelMode,  TChAMRConfig *amrConfig );
+#else
+void       L1T_DChSetChannelMode( TChMode channelMode );
+#endif
+void       L1T_DChStopHandover( TimingAdvance timingAdvance );
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+kal_uint8  L1T_DChSetLoopMode( LoopMode mode );
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+void       L1T_DChSetLoopMode( LoopMode mode );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+
+TimingAdvance L1T_GetTimingAdvance( void );
+
+#ifdef __BLIND_HANDOVER__ 
+
+void L1T_SetBlindHOPhase(BlindHO_Phase new_phase);
+
+#endif /* end of __BLIND_HANDOVER__ */
+
+void L1T_AFC_Update_Resume_Mode(kal_uint8 new_mode);
+
+
+
+/* --- FCChT ---------------------------------------------------------------- */
+
+void L1T_FCChTStart( ARFCN arfcn, TimeSlot syncTimeSlot, TimeSlot startTimeSlot, bool gprs, AfcParams* afc, bool newcell , intx sacchPosition, bool manual);
+void L1T_FCChTStop( void );
+
+/* --- SChT ----------------------------------------------------------------- */
+
+void L1T_SChTStart( ARFCN arfcn, int32 frameOffset, intx ebitOffset, TimeSlot syncTimeSlot, TimeSlot startTimeSlot, bool gprs, AfcParams* afc , intx sacchPosition, bool manual);
+void L1T_SChTStop( void );
+
+
+/* --- PBCCh ---------------------------------------------------------------- */
+
+void L1T_PBCChSetParams( HoppingSequence* hs, TSC tsc, TimeSlot timeSlot, TimeSlot syncTimeSlot, intx pbcchBlocks, intx psiRepeatPeriod, intx psiCountHR, PBCChMode mode, bool decodeUSF );
+void L1T_PBCChSetPriority( PBCChPriority high );
+void L1T_PBCChStart( void );
+void L1T_PBCChStop( void );
+
+/* --- neighbour cell PBCCh ------------------------------------------------- */
+
+void L1T_NPBCChStart( HoppingSequence* hs, ARFCN bcchARFCN, intx pb, TSC tsc, FrameNumber frameOffset, intx ebitOffset, TimeSlot timeSlot, intx pbcchBlocks, intx psiRepeatPeriod, PBCChMode mode );
+void L1T_NPBCChSetPriority( bool high );
+void L1T_NPBCChStop( void );
+
+/* --- PPCh ----------------------------------------------------------------- */
+
+void L1T_PPChSetParams( HoppingSequence* hs, TSC tsc, TimeSlot timeSlot, TimeSlot syncTimeSlot, bool extendedPaging, intx nonPagingBlocks, intx splitPagingCycle, uint32 imsi, intx kc );
+void L1T_PPChSetExtendedPaging( bool extendedPaging );
+void L1T_PPChStart( void );
+void L1T_PPChStop( void );
+
+/* --- PAGCh ---------------------------------------------------------------- */
+
+void L1T_PAGChStart( HoppingSequence* hs, TSC tsc, TimeSlot syncTimeSlot, TimeSlot timeSlot );
+void L1T_PAGChStop( void );
+
+/* --- PRACh ---------------------------------------------------------------- */
+
+void L1T_PRAChSetParams( HoppingSequence* hoppingSequence, BSIC bsic, TimeSlot timeSlot, TimeSlot syncTimeSlot, intx burstLength, TSC tsc );
+void L1T_PRAChStart( intx skip, RAChData rachData, bool isFirst );
+void L1T_PRAChStop( void );
+
+/* --- Polling response in pakcet idle mode --------------------------------- */
+
+void L1T_PollRespABStart( FrameNumber startFrameNumber, HoppingSequence* hoppingSequence, BSIC bsic, TimeSlot timeSlot, PowerControl* powerControl, intx burstLength, RAChData rachData );
+void L1T_PollRespNBStart( FrameNumber startFrameNumber, HoppingSequence* hoppingSequence, TSC tsc, TimeSlot timeSlot, TimingAdvance timingAdvance, PowerControl* powerControl, BlockData blockData[23] );
+void L1T_PollRespStop( void );
+
+/* --- Single uplink block without TBF -------------------------------------- */
+
+void L1T_SingleULWithoutTBFStart( FrameNumber startFrameNumber, HoppingSequence* hoppingSequence, TSC tsc, TimeSlot timeSlot, TimingAdvance timingAdvance, PowerControl* powerControl, BlockData blockData[23] );
+void L1T_SingleULWithoutTBFStop( void );
+
+/* --- Single downlink block receiving -------------------------------------- */
+
+void L1T_SingleDLStart( FrameNumber startFrameNumber, HoppingSequence* hs, TSC tsc, TimeSlot timeSlot);
+void L1T_SingleDLStop( void );
+
+/* --- Single/multi uplink block allocation in two phase access ------------------- */
+
+void L1T_SingleULTwoPhaseStart( FrameNumber startFrameNumber, HoppingSequence* hs, TSC tsc, TimeSlot timeSlot, TimingAdvance timingAdvance, PowerControl* powerControl, BTSPowerControl* btsPowerControl, BlockData blockData[23], BlockData blockData2[23], SingleBlockType singleBlkType );
+void L1T_SingleULTwoPhaseStop( void );
+
+/* --- PDTCh ---------------------------------------------------------------- */
+
+TBFParams* L1T_TBFGetParamsBuffer( void );
+void       L1T_TBFStart( TBFParams* p );
+
+#ifdef __NEW_TBF_ARCH__
+void       L1T_TBFStop( uint8 dl, uint8 ul, uint8 stopTid );
+#else
+void       L1T_TBFStop( bool dl, bool ul, uint8 stopTid );
+#endif
+
+#ifdef __NEW_TBF_ARCH__
+#ifndef __REMOVE_FA__
+void       L1T_TBFRepeatAllocation( bool repeat, TimeSlotMask timeSlotOverrideMask, FrameNumber startFrameNumber );
+#endif
+#else
+void       L1T_TBFRepeatAllocation( bool repeat, TimeSlotMask timeSlotOverrideMask, FrameNumber startFrameNumber );
+#endif
+
+void       L1T_TBFSetPowerControl( PowerControl* powerControl, FrameNumber startFrameNumber );
+void       L1T_TBFSetTimingAdvance( PacketTimingAdvance* ta );
+void       L1T_TBFSetTAValue( TimingAdvance timingAdvance );
+void       L1T_TBFSetHoppingSequence( HoppingSequence* hs, FrameNumber startFrameNumber );
+void       L1T_TBFReleaseTimeSlots( TimeSlotMask timeSlotsKept, bool bothActivePending );
+#ifdef __EGPRS_MODE__
+void       L1T_EgprsSetLoopMode( bool isOn, uint8 modeFlag );
+#ifdef __NEW_TBF_ARCH__
+void       L1T_EgprsResetIR( uint8 isResetIR );
+#else
+void       L1T_EgprsResetIR( bool isResetIR );
+#endif
+#endif /*__EGPRS_MODE__*/
+
+/* --- extended power measurements ------------------------------------------ */
+
+void L1T_ExtendedMeasurementStartDedi( ScanList* list );
+void L1T_ExtendedMeasurementStopDedi( void );
+
+#ifdef __PKT_EXT_MEAS__
+void L1T_ExtendedMeasurementStartPacketIdle( ScanList* list );
+void L1T_ExtendedMeasurementStopPacketIdle( void );
+#endif
+/* --- interference measurements -------------------------------------------- */
+
+void L1T_InterferenceStart( ARFCN servingBCChARFCN, HoppingSequence* hoppingSequence, TimeSlot syncTimeSlot, bool contiguous, uint8 assign_ref );
+void L1T_InterferenceStop( void );
+
+/* --- calculating receive power level C ------------------------------------ */
+
+void L1T_CSetParams( Power pb, intx tavgw, intx tavgt, bool measurePDTCh );
+void L1T_CSetPb( Power pb );
+intx L1T_GetC( void );
+
+/* --- GPRS transmit power control ------------------------------------------ */
+
+void L1T_PowerControlSetMaximumOutputPower( Power pmax );
+void L1T_PowerControlSetParams( uint8 alpha );
+
+/* --- surround cell handling ----------------------------------------------- */
+
+bool         L1T_SurroundHandleReport( Report* report );
+
+void         L1T_SurroundSetMode( SurroundMode mode );
+void         L1T_SurroundSuspend( void );
+void         L1T_SurroundResume( void );
+
+void         L1T_SurroundSetServingCell( ARFCN arfcn, BSIC bsic );
+#ifdef __GL1_GEMINI__
+void         L1T_SurroundGetServingCell( ARFCN *arfcn, BSIC *bsic, l1c_sim_mode_enum sim_idx );
+void         L1T_SetVirtualMode( bool IsVirtual, l1c_sim_mode_enum local_sim_mode );
+bool         L1T_QueryIsVirtualMode( l1c_sim_mode_enum local_sim_mode );
+bool         L1I_QueryIsVirtualMode( l1c_sim_mode_enum local_sim_mode );
+#endif
+void         L1T_SurroundSetBAList( SurroundBAList* BAList );
+void         L1T_SurroundSetSync( int32 frameDecrease, intx qbit_decrease );
+void         L1T_SurroundSetTimeSlot( TimeSlot timeSlot );
+bool         L1T_SurroundGetTimeSlotDiff( void );
+
+#ifdef __GL1_MULTI_MODE__
+kal_bool        L1T_SurroundCheckBsicQueueEmpty( l1c_sim_mode_enum local_sim_mode, bool isManual );
+kal_bool        L1T_SurroundCheckIfUnknownBsicInQueue( l1c_sim_mode_enum local_sim_mode, kal_bool isManual );
+#endif
+
+/*  Set serving BSIC for AGPS check ----- */
+#if ( defined( __L1_GPS_AUTO_TIMING_SYNC_SUPPORT__  ) || defined( __L1_GPS_REF_TIME_SUPPORT__  ) )
+void         L1T_SurroundSetServingCellBsic( BSIC bsic );
+#endif
+
+void         L1T_SurroundSetPChIdle( intx pagingPeriod );  /* needed in idle mode with SI13 only */
+void         L1T_SurroundSetPCh( intx pagingPeriod );      /* needed in packet idle mode only */
+void         L1T_SurroundSetPPCh( intx splitPagingCycle ); /* needed in packet idle mode only */
+
+void         L1T_SurroundBSICReq( const SCBsicInfo* sc );
+void         L1T_SurroundBCChReq( const SCBcchInfo* sc );
+void         L1T_SurroundBSICStop( const SCBsicStopInfo* sc );
+void         L1T_SurroundBCChStop( const SCBcchStopInfo* sc );
+void         L1T_SurroundBCChPriorAcquireReq( ARFCN arfcn, bool is_prior_to_acquire );
+#ifdef __PKT_EXT_MEAS__
+void         L1T_SurroundBSICExtReq( const SCBsicInfo* sc );
+void         L1T_SurroundBSICExtStop( const SCBsicStopInfo* sc );
+#endif
+void         L1T_SurroundChangeCell( void );
+
+void         L1T_SurroundClearManualList( void ); /* for BlindHO from l1t_surround_private.h*/
+
+/* network controlled measurements */
+
+void         L1T_SurroundSetNCMeasParams( SuroundNCMeasParams* params );
+void         L1T_SurroundStartNCMeas( void );
+void         L1T_SurroundStopNCMeas( void );
+void         L1T_SurroundUpdateNCMeas( bool isPTMtoPIM );
+bool         L1T_IsNcActive( void );
+/* extended measurements */
+#ifdef __PKT_EXT_MEAS__
+void         L1T_SurroundSetExtMeasParams( SuroundExtMeasParams* params );
+void         L1T_SurroundStartExtMeas( void );
+void         L1T_SurroundStopExtMeas( void );
+#endif
+/* -------------------------------------------------------------------------- */
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+void        L1T_SetRATStop(void);
+#endif
+/* -------------------------------------------------------------------------- */
+
+void L1T_PutUplinkSACCh( BlockData* data );
+void L1T_PutUplinkCCh( BlockData* data );
+
+/* -------------------------------------------------------------------------- */
+
+FrameNumber L1T_GetFN( void );
+void L1T_GetTime( Time* time );
+void L1T_GetTime_after_SleepMode_Recovery( Time* time );
+#ifdef __GL1_GEMINI__
+void L1T_GetTime_SIMx( Time* time,l1c_sim_mode_enum local_sim_mode);
+#endif
+/* -------------------------------------------------------------------------- */
+
+void L1T_GetBatteryMeasurementSetting( SBATMEASARG *meas_args );
+void L1T_SetBatteryVoltage( int volt );
+void L1T_SetBatteryTemperature( int temp );
+void L1T_SetRFTemperature( int temp );
+void L1T_SIM_Notify( uint8 status );
+uint8 L1T_IS_GetRFTemperatureFromADC( void );
+uint8 L1T_IS_GetBatteryInfoFromADC( void );
+
+/* --- PS Handover ----------------------------------------------------------- */
+#ifdef __PS_SERVICE__
+TimingAdvance L1T_GetPacketTimingAdvance (void);
+#endif
+
+/* --- L1 AGPS ----------------------------------------------------------- */
+#if ( defined( __L1_GPS_AUTO_TIMING_SYNC_SUPPORT__  ) || defined( __L1_GPS_REF_TIME_SUPPORT__  ) )
+void L1T_GpsTimeSyncReq( ARFCN arfcn, BSIC bsic, l1_agps_frame_sync_app_E type, kal_bool maintain_phase );
+#endif
+
+#ifdef __GL1_MULTI_MODE__ 
+void L1T_MMGetAutoGAP( Time starting_time );
+void L1T_MMPutAutoGAP( void );
+#endif
+
+/* free HS */
+#ifdef __L1_CB__
+void L1T_FreeHsCBCh( void );
+#endif
+
+void L1T_FreeHsDCh( void );
+
+#ifdef __PS_SERVICE__
+void L1T_FreeHsPDTCh( void );
+void L1T_FreeHsSingleULTwoPhase( void );
+void L1T_FreeHsPTCCh( void );
+void L1T_FreeHsIM( void );
+void L1T_FreeHsPollResp( void );
+
+void L1T_FreeHsSingleDL( void );
+void L1T_FreeHsSingleULWithoutTBF( void );
+#endif
+
+void L1T_FreeHoppingSequence( SurroundMode newmode );
+/* free HS */
+
+/* --- Channel Protection (GEMINI2.0)------------------------------------- */
+#ifdef __GL1_GEMINI__
+void L1T_ChannelProtection(ProtectionParamStruct* param);
+#endif /*__GEMINI__*/
+
+/* Rick 20121119: Switch VAMOS1/2 load by editting NVRAM
+   vamos_level 0x00 means non-VAMOS
+   vamos_level 0x01 means VAMOS1
+   vamos_level 0x02 means VAMOS2 */
+void L1T_UpdateVAMOSLevel(uint8 vamos_level);
+
+/* CCCI callback function for thermal issue */
+#ifdef __MTK_TARGET__
+void L1_CrystalThermalChangeNotify( kal_uint32 ap_param);
+#endif /* __MTK_TARGET__ */
+
+/* for ReportCGI scan/bsic/bcch */
+#ifdef __GL1_MULTI_MODE__
+void L1T_CGIPowerScanStart( intx arfcnCount, ARFCN* arfcns, PowerScanResults* results, kal_bool use_auto_gap  );
+void L1T_CGIPowerScanStop( kal_bool use_auto_gap );
+void L1T_InitPowerScanCGIData( void );
+intx L1I_IsCGIPowerScanStarted( void );
+intx L1I_CGIPowerScanStop( void );  
+
+void L1I_ScheduleSRVCCBSIC( void );
+void L1T_StopSRVCCBSICSchedule( void );
+void L1T_CGIBSICStart( ARFCN arfcn, TID tid, kal_bool is_SRVCC );
+void L1T_CGIBSICStop( void );
+intx L1I_IsCGIBSICStarted( void );
+intx L1I_CGIBSICStop( void );
+void L1T_InitFCChCGIData( void );
+void L1T_SetFCChCGIPriority( bool reset );
+
+
+void L1T_CGIBCCHStart( ARFCN arfcn, BSIC bsic, uint16 bcchMask, FrameNumber frameoffset, intx ebitOffset );
+void L1T_CGIBCCHStop( void );
+intx L1I_IsCGIBCChStarted( void );
+intx L1I_CGIBCCHStop( void );
+void L1T_InitNBCChCGIData( void );
+#endif /* __GL1_MULTI_MODE__ */
+
+/* after l1c move to normal domain, ct1 can use this api to queue func to sisr */
+void L1I_h_QFUNC_TO_SISR( GL1C_SISRQ_FUNC_TYPE type,  ... );
+
+#endif
diff --git a/mcu/l1/interface/gl1/l1_core_private.h b/mcu/l1/interface/gl1/l1_core_private.h
new file mode 100644
index 0000000..64703a8
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_core_private.h
@@ -0,0 +1,3483 @@
+/*******************************************************************************
+*  Modification Notice:
+*  --------------------------
+*  This software is modified by MediaTek Inc. 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:
+ * ---------
+ *   l1_core_private.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Layer1 core private stuff
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ *******************************************************************************/
+
+/******************************************************************************
+ *
+ *  File:            %P%
+ *  -----
+ *
+ *  SCCS Version:    %I%
+ *  -------------
+ *
+ *  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 Communications Consultants Worldwide Limited (C) 2001
+ *
+ *  Project:
+ *  --------
+ *
+ *  Software Unit:  Layer1 core private stuff.
+ *  --------------
+ *
+ *  Description:
+ *  ------------
+ *
+ *
+ *  Modification History:
+ *  ---------------------
+ *  Date       Vers  Auth  Details
+ *  ----       ----  ----  -------
+ *  28-Mar-01  2.1   VKL   Initial version
+ *  17-Apr-01  2.2   VKL   added new init functions
+ *                         split L1I_StopReportPeriods() into two alternative
+ *                         functions
+ *                         added new delay calculation functions
+ *                         removed most prototypes for surround cell engine
+ *                         added ring buffer macros
+ *  27-Apr-01  2.3   VKL   Added transmit power control manager and removed
+ *                         transmit power handling from report periods
+ *                         Changed handling of received SACCh to feed transmit
+ *                         power control manager.
+ *                         Moved ring buffer handling from
+ *                         generic/l1_core_private.h to generic/l1_tool.h
+ *  01-May-01  2.4   VKL   Add prototypes for L1T_InitTBFData() and
+ *                         L1T_InitEXTData()
+ *                         Add new timer mask TIMER_MASK_SUSPEND_PDTCH
+ *                         add prototypes for PDTCh functions
+ *  21-May-01  2.5   VKL   added new init functions.
+ *                         changed definitions of timer priorities.
+ *                         added comments
+ *                         added L1I_UpdatePRAChUSF
+ *                         added power measurement manager
+ *                         surround cell power measurements now done in
+ *                         separate module, not in report period any more.
+ *  15-Jul-01  2.6   VKL   Added new init functions
+ *                         StopTimer returns value now
+ *                         Added L1I_DelayTimerEBits()
+ *                         Replaced monitoring functions to properly handle
+ *                         half rate and data.
+ *                         Added L1I_GetTimingAdvance()
+ *                         Removed monResult parameter from AllocRxReport()
+ *                         Moved in PTCCh functions from other header file
+ *                         Add fields to Chan struct for handling SID frames.
+ *                         Added some tool functions
+ *                         Added functions for handling of power level C
+ *                         Added functions for uplink power control
+ *                         Added various interconnection functions
+ *                         Removed obsolete prototypes
+ *                         Added MAC functions
+ *  08-Aug-01  2.7   VKL   Added L1T_GetServingBCChARFCN()
+ *                         Added powerControl flag to L1I_StartReportPeriods()
+ *                         Added powerControl flag to L1I_AllocRxReport()
+ *                         Removed obsolete fields from structure Channel
+ *                         Added L1I_DChReportingPeriodBegin()
+ *                         Added timeSlot parameter to L1I_PowerControlSetC()
+ *                         Added txPower parameter to L1I_MACBlockTick()
+ *  02-Sep-01  2.8   VKL   Introduce separate timer priorities for receive & transmit
+ *                         remove RESERVERMASK_R, add RESERVERMASK_RTM4, add time stamp
+ *                         functions, change Timer from singly linked to doubly linked list
+ *                         remove return value from L1I_StopTimer(), add L1I_FindTimerDelay()
+ *                         add dtxAllowed parameter to L1I_StartReportPeriods(),
+ *                         add L1T_AllocReport(), change L1T_ResetTiming() to L1I_ResetTiming()
+ *                         add sacchPosition field to Channel structure, change PTCCh functions
+ *                         add parameters to L1I_PDTChStart() and L1I_PDTChStop()
+ *                         remove L1I_DChPowerControlGetUsedPower(), add dtxAllowed parameter
+ *                         to L1I_DChReportingPeriodBegin(), add L1I_SetReportedPower() and
+ *                         L1I_SetReportedTimingAdvance(), add L1I_PowerControlSetParams()
+ *                         and L1I_PowerControlClearParams(), move BCCh and surround cell
+ *                         power measurement prototypes from l1_core.h to this file.
+ *                         change MAC function prototypes,remove Frame data structure,
+ *                         remove frame reservation macros and unused reservation masks
+ *                         add L1I_ClearReservation() and L1I_AbortReserveExtendAbortable()
+ *                         remove obsolete parameter from L1I_AbortReserveExtendMasked()
+ *                         remove L1I_GetFN51(), split handling of monitoring and reporting
+ *                         change function prefixes for some functions from L1T_ to L1I_
+ *  12-Sep-01 2.9   VKL    Add funtions for hopping sequence memory management,
+ *                         add L1I_MACReleaseTimeSlots()
+ *  13-Sep-01 2.10  VKL    Add RESERVEMASK_RTM4 again
+ *  26-Sep-01 2.11  VKL    Added new prototypes.
+ *                         Added tsc parameter to L1I_PTCChSetParams()
+ *                         Removed pagingPeriod from L1T_SurroundMeasurementStartIdle()
+ *                         Added lastInPeriod parameter to
+ *                          L1I_SurroundMeasurementPacketPagingBlock() and
+ *                          L1I_ExtenededMeasurementPacketPagingBlock()
+ *                         Added syncTmieSlot parameter to L1I_MACBlockTick()
+ *  01-Oct-01  2.12  VKL   Add new parameter to L1I_UpdateCFromPPCh()
+ *  09-Oct-01  2.13  VKL   Add new AGC prototypes
+ *  09-Oct-01  2.14  VKL   Add new AGC init functions
+ *  10-Oct-01  2.15  VKL   Add per cell AFC support
+ *  12-Oct-01  2.16  VKL   Add L1_PrepareSChData()
+ *                         Split L1I_MACBlockTick() into rx and tx block tick
+ *  12-Oct-01  2.17  SY    Add timertype structure
+ *  26-Oct-01  2.18  VKL   Removed lastInPeriod from L1I_SurroundMeasurementPagingBlock()
+ *  05-Nov-01  2.19  VKL   Add TimerPPChNorm and TimerPPChExt and TimerTBF
+ *  07-Nov-01  2.20  VKL   Use one value for C instead of one per timeslot
+ *  08-Nov-01  2.21  VKL   Additional param to L1I_ClearReservation()
+ *  09-Nov-01  2.22  VKL   Add return value to L1T_SurroundMeasurementStartDedi()
+ *                         and L1T_SurroundMeasurementStartPacketTransfer()
+ *  11-Nov-01  2.23  VKL   Change params of L1T_SurroundMeasurementStartPacketIdle()
+ *                   SY    Add syncTimeSlot to L1I_PDTChStart()
+ *  08-Nov-01  2.24  SY    Add complete timertype for GPRS
+ *  17-Nov-01  2.25  VKL   Add L1T_GetServingBCChARFCN()
+ *                         Change params to L1I_PDTChStart()
+ *                         Modify AGC interface
+ *  21-Nov-01  2.26  VKL   Add parameter 'slot' to L1I_UpdateCFromPPCh()
+ *                         Add L1I_CResetCounter()
+ *  28-Nov-01  2.27  SY    Move TimeStamp to l1_type.h
+ *  04-Dec-01  2.27  VKL   Add arfcn to L1I_AllocRxReport()
+ *                         Add L1I_AllocMultislotRxReport()
+ *                         L1I_PDTChStop() now always fully stops PDTCh and
+ *                          add L1I_PDTChRestart() instead.
+ *                         Add L1T_CalcBlockPower()
+ *                         Change monitoring interface
+ *
+ *****************************************************************************/
+#ifndef l1_generic_l1_core_private_h
+#define l1_generic_l1_core_private_h
+#include "l1_private.h"
+
+#include "kal_public_api.h"
+#include "kal_hrt_api.h"
+#include "l1_const.h"
+#include "l1_types.h"
+#include "kal_general_types.h"
+#include "mph_types.h"
+#include "l1_public.h"
+#include "event_info_utility.h" // for MODEM_WARNING_MESSAGE
+#ifdef __MTK_TARGET__
+#include "dcxo_div.h" // for 32KHz-less
+#endif
+#include "mmrf_cc_public.h" // for MMRF query func
+#if TRACING_SUPPORT
+#ifdef __GL1_GEMINI__
+#include "tool.h"
+#endif
+#endif
+#ifdef __GL1_MULTI_MODE__
+#include "l1sm_modem_public.h"
+#define MAX_3G_GAP_FRAME MAX_SLEEP_FRAMES
+#endif
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+#include "l1_rtb.h"
+#endif
+
+#if defined(__MTK_TARGET__) && !defined(__L1_STANDALONE__)
+#if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+#include "em_l1_public_struct.h"
+#include "em_struct.h"
+#include "em_l4_public_struct.h"
+#include "em_gas_public_struct.h"
+#endif /* IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 ) */
+#endif
+
+#if defined(__MTK_TARGET__) && !defined(__L1_STANDALONE__)
+#define GL1_EM_IDLE_MODE_INFO_SUPPORT    1
+#else
+#define GL1_EM_IDLE_MODE_INFO_SUPPORT    0
+#endif
+
+
+/* --- assert functions -----------------------------------------------------*/
+/* [MAUI_02899879] for SLIM projects, ASSERT will be defined as NULL. 
+   So if the assertion is quite important, please use L1C_EXT_ASSERT_Reboot.*/
+#define L1C_ASSERT_Bypass( st )                          (void)0
+#define L1C_ASSERT_Bypass_Trace( st )                    if(!(st))   MODEM_WARNING_MESSAGE( 0, "[L1C]" )
+#define L1C_ASSERT_Reboot( st )                          if(!(st))   ASSERT( 0 )
+#define L1C_EXT_ASSERT_Bypass( st, d1, d2, d3 )          (void)0
+#define L1C_EXT_ASSERT_Bypass_Trace( st, d1, d2, d3 )    if(!(st))   MODEM_WARNING_MESSAGE( 0, "[L1C] var1:%d, var2:%d, var3:%d", d1, d2, d3 )
+#define L1C_EXT_ASSERT_Reboot( st, d1, d2, d3 )          if(!(st))   EXT_ASSERT( 0, d1, d2, d3 )
+
+#ifdef __MTK_INTERNAL__
+   #undef L1C_ASSERT_Bypass
+   #undef L1C_ASSERT_Reboot   
+   #undef L1C_EXT_ASSERT_Bypass
+   #define L1C_ASSERT_Bypass( st )                    if(!(st))   EXT_ASSERT( 0, 0, 0, 0 )
+   #define L1C_ASSERT_Reboot( st )                    if(!(st))   EXT_ASSERT( 0, 0, 0, 0 )   
+   #define L1C_EXT_ASSERT_Bypass( st, d1, d2, d3 )    if(!(st))   EXT_ASSERT( 0, d1, d2, d3 )
+#endif
+
+#ifdef L1_SIM
+   #undef  L1C_ASSERT_Bypass_Trace
+   #undef  L1C_EXT_ASSERT_Bypass_Trace
+   #define L1C_ASSERT_Bypass_Trace( st )                   if(!(st))   ASSERT( 0 )
+   #define L1C_EXT_ASSERT_Bypass_Trace( st, d1, d2, d3 )   if(!(st))   EXT_ASSERT( 0, d1, d2, d3 )
+#endif
+
+/* --- init functions -------------------------------------------------------*/
+#ifdef __ADDITIONAL_SERVING_SB_TRACKING__
+void L1T_InitServingSChData( void );
+#endif
+void L1T_InitFramerData( void );
+void L1T_InitUplinkData( void );
+void L1T_InitPowerScanData( void );
+void L1T_InitFCChData( void );
+void L1T_InitSChData( void );
+void L1T_InitNBCChData( void );
+void L1T_InitBCChData( void );
+void L1T_InitPChData( void );
+void L1T_InitAGChData( void );
+#ifdef __L1_CB__
+void L1T_InitCBChData( void );
+#endif
+void L1T_InitMonitoringData( void );
+void L1T_InitReportPeriodData( void );
+void L1T_InitTimingData( void );
+void L1T_InitRAChData( void );
+void L1T_InitDChData( void );
+void L1T_InitSDCChData( void );
+void L1T_InitTChData( void );
+void L1T_InitFCChTData( void );
+void L1T_InitSChTData( void );
+void L1T_InitRATSCChData( void );
+void L1T_InitPBCChData( void );
+void L1T_InitPPChData( void );
+void L1T_InitPTCChData( void );
+void L1T_InitPDTChData( void );
+void L1T_InitTBFData( void );
+void L1T_InitTxPowerControlData( void );
+void L1T_InitTimingAdvanceData( void );
+void L1T_InitNCOData( void );
+void L1T_InitEXTData( void );
+void L1T_InitInterferenceData( void );
+void L1T_InitPAGChData( void );
+void L1T_InitPRAChData( void );
+void L1T_InitDChPowerControlData( void );
+void L1T_InitMeasurementDataIdle( void );
+void L1T_InitMeasurementDataDedi( void );
+void L1T_InitMeasurementDataPacketIdle( void );
+void L1T_InitMeasurementDataPacketTransfer( void );
+void L1T_InitMeasurementsData( void );
+void L1T_InitMACData( void );
+void L1T_InitPollRespData( void );
+void L1T_InitSingleDLData( void );
+void L1T_InitSingleULTwoPhaseData( void );
+void L1T_InitSingleULWithoutTBFData( void );
+void L1T_InitNCReport( void );
+void L1T_Reset( void );
+void L1T_ResetIdleRxChannel( void );
+void L1T_StopAllChannel( void );
+#ifdef __2G_TX_VOLTAGE_COMPENSATION_SUPPORT__
+void L1T_InitTxComp( void );
+#endif
+#ifdef __MTK_TARGET__
+void L1T_InitCrystalThermalChangeNotify( void );
+#endif /* __MTK_TARGET__ */
+#ifdef __GL1_GEMINI__
+void L1T_Suspend( void );
+#endif
+#if defined ( __GL1_GEMINI__ ) && defined ( __UMTS_RAT__ )
+void L1T_ActiveSIMx( void );
+void L1T_DeactivateSIMx( void );
+#endif
+
+#if ( defined( __L1_GPS_AUTO_TIMING_SYNC_SUPPORT__  ) || defined( __L1_GPS_REF_TIME_SUPPORT__  ) )
+void L1T_InitAGpsData( void );
+#endif
+/* --- stop functions --------------------------------------------------------*/
+void L1I_PPChStop( void );
+void L1I_PAGChStop( void );
+void L1I_SingleULTwoPhaseStop( void );
+
+/* --- frame interupt global data ------------------------------------------- */
+
+void L1I_FrameTick(void);
+
+/* --- timer masks for finding timers --------------------------------------- */
+
+/* --- priorities of timers --- */
+#ifdef __GL1_GEMINI__
+#define TIMER_PRIORITY_GEMINI 0x1000
+#endif
+#if (GEMINI_PLUS_GSM >= 3)
+#define TIMER_PRIORITY_SIM3   0x2000
+#endif
+#if (GEMINI_PLUS_GSM >= 4)
+#define TIMER_PRIORITY_SIM4   0x4000
+#endif
+
+#define TIMER_SIM_MASK        0x7000 /*bit[14:12]*/
+#define TIMER_PRIORITY_MASK   0x00FF /*bit[7:0]*/
+
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+//#define TIMER_PRIORITY_DM 0x10000 /*bit[16]*/   
+void GL1_AssertFunction( RTB_ASSERT_CAUSE cause, RTB_SIM_INDEX SIM_Index, uint32 para1, uint32 para2 );
+/* The resolution of FRC on MOLY is micro second. */
+#define GL1_FRAME          ( 4615 )
+#define GL1_FRAME2RTB( x ) ( (x)*GL1_FRAME )
+#define GL1_EBIT2RTB( x )  ( ((x)*6)/13 )
+#define RTB2GL1_EBIT( x )  ( ((x)*13)/6 )
+
+#endif               
+
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+/* L1D confirm frequency correction will be finished within 91 frames for worst case.
+   We add some margin for this value. */
+#define FREQUENCYCORRECTION MAX_FBCORRECTION_SEARCH_TIME 
+#else
+#define FREQUENCYCORRECTION 32767
+#endif
+
+#define FIND_SELF_PRIORITY_OFFSET 1
+#define TIMER_PRIORITY_0    0
+#define TIMER_PRIORITY_2    2
+#define TIMER_PRIORITY_3    3
+#define TIMER_PRIORITY_4    4
+#define TIMER_PRIORITY_5    5
+#define TIMER_PRIORITY_6    6
+#define TIMER_PRIORITY_7    7
+#define TIMER_PRIORITY_8    8
+#define TIMER_PRIORITY_9    9
+#define TIMER_PRIORITY_10  10
+#define TIMER_PRIORITY_20  20
+#define TIMER_PRIORITY_30  30
+#define TIMER_PRIORITY_40  40
+#define TIMER_PRIORITY_42  42
+#define TIMER_PRIORITY_45  45
+#define TIMER_PRIORITY_50  50
+#define TIMER_PRIORITY_55  55
+
+/* synchronous receive only */
+#define TIMER_RX_MASK          0x0100 /* bit[8] */
+#define TIMER_PRIORITY_RX_10 ( TIMER_PRIORITY_10 | TIMER_RX_MASK )
+#define TIMER_PRIORITY_RX_20 ( TIMER_PRIORITY_20 | TIMER_RX_MASK )
+#define TIMER_PRIORITY_RX_30 ( TIMER_PRIORITY_30 | TIMER_RX_MASK )
+#define TIMER_PRIORITY_RX_40 ( TIMER_PRIORITY_40 | TIMER_RX_MASK )
+#define TIMER_PRIORITY_RX_50 ( TIMER_PRIORITY_50 | TIMER_RX_MASK )
+
+/* synchronous transmit only */
+#define TIMER_TX_MASK          0x0200 /* bit[9] */
+#define TIMER_PRIORITY_TX_10 ( TIMER_PRIORITY_10 | TIMER_TX_MASK )
+#define TIMER_PRIORITY_TX_20 ( TIMER_PRIORITY_20 | TIMER_TX_MASK )
+#define TIMER_PRIORITY_TX_30 ( TIMER_PRIORITY_30 | TIMER_TX_MASK )
+#define TIMER_PRIORITY_TX_40 ( TIMER_PRIORITY_40 | TIMER_TX_MASK )
+
+/* synchronous receive+transmit or asynchronous */
+#define TIMER_TX_RX_MASK       ( TIMER_RX_MASK | TIMER_TX_MASK ) /* bit[9:8] */
+#define TIMER_PRIORITY_TX_RX_0  ( TIMER_PRIORITY_0 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_2  ( TIMER_PRIORITY_2 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_3  ( TIMER_PRIORITY_3 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_4  ( TIMER_PRIORITY_4 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_5  ( TIMER_PRIORITY_5 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_6  ( TIMER_PRIORITY_6 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_7  ( TIMER_PRIORITY_7 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_8  ( TIMER_PRIORITY_8 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_9  ( TIMER_PRIORITY_9 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_10 ( TIMER_PRIORITY_10 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_20 ( TIMER_PRIORITY_20 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_30 ( TIMER_PRIORITY_30 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_40 ( TIMER_PRIORITY_40 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_42 ( TIMER_PRIORITY_42 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_45 ( TIMER_PRIORITY_45 | TIMER_TX_RX_MASK )
+#define TIMER_PRIORITY_TX_RX_55 ( TIMER_PRIORITY_55 | TIMER_TX_RX_MASK )
+
+#define TIMER_TX_RX_PRIORITY_MASK ( TIMER_TX_RX_MASK | TIMER_PRIORITY_MASK ) /* bit[9:0] */
+/* --- finding timers by priority --- */
+
+/* special flag used by PDTCh timer to signal timeslot 0 is not available for BSIC */
+#define TIMER_FLAG_TIMESLOT0_6_MASK 0xC0000 /* bit[18:19] */
+#define TIMER_FLAG_NOBSIC_TIMESLOT0 0x80000 /* bit[19]. marks timers using timeslot 0 */
+#define TIMER_FLAG_BSIC_TIMESLOT6   0x40000 /* bit[18]. marks BSIC timers needing timeslot 6 */
+
+#ifdef __GL1_GEMINI_WCDMA__
+#define TIMER_FLAG_RAISE_PRIORITY_IN_RTB 0x100000 /* bit[20] is used to raise the timer priority in RTB but has the same priority in GL1C. */
+#endif
+
+#ifdef __GL1_GEMINI__
+//#define TIMER_FLAG_FINDNOTIMER      0x20000 /* bit[17]. marks if Pch timer is TOP and find no timer*/
+#endif
+
+/* --- reservation of frames ------------------------------------------------ */
+
+/*
+   Reservation masks are used to determine which slots of the following frames are used.
+   A reservation mask contains 6 bits for each frame and therefore its possible to reserve
+   up to 5 frames using a reservation mask (plus the first timeslots of another frame).
+
+   The bits correspond to the frames as follows:
+
+   31     24    18    12    6     0
+   |      |     |     |     |     |
+   55444444333333222222111111000000
+
+   For each frame, each bit reserves one or two timeslots.
+   The bits in each frame correspond to the timeslots like this:
+
+   bit 0: timeslot 0
+   bit 1: timeslots 1 and 2
+   bit 2: timeslot 3
+   bit 3: timeslots 4 and 5
+   bit 4: timeslot 6
+   bit 5: timeslot 7
+
+   Receives or transmits do need some time to setup the hardware (e.g.PLL).
+   This has to be accounted for in the reservation mask. The convention here is to
+   reserve the next timeslot to lock out others from using it.
+
+   Example: Receive in timeslot 2
+
+   Timeslot | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+   Receive         --XXX
+
+   The mask used is 0x06 because
+   receive in timeslot 2 -> bit 1 = 0x02
+   next timeslot         -> bit 2 = 0x04
+
+   This mask would excludes a transmit in timeslot 3 (mask 0x0C) because
+   combining both masks with the bitwise OR operator yields a non null result.
+
+   Operations not related to the serving cell must always reserve complete frames
+   (timeslots 0 to 6). These operation change the synchronisation of the mobile
+   and therefore render the whole frame unusable for other operations.
+*/
+
+#define RESERVE_TS0 0x01
+#define RESERVE_TS1 0x02
+#define RESERVE_TS2 0x02
+#define RESERVE_TS3 0x04
+#define RESERVE_TS4 0x08
+#define RESERVE_TS5 0x08
+#define RESERVE_TS6 0x10
+#define RESERVE_TS7 0x20
+
+#define RESERVE_FRAME 0x03F
+
+#define MAKERESERVEMASK(f0,f1,f2,f3) (((f3)<<18)|((f2)<<12)|((f1)<<6)|(f0))
+
+/*
+   Convenient masks for standard receive and transmit
+   The following #defines for the masks already reserve the next timeslot.
+*/
+
+/* reserve the transmit slot for one frame (RACh and PRACh) */
+#define RESERVEMASK_R (RESERVE_TS0|RESERVE_TS1)
+
+/* reserve the transmit slot for one frame (RACh and PRACh) */
+#define RESERVEMASK_T (RESERVE_TS3|RESERVE_TS4)
+
+/* reserve the receive and transmits slots for one frame (SACChT) */
+#define RESERVEMASK_RT (RESERVEMASK_R|RESERVEMASK_T)
+
+/* reserve the receive slot for four frames (BCCh, PCh, AGCh, SDCChDown, SACChCDown, PBCCh, PPCh, PAGCh) */
+#define RESERVEMASK_R4 MAKERESERVEMASK(RESERVEMASK_R,RESERVEMASK_R,RESERVEMASK_R,RESERVEMASK_R)
+
+/* reserve the transmit slot for four frames (SDCChUp, SACChCUp) */
+#define RESERVEMASK_T4 MAKERESERVEMASK(RESERVEMASK_T,RESERVEMASK_T,RESERVEMASK_T,RESERVEMASK_T)
+
+/* reserve the receive and transmit slots for four frames (TCh) */
+#define RESERVEMASK_RT4 MAKERESERVEMASK(RESERVEMASK_RT,RESERVEMASK_RT,RESERVEMASK_RT,RESERVEMASK_RT)
+
+/* reserve four frames completely (NPBCCh) */
+#define RESERVEMASK_RTM4 MAKERESERVEMASK(RESERVE_FRAME,RESERVE_FRAME,RESERVE_FRAME,RESERVE_FRAME)
+
+#ifdef __ADDITIONAL_SERVING_SB_TRACKING__
+#define TACMINIMUM (-116)
+#endif
+#define TAC_MAXIMUM 128 // The maximum timing error of SB is 16 bits.
+
+/* reserve the receive and transmit slots for four frames (TCh), except the shifted SACCHT frame */
+#define RESERVEMASK_RT4_SHIFTED_TCH_EVEN (((RESERVEMASK_RT)<<24)|((RESERVEMASK_RT)<<18)|((RESERVEMASK_RT)<<12)|(RESERVEMASK_RT))  
+#define RESERVEMASK_RT4_SHIFTED_TCH_ODD  (((RESERVEMASK_RT)<<24)|((RESERVEMASK_RT)<<12)|((RESERVEMASK_RT)<< 6)|(RESERVEMASK_RT))  
+#define RESERVEMASK_RT4_SHIFTED_TCH ( IS_ODD(currentDCh->sacchPosition)? RESERVEMASK_RT4_SHIFTED_TCH_ODD : RESERVEMASK_RT4_SHIFTED_TCH_EVEN )
+
+#ifdef __GL1_GEMINI__
+#define PRIORITY_INDEX_LOWEST 65535 //maximum value for uint16, larger priority_index means lower priority
+#endif /* __GL1_GEMINI__ */
+#if TRACING_SUPPORT
+#ifdef __GL1_GEMINI__
+#ifdef L1_SIM
+unsigned char  L1I_PrintFN( TraceHeader* h, char** buf );
+unsigned char L1I_PrintFNModN( TraceHeader* h, char** buf, intx n );
+unsigned char L1I_PrintTC( TraceHeader* h, char** buf );
+unsigned char L1I_PrintTC52( TraceHeader* h, char** buf );
+#else
+bool L1I_PrintFN( TraceHeader* h, char** buf );
+bool L1I_PrintFNModN( TraceHeader* h, char** buf, intx n );
+bool L1I_PrintTC( TraceHeader* h, char** buf );
+bool L1I_PrintTC52( TraceHeader* h, char** buf );
+#endif
+#endif
+#endif
+
+/* Power scan related*/
+#if defined(__GL1_GEMINI__) && defined(__GL1_MULTI_MODE__)
+VirtualPowerScanState L1I_QueryVirtualPowerScanState( void );
+//void L1I_VirtualPowerScanRestart(void);
+#endif
+
+#ifdef __GL1_MULTI_MODE__  //#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+void L1I_BackupL1DSuspendPMFlag( bool SuspendPM );
+bool L1I_GetL1DSuspendPMFlag( void );
+#endif
+
+#ifdef __GL1_MULTI_MODE__  //#if defined(__GL1_GEMINI__) && defined(__GL1_MULTI_MODE__)
+void L1I_L1D_SuspendPM( bool SuspendL1DPM );
+#endif
+
+//#if defined(__GL1_MULTI_MODE__) && defined (__GL1_GEMINI__)
+//void L1I_AbortFB( intx reserveFrames, intx frameExtendEBits );
+//#endif
+
+void L1I_UpdateBasebandTime_In_IRATSync( void );
+bool L1I_AbortReserveExtendMasked( int32 mask, intx frameExtendEBits );
+extern l1c_sim_mode_enum L1I_L1D_SIM_mode(void);
+bool L1I_AbortReserveExtend( intx reserveFrames, intx frameExtendEBits );
+void L1I_UpdateTimingParam(intx reserveFrames);
+
+bool L1I_AbortReserveExtendAbortable( intx reserveFrames, intx frameExtendEBits, void ( *abort )( intx busyFrames, intx busyEBits ) );
+intx L1I_GetReservedFrames_2G( void );
+#ifdef  __GL1_MULTI_MODE__  
+intx L1I_GetReservedFrames_All( void );
+void L1I_GapReserveExtend( intx reserveFrames, intx frameExtendEBits );
+#endif /* __GL1_MULTI_MODE__  */
+void L1I_ClearReservation( void ( *abort )( intx, intx ) );
+void L1I_ClearReservationMasked( int32 mask );
+
+bool L1I_AbortReserveExtend_DM( intx reserveFrames, intx frameExtendEBits, bool *reserved );
+
+#if defined (__GL1_GEMINI__) && defined(__WEIGHTING_ROUND_ROBIN__)
+bool L1I_QueryHwExecute(void);
+void L1I_SetHwExecute(bool);
+#endif
+
+/* --- synchronisation ------------------------------------------------------ */
+
+void L1I_SetSyncFromTimer( int32 frameOffset, intx ebitOffset );
+void L1I_ExtendFrame( intx ebits );
+/* For MT6268 2G/3G or 2G Single project: Change method to call Dual/Single OS Tick I/F in L1I_ExtendFrame() */
+#ifdef __NEW_OS_TICK__
+extern void RTOS_TickFromGsm( uint16 FN_delay, kal_bool need_compensate );
+#endif
+
+/* --- serving cell ARFCN --------------------------------------------------- */
+
+void L1I_SetServingBCChARFCN( ARFCN arfcn, bool interRATHO );
+ARFCN L1I_GetServingBCChARFCN( l1c_sim_mode_enum);
+ARFCN L1T_GetServingBCChARFCN( void );
+#if ( defined( __L1_GPS_AUTO_TIMING_SYNC_SUPPORT__  ) || defined( __L1_GPS_REF_TIME_SUPPORT__  ) )
+void L1I_SetServingBCChBSIC( BSIC bsic );
+#endif
+BSIC L1I_GetServingBCChBSIC( l1c_sim_mode_enum );
+#ifdef __GL1_GEMINI__
+bool L1I_CheckServingBCChARFCN(uint8* mask);
+bool L1I_CheckSameServingARFCN( Report* report, uint8* mask );
+#endif
+
+bool L1I_Query_SetSyncBCChInNullMode(l1c_sim_mode_enum local_sim_mode);
+
+#if defined ( __GL1_MULTI_MODE__ ) && defined ( __GL1_GEMINI__ ) 
+void L1I_SetServingARFCNforStandby( void );
+void L1I_ResetTimingerrorforStandby( void );
+#endif
+/* --- time inquiry --------------------------------------------------------- */
+#define L1T_BlockFramer() L1T_BLOCKFRAMER(__LINE__)
+void        L1T_BLOCKFRAMER( int32 line_no );
+void        L1T_UnblockFramer( void );
+
+#ifdef __ADDITIONAL_SERVING_SB_TRACKING__
+void L1_ServingSChStop(void);
+void L1T_ServingSChStop(void);
+void L1I_ServingSChStop( l1c_sim_mode_enum local_sim_mode );
+void L1I_ServingSChThermalReschedule ( l1c_sim_mode_enum local_sim_mode );
+#endif
+
+FrameNumber L1I_GetFN( l1c_sim_mode_enum local_sim_mode);
+FrameNumber L1I_GetFNByTimeSlot( TimeSlot timeSlot );
+FrameNumber L1I_GetNextFN( TimeSlot timeSlot, intx* syncEBits );
+void        L1I_GetTime( Time* time, l1c_sim_mode_enum);
+#ifdef __GL1_GEMINI_WCDMA__
+void L1I_GetTimeOffset( Time* time, l1c_sim_mode_enum local_sim_mode);
+#endif /* __GL1_GEMINI_WCDMA__ */
+FrameNumber L1I_GetNextNeighbourFN( int32 frameOffset, intx ebitOffset, intx* syncEBits );
+#if defined (__GL1_GEMINI__) && defined(__BSIC_SEARCH_IN_PEER_IDLE_FRAME__)
+FrameNumber L1I_GetNextFN_Peer( TimeSlot timeSlot, intx* syncEBits, l1c_sim_mode_enum local_sim_mode);
+l1c_sim_mode_enum L1I_GetMainSIM(void);
+#endif /*__GL1_GEMINI__ && __BSIC_SEARCH_IN_PEER_IDLE_FRAME__*/
+#ifdef __GL1_MULTI_MODE__
+Time L1I_GetNeighbourTime( Time servTime, int32 frameOffset, intx ebitOffset );
+#endif
+
+/* For Dual Mode Chips, 2G L1 use "internal" GetTimeStamp, while other module use USC API. */
+TimeStamp L1I_InternalGetTimeStamp( void );
+/* Only used for TST module trace trigger inside 2G L1 */
+TimeStamp L1I_GetTimeStamp( void );
+intx      L1I_GetFramesSince( TimeStamp timeStamp );
+
+/* --- timers --------------------------------------------------------------- */
+
+#define L1_TIMER_TYPE(x) x
+typedef enum
+{
+   #include "l1_timertype.h"
+}TimerType;
+#undef L1_TIMER_TYPE
+
+//#ifndef L1_SIM
+#if defined ( __MTK_TARGET__ ) && !defined ( GEN_FOR_PC )
+// This causes custom build error of ul1sim_preproc.c in l1 sim environment.
+typedef struct TimerNode TimerNode;
+#endif  /* defined ( __MTK_TARGET__ ) && !defined ( GEN_FOR_PC ) */
+typedef struct Timer Timer;
+
+struct Timer
+{
+   Timer*    next;
+   Timer*    prev;
+   void   ( *code )( Timer* );
+   int32     ebitDelay;
+   intx      searchMask;     /* used by L1I_FindTimer() */
+   TimerType type;
+   bool      started;
+   bool      insertInFront;  /* if true, timer is inserted before timers with same time */
+#ifdef __GL1_GEMINI__
+   bool      unadjustedTimer; 
+   uint8     shareBitmap;   /* for PCH/BCCH sharing. Record the report need to send to which SIM */
+#ifdef __WEIGHTING_ROUND_ROBIN__
+   bool fgRoundboin;
+#endif
+   uint8      rdrbn_index;    /* internal priority, default = 0 */
+//   uint8      top_priority_level; /* internal priority, default = 0 */
+   uint16     priority_index; /* internal priority */  // Fiona 07/11/04
+#ifdef __GL1_MULTI_MODE__ 
+   bool       timerRTB;   /* True: the timer shall insert to RTB */
+#endif
+   TimerType	   sharing; 	/* for PCH/BCCH sharing. */
+   int32 timingError; /* for unadjusted timing error */
+#endif /*__GL1_GEMINI__*/
+};
+
+#define L1C_NUM_TX_POWER_LEVELS 5
+
+typedef struct
+{
+   kal_uint32 tx_mode_time_ebit[L1C_NUM_TX_POWER_LEVELS];
+   kal_uint32 rx_mode_time_ebit;   
+   Time getRXinfoTime;
+   bool ignoreRxtime;
+   
+
+}txrx_active_info_struct;
+
+extern txrx_active_info_struct   gl1_txrx_active_info;
+#define txrx_active_info gl1_txrx_active_info
+
+extern l1c_sim_mode_enum l1t_sim_mode;
+extern l1c_sim_mode_enum l1i_sim_mode;
+#define l1c_sim_mode (kal_if_lisr()? l1i_sim_mode:l1t_sim_mode)
+
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+/* Bit 0: SIM1 2G, Bit 1: SIM1 FDD 3G, Bit 2: SIM1 TDD 3G, Bit 3: SIM1 4G, Bit 4:C2K 1xRTT, Bit 5: C2K EVDO , Bit 6: 5G */
+#define IS_OTHER_RAT_ACTIVE( status )  ( status & 0xFFFEEEE ) 
+#endif   /* defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) */
+#define IS_HIGHER_2G_TIMER_EXIST( timer ) ( timer != NULL && timer != (Timer*)-1 )
+
+/* Rick: Cast L1C_MM_SIM_NUM to l1c_sim_mode_enum to fix build warning. 
+Remember that L1C_MM_SIM_NUM will never be larger than L1C_SIM_NUM */
+#define IS_MM_SIM_MODE ( l1c_sim_mode < (l1c_sim_mode_enum)L1C_MM_SIM_NUM )
+
+#ifdef __GL1_GEMINI__ // Fiona 07/10/31
+#define RST_WT    (0)
+#define BASE_SIM_IDX  (15)
+
+/*Round robin type enumeration*/
+typedef enum
+{
+   RDRBN_RXHIGH,
+   RDRBN_RXMID,
+   RDRBN_MID,
+   RDRBN_TOP,
+   RDRBN_LOW,
+   RDRBN_NUM
+} rdrbn_type_enum;
+
+/*Report sharing type enumeration*/
+typedef enum
+{
+   RP_SHARING_INIT,
+   RP_SHARING_PCHNORM = RP_SHARING_INIT,
+   RP_SHARING_PCHEXT,
+   RP_SHARING_BCCNORM,
+   RP_SHARING_BCCEXT,
+   RP_SHARING_NUM
+} report_sharing_type_enum;
+
+/*Roound robin node*/
+typedef struct RdrbnNode RdrbnNode;
+struct RdrbnNode
+{
+   RdrbnNode*            next;
+   RdrbnNode*            prev;
+   l1c_sim_mode_enum  sim_idx;
+#ifdef __WEIGHTING_ROUND_ROBIN__
+   intx               weighting;	
+#endif
+};
+
+/*Round robin data*/
+typedef struct 
+{
+	Timer *currentTimer;
+	TimerType reserved;
+   l1c_sim_mode_enum reservedisSIMx;
+	TimerType highestConflict;
+   RdrbnNode rdrbn_base[RDRBN_NUM];
+   RdrbnNode rdrbn_heap[RDRBN_NUM][L1C_SIM_NUM];
+   /*@param To determine the last sharing timer (ReportSharingCnt=0 => The LAST) */
+   intx  ReportSharingCnt[RP_SHARING_NUM];
+   /*@param If one of the sharing timers executes, set true. Otherwise, set false. */
+   bool   alignedTimerExecute[RP_SHARING_NUM]; 
+} geminiTimers;
+
+#endif /* __GL1_GEMINI__*/
+
+
+typedef  enum
+{
+   WAKEUP_L1_TASK =0,          /* for normal l1 task wakeup */
+   RESUME_SW_WAKEUP,           /* for non-blocking sw wakeup */
+   PCORE_UPLINK_DATA           /* for p-core uplink data :[MOLY00215713]Integrate L1HISR and PCORE_HISR */
+} L1_HISR_OP_CODE;
+
+extern void L1I_ActivateHISR(L1_HISR_OP_CODE);
+
+/* ------------- timer handling ------------------------------- */
+
+#ifdef __GL1_GEMINI__
+void    L1I_InitRoundRobinData( void);
+#endif
+
+#if defined(SM_WAKEUP_COMPENSATION) || defined(IS_2G_TAS_SUPPORT)
+bool L1I_Query_SCMode_Is_Idle(l1c_sim_mode_enum local_sim_mode);
+#endif 
+
+#ifdef __ADDITIONAL_SERVING_SB_TRACKING__
+bool L1I_IsTimerServingSBStarted(l1c_sim_mode_enum mode);
+void L1I_ServingSChPeekStart( void );
+bool L1I_IsLowPriorityTimerServingSBThermalStarted(l1c_sim_mode_enum mode);
+bool L1I_IsLowPriorityTimerServingSBStarted(l1c_sim_mode_enum mode);
+void L1I_ServingSChAdditionalStart( void );   
+void L1I_ServingSChThermalStart( int32 delayPeriod ); //delay period shall be the multiple of 51 frames
+void L1I_AdjustFrame(Report* report );
+#endif
+
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+extern void L1_ExtendFrame( kal_uint32 ExtendQuantity );
+extern void L1I_Increase2GTime( Time* time );
+extern void L1I_Set2GTime( Time* time );
+extern void L1I_Print2G_FRC( void ); 
+extern kal_uint32 L1I_2GFRCConversion( kal_int32 ChannelDelay );
+#endif /* defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) */
+
+void L1I_InsertForwards( Timer* prev, Timer* timer, int32 ebitDelay );
+void L1I_InsertBackwards( Timer* next, Timer* timer, int32 ebitDelay );
+void L1I_Remove( Timer* timer );
+int32   L1I_FindTimerEBitsAbsolute( intx searchMask, int32 ebitDelayEnd );
+bool    L1I_FindTimerTypeEBits( TimerType timerType, int32 ebitDelayEnd, int32 *absoluteDelay );
+bool    L1I_FindTimerTypeEBitsSkip( TimerType timerType, int32 skipDelay, int32 ebitDelayEnd, int32 *absoluteDelay );
+Timer*  L1I_FindTimerType_ReturnAddress( TimerType timerType, intx frameDelayEnd, intx ebitDelayEnd );
+void    L1I_StartTimer( Timer* timer, intx frameDelay, intx ebitDelay );
+void    L1I_StartTimerEBits( Timer* timer, int32 ebitDelay );
+void    L1I_StartTimerWithinFrame( Timer* timer, int32 ebitDelay );
+/* unused yet
+void    L1I_StartTimerRelativeEBits( Timer* reference, Timer* timer, int32 ebitDelay ); */
+void    L1I_StopTimer( Timer* timer );
+void    L1I_DelayTimerEBits( Timer* timer, int32 ebitDelay );
+
+Timer*  L1I_GetNextTimer( void );
+Timer*  L1I_FindTimer( intx searchMask, intx frameDelayEnd, intx ebitDelayEnd );
+int32   L1I_FindTimerAbsolute( intx searchMask, intx frameDelayEnd, intx ebitDelayEnd );
+Timer*  L1I_FindTimerEBits( intx searchMask, int32 ebitDelayEnd, int32 *absoluteDelay, bool OnlyFindSpecificPriority, bool Only2G );
+Timer*  L1I_FindOnlySpecificPriorityTimer( intx searchMask, intx frameDelayEnd, intx ebitDelayEnd );
+int32   L1I_FindTimerDelay( intx searchMask, int32 ebitDelayEnd );
+bool    L1I_FindTimerType( TimerType timerType, intx frameDelayEnd, intx ebitDelayEnd );
+Timer*  L1I_FindSelfTimerType( TimerType timerType, intx frameDelayEnd, intx ebitDelayEnd);
+Timer*  L1I_FindSelfTimerTypeEBits( TimerType timerType, int32 ebitDelayEnd, int32 *absoluteDelay );
+void    L1I_AdvanceTimersEBits( int32 ebitDelay );
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void    L1I_CallTimers( void );
+#else
+void    L1I_CallTimers( bool beenpostphoned );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+l1c_sim_mode_enum L1I_GetSimModeFromTimer(Timer* timer);
+void L1I_AdjustReserveMask(int32 burstCount);
+void L1I_SetTimerMask(Timer *timer, intx searchMask);
+#ifdef __GL1_GEMINI__ //mtk01431 Dual SIM
+void L1I_SetTimerMask_SimMode( Timer *timer, intx searchMask, l1c_sim_mode_enum local_sim_mode );
+void L1I_SetTimerGeminiMask(Timer *timer);
+void L1I_SetTimerGeminiMask_SimMode(Timer *timer, l1c_sim_mode_enum local_sim_mode );
+void L1I_SwitchRoundRobin(void);
+void L1I_DelayTimer_Gemini( int32 ebitDelay, uint8 mask );
+void L1I_GeminiInsertForwards( Timer* prev, Timer* timer, int32 ebitDelay );
+void L1I_GeminiDelayTimerEBits( Timer* timer, int32 ebitDelay );
+void L1I_AdjustTimingError(Timer* timer, Report* report ); 
+l1c_sim_mode_enum L1I_QueryAbortSimMode(void);
+void L1I_ResetReportSharing(Timer *timer);
+void L1I_SetReportAligned(Timer *timer, Report *report, TID (*L1I_GetTid)(l1c_sim_mode_enum) );
+void L1I_SetSharingReportAligned(Timer *timer, Report *report, TID (*L1I_GetTid)(l1c_sim_mode_enum) );
+void L1I_SetPChSharingTid(l1c_sim_mode_enum local_sim_mode);
+void L1I_SetBCChSharingTid(l1c_sim_mode_enum local_sim_mode);
+bool L1I_IsShareConflictReport(Timer *timer);
+void L1I_StopReportSharingCnt(Timer* timer);
+bool L1I_TimerIsProtected(Timer *timer);
+extern intx L1I_GetReservedFrames_Gemini(void);
+extern int32 L1I_GetReservationMask(void);
+extern TimerType L1I_GetGeminiReserved(void);
+extern ConflictType L1I_GetConflictType_RTB( RTBConflictType conflictType );
+extern TimerType L1I_GetGeminiHighestConflict(void);
+extern ConflictType L1I_GetConflictType_Gemini( TimerType );
+extern void L1I_PrintConflictType_Gemini( TimerType type, ConflictType c, l1c_sim_mode_enum);
+#endif /*__GL1_GEMINI__*/
+#if defined( __GEMINI__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+uint32 L1I_FindNextSelfTimer( l1c_mm_sim_mode_enum local_sim_mode );
+#endif
+/* --- sending function pointers to interrupt ------------------------------- */
+
+void L1I_QueueFunction( void ( *code )( void ) );
+void L1I_QueueFunction_SimMode( void ( *code )( void ), l1c_sim_mode_enum);
+
+/* --- monitoring ----------------------------------------------------------- */
+
+void    L1I_MonitoringStart( void );
+void    L1I_MonitoringStop( void );
+void    L1I_MonitoringBeginNewPeriod( void );
+Report* L1I_MonitoringLockReport( void );
+void    L1I_MonitoringUnlockReport( Report* report );
+
+void L1I_ReportIsMonitored( Report* report );
+void L1I_ReportIsNoLongerMonitored( Report* report );
+
+#define MON_NO_DTX         TCH_NODTXD    /* if not set, power and quality go to FULL always */
+#define MON_QUAL           TCH_BLOCK     /* if set, quality is monitored */
+#define MON_QUAL_SUB       TCH_QSUB      /* if set and TCH_NODTXD is set,
+                                            quality for normal blocks goes to SUB */
+#define MON_QUAL_FACCH_SUB TCH_QFACCHSUB /* if set and TCH_NODTXD is set,
+                                            quality for FACCh blocks goes to SUB */
+
+/* For Rel 99 - enhanced mesaurement */
+#define  MON_CV_BEP        0x100    /* if set, goes to CV_BEP */
+#define  MON_NBR_BLOCKS 0x200    /* if set, goes to NBR_RCVD_BLOCKS */
+#define  MON_TCH              0x400    /* if set, means it's TCH, then we have to see if it is fully received and correctly decoded */
+#define  MON_SACCH          0x800    /* if set, means it's SACCH */
+#define  MON_TCH_SIG       0x1000   /* if set, it's TCHFsig, TCHHsig, */
+
+
+void L1T_MonitorAccumulateEnhanced ( uint8 blkCnt, l1c_sim_mode_enum local_sim_mode);
+
+void L1I_MonitorReport( Report* report, intx flags /* set of MON_xxx flags */, bool isSACCH );
+
+/* --- reporting periods ---------------------------------------------------- */
+
+void             L1I_StartReportPeriods( intx durationFrames, intx durationEBits, intx period, TimingAdvance timingAdvance, bool powerControl, bool dtxAllowed );
+void             L1I_StopReportPeriods( void );
+
+void             L1I_ReportPeriodCommandTA( TimingAdvance timingAdvance );
+TimingAdvance    L1I_ReportPeriodGetTA( void );
+
+/* --- GPRS timing advance -------------------------------------------------- */
+
+void L1I_SetOrderedTimingAdvance( TimingAdvance timingAdvance );
+bool L1I_GetTimingAdvance( TimingAdvance* timingAdvance );
+
+/* --- report handling ------------------------------------------------------ */
+
+void    L1T_InitReportData( void );
+
+Report* L1I_AllocReport( ReportType type, TID tid, void ( *callback )( Report* ) );
+Report* L1I_AllocRxReport( ReportType type, TID tid, void ( *callback )( Report* ), ARFCN arfcn, bool powerControl );
+Report* L1I_AllocMultislotRxReport( ReportType type, TID tid, void ( *callback )( Report* ), ARFCN arfcn, bool powerControl, intx slotCount );
+
+void    L1I_DispatchReports( void );
+void    L1I_FreeReport( Report* report );
+void    L1I_SendReport( Report* report, void ( *callback )( Report* ) );
+
+Report* L1T_AllocReport( ReportType type, void ( *callback )( Report* ) );
+void    L1T_FreeReport( Report* report );
+void L1T_SendReport( Report* report, void ( *callback )( Report* ) );
+#ifdef __GL1_MULTI_MODE__
+bool 		L1I_CheckPChReport(void);
+#endif
+
+bool L1I_CheckPPChExtend(Report* report);
+
+#ifdef __GL1_GEMINI__
+l1c_sim_mode_enum L1I_GetSimModeFromReport(Report *report);
+#endif
+
+/* --- hopping sequence management ------------------------------------------ */
+
+void L1I_SetHoppingSequencePtr( HoppingSequence** ptr, HoppingSequence* hs );
+void L1T_SetHoppingSequencePtr( HoppingSequence** ptr, HoppingSequence* hs );
+
+/* --- timing adjust -------------------------------------------------------- */
+
+void L1I_ResetTiming( l1c_sim_mode_enum );
+void L1I_ResetTiming_In_Timer( l1c_sim_mode_enum );
+int8 L1I_GetTimingTag( l1c_sim_mode_enum);
+void L1I_AccumulateTiming( Report* report );
+void L1I_L1D_AdjustFrame( intx *adjustFrameEBits );
+#if IS_FAST_TIMING_ADJUST_SUPPORT
+void L1I_FastAdjustTiming( kal_bool AdjustTiming );
+#endif
+#ifdef __GL1_GEMINI__
+intx L1I_QueryTimingErr(Timer *timer);
+void L1I_AdjustFrameWhenTimerExpire(intx extendEbits);
+uint8 L1I_GetSIMConfigBitmap(void);
+intx L1I_GetTimingErr ( l1c_sim_mode_enum local_sim_mode );
+void L1I_SetTimingErr ( l1c_sim_mode_enum local_sim_mode, intx TimingErr );
+#endif
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+void L1I_SetExtendEbits(intx ExtendEBits);
+void L1I_ClearExtendEbits(void);
+#endif
+#if defined( __GL1_GEMINI__) && defined(__BSIC_SEARCH_IN_PEER_IDLE_FRAME__)
+bool L1I_Check_TimerType_Is_Virtual_FCBT_SBT( Timer *timer );
+#endif
+
+/* --- L1C internal reset channels----------------------------------------------*/
+
+void L1_ResetIdleRxChannel( void );
+void L1_AGChStop( void );
+void L1_PChStop( void );
+void L1_CBChStop_Norm( void );
+void L1_CBChStop_Ext( void );
+void L1_NBCChStop( void );
+void L1_BCChStop( void );
+void L1_FCChStop( void );
+void L1T_ResetIdleRxChannelTid( void );
+void L1T_ResetAGChTid( void );
+void L1T_ResetPChTid( void );
+void L1T_ResetCBChNormTid( void );
+void L1T_ResetCBChExtTid( void );
+void L1T_ResetNBCChTid( void );
+void L1T_ResetBCChTid( void );
+void L1T_ResetFCChTid( void );
+
+/* --- SDCCh and TCh handling ----------------------------------------------- */
+typedef struct
+{
+   bool             isTCh;
+   TID              pendingHSTid;
+   FrequencyBand    band;
+   HoppingSequence* pendingHS;
+   intx             reportPeriodStart;
+   intx             reportPeriodLength;
+   intx             sacchPosition; /* position of the SACCh. 0=>12, 1=>25, 2=>38 ... */
+   DChParams        params;
+   Timer            hsTimer;
+   bool             isVamosTSC2;  /* true: shifted sacch */
+} Channel;
+
+typedef struct 
+{
+   int32 g_l1i_ul_cb;
+   int32 g_l1t_dl_cb;
+} l1c_ptm_global_struct; 
+
+typedef struct 
+{
+   Channel* g_ptr_currentDCh;  /*Orginal currentDch */
+   TID          g_dchTID;
+   LoopMode g_setLoopMode;
+   uint8        g_csd_tra_mode;
+   bool         g_csd_uplink_dtx_allow;
+   bool         g_nt_uplink_in_dtx_mode;
+
+} l1c_dedi_global_struct; 
+
+
+#ifdef __GL1_GEMINI__
+#define currentDCh       (dediGlobals_database[l1c_sim_mode].g_ptr_currentDCh)
+#define local_currentDCh       (dediGlobals_database[local_sim_mode].g_ptr_currentDCh)
+#define dchTID              (dediGlobals_database[l1c_sim_mode].g_dchTID)
+#define setLoopMode    (dediGlobals_database[l1c_sim_mode].g_setLoopMode)
+#define l1i_ul_cb           (ptmGlobals_database[l1c_sim_mode].g_l1i_ul_cb)
+#define local_l1i_ul_cb           (ptmGlobals_database[local_sim_mode].g_l1i_ul_cb)
+#define l1t_dl_cb           (ptmGlobals_database[l1c_sim_mode].g_l1t_dl_cb)
+#define csd_tra_mode     (dediGlobals_database[l1c_sim_mode].g_csd_tra_mode)
+#define local_csd_tra_mode     (dediGlobals_database[local_sim_mode].g_csd_tra_mode)
+#define csd_uplink_dtx_allow     (dediGlobals_database[l1c_sim_mode].g_csd_uplink_dtx_allow)
+#define local_csd_uplink_dtx_allow     (dediGlobals_database[local_sim_mode].g_csd_uplink_dtx_allow)
+#define nt_uplink_in_dtx_mode     (dediGlobals_database[l1c_sim_mode].g_nt_uplink_in_dtx_mode)
+#define local_nt_uplink_in_dtx_mode     (dediGlobals_database[local_sim_mode].g_nt_uplink_in_dtx_mode)
+   #ifdef __PS_SERVICE__
+extern l1c_ptm_global_struct   ptmGlobals_database[L1C_SIM_NUM];
+   #endif
+extern l1c_dedi_global_struct   dediGlobals_database[L1C_SIM_NUM];
+extern SNRAverager PSSnr_database[L1C_SIM_NUM];
+#define PS_Snr PSSnr_database[l1c_sim_mode]
+#else /*__GL1_GEMINI__*/
+#define currentDCh              (dediGlobals.g_ptr_currentDCh)
+#define dchTID                  (dediGlobals.g_dchTID)
+#define setLoopMode             (dediGlobals.g_setLoopMode)
+#define l1i_ul_cb               (ptmGlobals.g_l1i_ul_cb)
+#define l1t_dl_cb               (ptmGlobals.g_l1t_dl_cb)
+#define csd_tra_mode            (dediGlobals.g_csd_tra_mode)
+#define csd_uplink_dtx_allow    (dediGlobals.g_csd_uplink_dtx_allow)
+#define nt_uplink_in_dtx_mode   (dediGlobals.g_nt_uplink_in_dtx_mode)
+   #ifdef __PS_SERVICE__
+extern l1c_ptm_global_struct  ptmGlobals;
+   #endif
+extern l1c_dedi_global_struct  dediGlobals;
+extern SNRAverager PS_Snr;
+#define local_currentDCh               (currentDCh)
+#define local_l1i_ul_cb                (l1i_ul_cb)
+#define local_csd_tra_mode             (csd_tra_mode)
+#define local_csd_uplink_dtx_allow     (csd_uplink_dtx_allow)
+#define local_nt_uplink_in_dtx_mode    (nt_uplink_in_dtx_mode)
+#endif  /*__GL1_GEMINI__*/
+//extern l1c_sim_mode_enum l1c_sim_mode; // global variable
+
+void L1I_StartSDCCh( void );
+void L1I_StopSDCCh( void );
+void L1I_StopSACCHT( void );
+void L1I_StartTCh( void );
+void L1I_StopTCh( void );
+void L1I_AdjustTChTimer( void );
+void L1I_StartTChAB( void );
+void L1I_StartSDCChAB( void );
+
+void L1I_ReportSACCh( Report* report );
+
+void L1I_TChSetChannelMode( void );
+void L1I_StartSetChannelModeTimer( void );
+void L1I_SetChannelMode( void );
+
+void L1T_DChStopHandoverUpdateTA( void );
+void L1I_TChSetSmallHs(bool smallHS);
+void L1I_PChStop( void );
+bool L1I_CheckPChExtend(Report* report);
+intx L1I_Get_PagingPeriod(void);
+bool L1I_Get_ExtendedPaging(void);
+#ifdef __PS_SERVICE__
+#if IS_2G_TAS_SUPPORT || IS_2G_RXD_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+int8 L1T_GetPDTChTid( void );
+int8 L1T_GetPACChTid( void );
+int8 L1T_GetPTCChTid( void );
+#endif /*IS_2G_TAS_SUPPORT || IS_2G_RXD_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )*/
+#ifdef __GERAN_R5__
+intx L1I_Get_SplitPagingCycle(void);
+#endif
+#endif
+#ifdef __GL1_GEMINI__
+intx L1I_QueryPchPriority(void);
+bool L1I_IsSBTMachineStarted( void );
+#endif /*__GL1_GEMINI__*/
+
+#if defined (__GL1_GEMINI__) || defined (__ADDITIONAL_SERVING_SB_TRACKING__)
+bool L1I_IsSBMachineStarted( void );
+#endif
+void L1I_BCChStop( void );
+void L1I_FCChTStop( void );
+void L1I_SChTStop( void );
+
+#ifdef __GL1_GEMINI__
+void L1I_Immediate_FCChTRestart(l1c_sim_mode_enum sim_idx);
+bool L1I_CheckFCChTStarted(l1c_sim_mode_enum );
+bool L1I_CheckProtectedFCChTStarted( l1c_sim_mode_enum );
+#ifdef __GL1_MULTI_MODE__
+kal_bool L1I_QueryFCChStarted( void );
+int32 L1I_QueryFCChTReserveMask( void );
+int32 L1I_QuerySChTReserveMask( void );
+void L1I_FCChWinOffReStart( l1c_sim_mode_enum local_sim_mode, int32 ebitDelay );
+void L1I_TimerGAPSuspendReStart( l1c_sim_mode_enum local_sim_mode, int32 ebitDelay );
+void L1I_TimerGAPStopReStart( l1c_sim_mode_enum local_sim_mode, int32 ebitDelay );
+void L1I_TimerGSMAutoGAPStopReStart( l1c_sim_mode_enum local_sim_mode, int32 ebitDelay );
+#endif
+#endif /*__GL1_GEMINI__*/
+
+void L1C_SIM_Notify( uint8 status );
+
+#ifdef __BLIND_HANDOVER__
+BlindHO_Phase L1T_QueryBlindHOPhase( void );
+#endif
+
+#define IS_EVEN(n) ( ((n)&1) == 0 )
+#define IS_ODD(n)  ( ((n)&1) != 0 )
+#define SHIFTED_SACCH_OFFSET ( (currentDCh->isVamosTSC2)? ( IS_ODD(currentDCh->sacchPosition)? (-1):1 ) : 0 )
+//#define SHIFTED_SACCH_OFFSET_CH(ch) ( (ch->isVamosTSC2)? ( IS_ODD(ch->sacchPosition)? (-1):1 ) : 0 )
+#define IS_TCH_SHIFTED ( (currentDCh->isVamosTSC2) && ( IS_EVEN(currentDCh->sacchPosition) ) )  /* only VAMOS TSC2 && even sacch position will shift tch position */
+#define L1_FrameNumberModX_TCh( fn ) ( IS_TCH_SHIFTED? L1_FrameNumberMod26(fn) : L1_FrameNumberMod13(fn) )
+#define L1_FrameNumberModX_SHIFTED(fn) ( currentDCh->isVamosTSC2? L1_FrameNumberMod26( fn ) : L1_FrameNumberMod13( fn ) )
+#define IS_SHIFTED_TCH_BLOCK(fn26) ( currentDCh->isVamosTSC2 && ( ( IS_EVEN(currentDCh->sacchPosition) && fn26 == 12 ) || ( IS_ODD(currentDCh->sacchPosition) && fn26 == 21 ) ) )
+#define IS_CHMODE_VAMOS(mode)    ( TChModeFS_VAMOS <= mode && mode <= TChModeAFS_WB_VAMOS )
+#define IS_CHMODE_FS_AMR(mode)   ( mode == TChModeAFS || mode == TChModeAFS_WB || mode == TChModeAFS_VAMOS || mode == TChModeAFS_WB_VAMOS )
+#define IS_CHMODE_HS_AMR(mode)   ( mode == TChModeAHS || mode == TChModeAHS_VAMOS )
+#define IS_CHMODE_HS(mode)       ( mode == TChModeHS || mode == TChModeAHS || mode == TChModeHS_VAMOS || mode == TChModeAHS_VAMOS)
+#define IS_CHMODE_AMR(mode)      ( ( TChModeAFS <= mode && mode <= TChModeAFS_WB ) || ( TChModeAFS_VAMOS <= mode && mode <= TChModeAFS_WB_VAMOS ) )
+#define IS_CHMODE_FS_AMR_WB(mode)      ( mode == TChModeAFS_WB || mode == TChModeAFS_WB_VAMOS )
+
+/* --- PTCCh ---------------------------------------------------------------- */
+#if defined(__EGPRS_MODE__) && defined(__GERAN_RTTI__)
+void L1I_PTCChSetParams( HoppingSequence* hs, BSIC bsic, TSC tsc, TimeSlot dlTimeSlot, TimeSlot ulTimeSlot, SubChannel subChannel, intx burstLength );
+#else
+void L1I_PTCChSetParams( HoppingSequence* hs, BSIC bsic, TSC tsc, TimeSlot timeSlot, SubChannel subChannel, intx burstLength );
+#endif /* end of __EGPRS_MODE__ && __GERAN_RTTI__ */
+void L1I_PTCChSetSyncTimeSlot( TimeSlot syncTimeSlot );
+void L1I_PTCChStart( void );
+void L1I_PTCChStop( void );
+
+/* --- PDTCh handling ------------------------------------------------------- */
+
+#ifdef __NEW_TBF_ARCH__
+#if defined(__EGPRS_MODE__) && defined(__GERAN_RTTI__)
+void L1I_PDTChStart( TBFCommonParams* commonParams, PdtchConfigMode pdtchCfgMod );
+void L1I_PDTChRestart( TBFCommonParams* commonParams, PdtchConfigMode old_pdtchCfgMod, PdtchConfigMode new_pdtchCfgMod );
+#else
+void L1I_PDTChStart( TBFCommonParams* commonParams );
+void L1I_PDTChRestart( TBFCommonParams* commonParams );
+#endif /* end of __EGPRS_MODE__ && __GERAN_RTTI__ */
+#else /* __NEW_TBF_ARCH__ */
+void L1I_PDTChStart( TBFParams* params );
+void L1I_PDTChRestart( TBFParams* params );
+#endif /* __NEW_TBF_ARCH__ */
+void L1I_PDTChStop( uint8 stopTid );
+#if defined(__EGPRS_MODE__) && defined(__GERAN_RTTI__)
+void L1I_PDTChUpdateTimerMask( PdtchConfigMode pdtchCfgMod );
+#else      
+void L1I_PDTChUpdateTimerMask( void );
+#endif /* end of __EGPRS_MODE__ && __GERAN_RTTI__ */
+bool L1I_PDTChCheckNoRRBP( int32 ebitDelay, mpal_gl1_query_priority_enum query_type );
+bool L1I_PDTChCheckRestart( void );
+
+#ifdef __NEW_TBF_ARCH__
+#ifdef __EGPRS_MODE__
+void L1T_DnPDTChStop( uint8 toStopDnPdtch );
+void L1T_PDTCHSetResetIR( int8 index );
+void L1I_PDTCHSetIRParams( MACDownlinkParams* macDownParams, int8 index );
+
+#ifdef __GERAN_RTTI__
+uint8 L1I_SlotTransferRxToTx( int8 tbfIdx, intx rxTimeSlot, PdtchConfigMode *pdtchCfgMod, UsfMode *usfMode, uint8 *lowTS );
+void L1I_MACSetPdtchMode( PdtchConfigMode pdtchCfgMode );
+void L1I_MACBlockPreTick( TimeSlot minTxTimeSlot );
+#endif /* end of __GERAN_RTTI__ */
+#endif /*__EGPRS_MODE__*/
+void L1I_GetDnTBFTid( uint8 reportTBFTid[8] );
+TimeSlot L1I_PeekTBFSyncTimeSlot( void );
+uint8 L1I_QueryTBFActiveStatus( bool isDownLink );
+
+#else /* __NEW_TBF_ARCH__ */
+#ifdef __EGPRS_MODE__
+void L1T_DnPDTChStop( void );
+void L1T_PDTCHSetResetIR( bool );
+#endif /*__EGPRS_MODE__*/
+
+uint8 L1I_GetDnTBFTid( void );
+
+#endif /* __NEW_TBF_ARCH__ */
+
+#if defined(__EGPRS_MODE__) && defined(__GERAN_RTTI__)
+uint8 L1_SlotTransferRxToTx( int8 tbfIdx, intx rxTimeSlot, PdtchConfigMode *pdtchCfgMod );
+#endif /* end of __EGPRS_MODE__ && __GERAN_RTTI__ */
+
+void L1T_ReportPDTChDebugCtrlBlock( int8 msgType, BlockData* data, int8 rrbp, int8 DD, int8 tfi );
+
+/* --- power control on the DCh and RACH ------------------------------------ */
+
+Power L1I_GetCurrentTxPower( void );
+Power L1I_DChPowerControlStart( FrequencyBand band, PowerControlLevel txPower );
+void  L1I_DChPowerControlStop( void );
+void  L1I_DChPowerControlCommandPower( PowerControlLevel txPower );
+void  L1I_DChPowerControlBeginSACChPeriod( void );
+void  L1I_DChPowerControlUpdateUsedPower( intx frames );
+void  L1T_RAChSetMaxTxPower(Power power);
+
+/* --- updating DCh every report period ------------------------------------- */
+
+void L1I_DChReportingPeriod( bool powerControl, bool dtxAllowed );
+
+void L1I_SetReportedPower( PowerControlLevel power );
+void L1I_SetReportedTimingAdvance( TimingAdvance timingAdvance );
+void L1I_SetUplinkMode( TChMode mode , LogChannel log );
+
+/* --- decoding of GSM blocks ----------------------------------------------- */
+
+void L1_DecodeSCh( BlockData* data, BSIC* bsic, FrameNumber* frame );
+bool L1_ExtractPageMode( BlockData* data, intx* mode );
+bool L1_ExtractPPChPageMode( BlockData* data, intx* mode );
+
+/* --- tool ----------------------------------------------------------------- */
+
+intx L1_CountBits8( uint8 mask );
+
+intx L1_GetLSB( uint32 mask );
+intx L1_GetMSB( uint32 mask );
+intx L1_GetNextEnabledBlock( intx startBlock, uint32 mask );
+intx L1_GetReservationMaskDuration( int32 mask );
+
+intx L1_CalcDelay( FrameNumber fn, intx pos, intx period );
+
+intx L1_CalcDelayMasked( FrameNumber fn, intx blockPos, intx blockSpacing, uint32 mask, intx maskSize, intx* blockNo );
+intx L1_CalcNextBlockMasked( intx* blockNo, intx blockSpacing, uint32 mask, intx maskSize );
+uint32 Slow_Clk_32bits_Register_Read( void );
+/* TODO these two are obsolete and should be replaced by their implementation */
+intx L1_CalcBCChDelay( FrameNumber fn, intx fn51, intx mask, intx* ptc );
+intx L1_CalcNBCChDelay( FrameNumber fn, intx mask, intx* ptc );
+
+intx L1_CalcNextBCChBlock( intx tc, intx mask, intx* ptc );
+
+void L1_ClearScanListPower( ScanList* scanList );
+void L1_NormalisePreProcess( Power *power, intx cnt, bool enabledownscale );
+void L1_NormalisePreProcessSC( PowerSum32 *power, intx cnt, bool enabledownscale );
+void L1_NormaliseScanListPower( ScanList* scanList, bool downscale );
+
+#ifdef __GERAN_R6__ 
+void L1T_SetLBpowerLevelStatus(bool SIwithLBpowerLevel);
+#endif  /*__GERAN_R6__ */
+Power             L1_ConvertPowerControlLevelTodBm( FrequencyBand band, PowerControlLevel txPower );
+PowerControlLevel L1_ConvertdBmToPowerControlLevel( FrequencyBand band, Power power, PowerControlLevel commandedPCL );
+
+void L1_PrepareSChData( SChData* p );
+
+Power L1T_CalcBlockPower( RxData* rx );
+intx L1_CalcPDChBlockPower( Report* report, intx slot, bool usePb );
+
+void L1I_LowSignalCompensate(Power* antenna);
+
+/* --- frame interrupt ------------------------------------------------------ */
+
+void L1T_FrameInterruptInit( void );
+void L1T_FrameInterruptExit( void );
+void L1I_FrameInterrupt( kal_uint32 irq_id );
+
+void L1I_WakeTaskRequested(l1c_sim_mode_enum);
+#if !(IS_DUAL_CORE_GL1AC_MODEM_SUPPORT)
+void L1I_SetPostponeTimer( void );
+#endif
+/* --- AGC ------------------------------------------------------------------ */
+
+void L1T_AGCInit( void );
+
+void L1I_AGCSetServingBCChARFCN( ARFCN arfcn );
+void L1I_AGCSetPb( intx pb );
+void L1I_AGCSetPTCCh( bool pbcchExists );
+
+void L1I_AGCSetupServingBCCh(    Report* report );
+void L1I_AGCSetupBCCh(           Report* report, AGCCellData* cell );
+void L1I_AGCSetupDediNoDTX(      Report* report, FrequencyBand band, TimeSlot syncTimeSlot );
+void L1I_AGCSetupDediDTX(        Report* report, FrequencyBand band, TimeSlot syncTimeSlot );
+void L1I_AGCSetupDediNoDTX_SmallHS( Report* report, FrequencyBand band, TimeSlot syncTimeSlot );
+void L1I_AGCSetupDediDTX_SmallHS( Report* report, FrequencyBand band, TimeSlot syncTimeSlot );
+void L1I_AGCSetupServingPBCCh(   Report* report, FrequencyBand band );
+void L1I_AGCSetupNeighbourPBCCh( Report* report, AGCCellData* cell, FrequencyBand band );
+void L1I_AGCSetupInterference(   Report* report, FrequencyBand band );
+void L1I_AGCSetupPDTCh(          Report* report, AGCDataPDTCh* pdtch, FrequencyBand band, TimeSlot syncTimeSlot );
+void L1I_AGCSetupPTCCh(          Report* report, FrequencyBand band );
+void L1I_AfterBlockPDTChPowerControl( Report* report );
+void L1I_SetAGCHighSetpoint(void);
+void L1I_SetAGCLowSetpoint(void);
+void L1I_RAS_UpdateMode(bool needChange);
+
+
+/* --- AFC ------------------------------------------------------------------ */
+void L1T_AFCInit( uint8 simIndex );
+void L1I_AFCClearParams( AfcParams* afc );
+void L1I_AFCHandoverSuspend( uint8 simIndex );
+void L1I_AFCEnableSlowTrack( uint8 simIndex );
+void L1I_AFCDisableSlowTrack( uint8 simIndex );
+
+extern int32 AFCTrackingCountDown;  //Used for AFC tracking thermal issue
+
+/* --- calculating receive power level C ------------------------------------ */
+
+void L1I_UpdateCFromPCh( Report* report, intx slot, intx ndrx );
+void L1I_UpdateCFromPPCh( Report* report, intx slot, intx ndrx );
+void L1I_UpdateCFromBCCh( Power power,  l1c_sim_mode_enum);
+void L1I_UpdateCFromPDTCh( Report* report );
+void L1I_SetTimeSlotC( intx slotToUse );
+void L1I_CResetCounter( Power power );
+intx L1I_GetC(l1c_sim_mode_enum);
+#ifdef __GERAN_R5__
+void L1I_UpdateCFromAGCh( Report* report, intx slot, intx ndrx );
+void L1I_UpdateCFromPAGCh( Report* report, intx slot, intx ndrx );
+#endif
+
+/* --- GPRS transmit power control ------------------------------------------ */
+
+void   L1I_PowerControlSetParams( FrequencyBand band, uint8 alpha, uint8 gamma[8] );
+void   L1I_PowerControlClearParams( void );
+void   L1I_PowerControlSetC( intx c,  l1c_sim_mode_enum local_sim_mode);
+Power* L1I_PowerControlGetTxPower( void );
+void   L1I_PowerControlSetMaximumOutputPower( Power pmax );
+Power  L1I_PowerControlGetMaximumOutputPower( void );
+#ifdef __EPSK_TX__
+Power* L1I_PowerControlGetTxPowerEPSK( void );
+void   L1I_PowerControlSetMaximumOutputPowerEPSK( Power pmaxEPSK );
+#endif
+
+/* --- surround cell handling ----------------------------------------------- */
+
+void L1T_SurroundInit( void );
+void L1T_SurroundExit( void );
+
+AfcParams*  L1T_SurroundGetAfcData( ARFCN arfcn );
+kal_int16 L1T_SurroundGetDACData( ARFCN arfcn );
+void L1T_SurroundAssignAfcFromManual( ARFCN arfcn );
+SurroundBS* L1T_SurroundGetBSByARFCN( ARFCN arfcn );
+extern SurroundMode L1I_Query_SCMode(l1c_sim_mode_enum);
+#ifdef __GL1_MULTI_MODE__
+bool L1I_IsAnySIMinStandbyMode( void );
+#endif /* __GL1_MULTI_MODE__ */
+
+#ifdef __GL1_MULTI_MODE__
+void Updatel1machTimeslot(TimeSlotMask *timeSlotsUp, TimeSlotMask *timeSlotsDown);
+#endif
+/* --- power measurements - session management ------------------------------ */
+#ifdef __GL1_GEMINI__
+  #if (GEMINI_PLUS_GSM >= 4)
+typedef enum
+{
+   MeasurementPriorityBCCh,    /* highest priority */
+   MeasurementPriorityBCCh_2,    /* highest priority */
+   MeasurementPriorityBCCh_3,
+   MeasurementPriorityBCCh_4,
+   MeasurementPriorityExtHigh,
+   MeasurementPriorityExtHigh_2,
+   MeasurementPriorityExtHigh_3,
+   MeasurementPriorityExtHigh_4,
+#ifdef __GL1_GEMINI__
+   MeasurementPriorityVirtualScan,
+   MeasurementPriorityVirtualScan_2,
+   MeasurementPriorityVirtualScan_3,
+   MeasurementPriorityVirtualScan_4,
+#endif /*__GL1_GEMINI__*/
+   MeasurementPriorityDEDICATESurround,
+   MeasurementPriorityDEDICATESurround_2,
+   MeasurementPriorityDEDICATESurround_3,
+   MeasurementPriorityDEDICATESurround_4,
+   MeasurementPriorityIDLESurround,
+   MeasurementPriorityIDLESurround_2,
+   MeasurementPriorityIDLESurround_3,
+   MeasurementPriorityIDLESurround_4,
+#ifdef __PKT_EXT_MEAS__
+   MeasurementPriorityExtLow,
+   MeasurementPriorityExtLow_2,
+   MeasurementPriorityExtLow_3,
+   MeasurementPriorityExtLow_4,
+#endif
+   MeasurementPriorityScan,    /* lowest priority */
+   MeasurementPriorityScan_2,    /* lowest priority */
+   MeasurementPriorityScan_3,
+   MeasurementPriorityScan_4,
+#ifdef __GL1_MULTI_MODE__
+   MeasurementPriorityScanCGI,
+   MeasurementPriorityScanCGI_2,
+   MeasurementPriorityScanCGI_3,
+   MeasurementPriorityScanCGI_4,
+   MeasurementPriorityStandbyRSSI,
+   MeasurementPriorityStandbyRSSI_2,
+   MeasurementPriorityStandbyRSSI_3,
+   MeasurementPriorityStandbyRSSI_4,
+#ifdef  __GERAN_R8__  	
+   MeasurementPriorityStandbyPRIORSSI,
+   MeasurementPriorityStandbyPRIORSSI_2,
+   MeasurementPriorityStandbyPRIORSSI_3,
+   MeasurementPriorityStandbyPRIORSSI_4,
+#endif
+#ifdef __GL1_GEMINI_WCDMA__
+   MeasurementPriorityStandbyPLMN,
+   MeasurementPriorityStandbyPLMN_2,
+   MeasurementPriorityStandbyPLMN_3,
+   MeasurementPriorityStandbyPLMN_4,
+#endif
+#endif 
+   MeasurementPriorityCount /* end marker */
+} MeasurementPriority;
+  #elif (GEMINI_PLUS_GSM >= 3)
+typedef enum
+{
+   MeasurementPriorityBCCh,    /* highest priority */
+   MeasurementPriorityBCCh_2,    /* highest priority */
+   MeasurementPriorityBCCh_3,
+   MeasurementPriorityExtHigh,
+   MeasurementPriorityExtHigh_2,
+   MeasurementPriorityExtHigh_3,
+#ifdef __GL1_GEMINI__
+   MeasurementPriorityVirtualScan,
+   MeasurementPriorityVirtualScan_2,
+   MeasurementPriorityVirtualScan_3,
+#endif /*__GL1_GEMINI__*/
+   MeasurementPriorityDEDICATESurround,
+   MeasurementPriorityDEDICATESurround_2,
+   MeasurementPriorityDEDICATESurround_3,
+   MeasurementPriorityIDLESurround,
+   MeasurementPriorityIDLESurround_2,
+   MeasurementPriorityIDLESurround_3,
+#ifdef __PKT_EXT_MEAS__
+   MeasurementPriorityExtLow,
+   MeasurementPriorityExtLow_2,
+   MeasurementPriorityExtLow_3,
+#endif
+   MeasurementPriorityScan,    /* lowest priority */
+   MeasurementPriorityScan_2,    /* lowest priority */
+   MeasurementPriorityScan_3,
+#ifdef __GL1_MULTI_MODE__
+   MeasurementPriorityScanCGI,
+   MeasurementPriorityScanCGI_2,
+   MeasurementPriorityScanCGI_3,
+   MeasurementPriorityStandbyRSSI,
+   MeasurementPriorityStandbyRSSI_2,
+   MeasurementPriorityStandbyRSSI_3,
+#ifdef  __GERAN_R8__  	
+   MeasurementPriorityStandbyPRIORSSI,
+   MeasurementPriorityStandbyPRIORSSI_2,
+   MeasurementPriorityStandbyPRIORSSI_3,
+#endif
+#ifdef __GL1_GEMINI_WCDMA__
+   MeasurementPriorityStandbyPLMN,
+   MeasurementPriorityStandbyPLMN_2,
+   MeasurementPriorityStandbyPLMN_3,
+#endif
+
+#endif 
+   MeasurementPriorityCount /* end marker */
+} MeasurementPriority;
+  #else   /*GEMINI_PLUS_GSM = 2*/
+typedef enum
+{
+   MeasurementPriorityBCCh,    /* highest priority */
+   MeasurementPriorityBCCh_2,    /* highest priority */
+   MeasurementPriorityExtHigh,
+   MeasurementPriorityExtHigh_2,
+#ifdef __GL1_GEMINI__
+   MeasurementPriorityVirtualScan,
+   MeasurementPriorityVirtualScan_2,
+#endif /*__GL1_GEMINI__*/
+   MeasurementPriorityDEDICATESurround,
+   MeasurementPriorityDEDICATESurround_2,
+   MeasurementPriorityIDLESurround,
+   MeasurementPriorityIDLESurround_2,
+#ifdef __PKT_EXT_MEAS__
+   MeasurementPriorityExtLow,
+   MeasurementPriorityExtLow_2,
+#endif /*__PKT_EXT_MEAS__*/
+   MeasurementPriorityScan,    /* lowest priority */
+   MeasurementPriorityScan_2,    /* lowest priority */
+#ifdef __GL1_MULTI_MODE__
+   MeasurementPriorityScanCGI,
+   MeasurementPriorityScanCGI_2,
+   MeasurementPriorityStandbyRSSI,
+   MeasurementPriorityStandbyRSSI_2,
+#ifdef  __GERAN_R8__  	
+   MeasurementPriorityStandbyPRIORSSI,
+   MeasurementPriorityStandbyPRIORSSI_2,
+#endif
+#ifdef __GL1_GEMINI_WCDMA__
+   MeasurementPriorityStandbyPLMN,
+   MeasurementPriorityStandbyPLMN_2,
+#endif
+#endif 
+   MeasurementPriorityCount /* end marker */
+} MeasurementPriority;
+   #endif /*ENDIF of GEMINI_PLUS_GSM*/
+#else /*__GL1_GEMINI__*/
+typedef enum
+{
+   MeasurementPriorityBCCh,    /* highest priority */
+   MeasurementPriorityExtHigh,
+   MeasurementPriorityDEDICATESurround,
+   MeasurementPriorityIDLESurround,
+#ifdef __PKT_EXT_MEAS__
+   MeasurementPriorityExtLow,
+#endif
+   MeasurementPriorityScan,    /* lowest priority */
+#ifdef __GL1_MULTI_MODE__
+   MeasurementPriorityScanCGI,
+   MeasurementPriorityStandbyRSSI,
+#ifdef  __GERAN_R8__  	
+   MeasurementPriorityStandbyPRIORSSI,
+#endif  /*__GERAN_R8__*/
+#ifdef __GL1_GEMINI_WCDMA__
+   MeasurementPriorityStandbyPLMN,
+#endif
+#endif  /*__GL1_MULTI_MODE__*/
+   MeasurementPriorityCount /* end marker */
+} MeasurementPriority;
+#endif  /*__GL1_GEMINI__*/
+
+//if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+#ifdef __GL1_MULTI_MODE__
+typedef enum
+{
+   PMIdle,
+   PMPTM
+}PMTypes;
+
+typedef enum
+{
+   GAP2G,
+   PowerScan,
+   BA,
+   PowerScanCGI,
+   Dedi2G
+}SuspendTypes;
+
+typedef enum
+{
+   NoPM,
+   OnePMBypass,
+   AllPM
+}PMReturnTypes;
+
+PMReturnTypes L1I_IsPMAvailable( void );
+void L1I_CentralizedSuspendPM( void );
+void L1I_CentralizedMeasurementsDoSession( intx priority, intx count, SuspendTypes suspend_type, intx frameDelay, intx ebitDelay, l1c_sim_mode_enum local_sim_mode );
+//void L1I_StartCentralizedSuspendTimerforBA( intx frameDelay, intx ebitDelay );
+void L1I_SetSuspendPMBitmapforGAP( uint8 index, bool suspend, l1c_sim_mode_enum sim_index );
+void L1I_SetSuspendPMBitmapforPowerScan ( uint8 index, bool suspend, l1c_sim_mode_enum sim_index );
+void L1I_SetSuspendPMBitmapforBA( uint8 index, bool suspend, l1c_sim_mode_enum sim_index );
+void L1I_SetSuspendPMBitmapforPowerScanCGI( uint8 index, bool suspend, l1c_sim_mode_enum sim_index );
+//void L1I_SetSuspendPMBitmapforDedi2G( uint8 index, bool suspend );
+void L1I_TimerSuspendPMforGAP( Timer* timer );
+void L1I_TimerSuspendPMforPowerScan( Timer* timer );
+void L1I_TimerSuspendPMforBA( Timer* timer );
+void L1I_TimerSuspendPMforPowerScanCGI( Timer* timer );
+//void L1I_TimerSuspendPMforDedi2G( Timer* timer );
+void L1I_ResetSuspendPMBitmap( uint8 index );
+bool L1I_IsTimerSuspendPMforGAPStarted( void );
+void L1I_SuspendPMforBA( void );
+void L1I_StopTimerSuspendPMforGAP( void );
+uint8 L1I_QueryMeasurementsRunIndex( intx priority );
+#endif
+void L1I_MeasurementsStart( Measurements* meas, intx priority );
+void L1I_MeasurementsStop( intx priority , bool ignore_when_changed_mode);
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+//void L1I_MeasurementsStopAll( void );
+#endif
+#ifdef __GL1_MULTI_MODE__
+void L1I_MeasurementsSuspendStandby( intx priority );
+void L1I_MeasurementsSuspendAll( void );
+void L1I_MeasurementsSuspend( intx priority );
+bool L1I_MeasurementsisCompleted( void );
+bool L1I_MeasurementsisActive( intx priority );
+bool L1I_MeasurementsisCompletedStandby( void );
+#endif
+void L1I_MeasurementsDoSession( intx priority, intx count );
+void L1I_MeasurementsDoFinalSession( intx priority, intx count );
+
+void L1I_MeasurementsStartScanListMeasurements( Report* report, ScanList* list, intx passes, intx priority );
+
+void L1I_MeasurementsProcessResults( void );
+
+void L1TST_PowerScanIQOffset( PMResult *pmResult );
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+void L1I_SurroundMeasurement ( intx ExtendEBits );
+void L1I_SurroundMeasurementConsume( void );
+void L1I_SetSurroundMeasurement ( PMTypes type, bool start, l1c_sim_mode_enum sim_index );
+#endif
+/* --- BCCh power measurements ---------------------------------------------- */
+
+/* TODO this could be derived from the paging blocks */
+/*
+void L1T_BCChMeasurementStartIdle( ARFCN arfcn, intx pagingPeriod );
+void L1T_BCChMeasurementStopIdle( void );
+*/
+
+void L1I_BCChMeasurementStartPacketTransfer( ARFCN arfcn );
+void L1I_BCChMeasurementStopPacketTransfer( void );
+
+/* --- surround cell power measurements ------------------------------------- */
+
+void L1T_SurroundMeasurementStartIdle( ScanList* list );
+void L1T_SurroundMeasurementStopIdle( void );
+
+#if defined( __GL1_MULTI_MODE__ ) && defined( __GERAN_R8__ )
+extern l1c_sim_mode_enum l1c_sim_prio_ba_offset;
+//Gap_service_2G_enum L1T_SetGAPServiceGSM( kal_bool isAll );  /* gapservice will be decided by L1A */
+void L1I_SurroundMeasurementStopHPSearchStandby(void);
+#endif /* __GL1_MULTI_MODE__ && __GERAN_R8__ */
+
+#ifdef __GL1_MULTI_MODE__
+#ifdef  __GERAN_R8__ 
+void L1T_SurroundMeasurementStopStandby( kal_bool is_higher_priority );
+//#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+#if 1
+void L1I_SurroundMeasurementPagingBlockHPSearchStandby( kal_uint16 pm_session_num, intx frameDelay, intx ebitDelay );
+#else
+/* under construction !*/
+#endif
+#else
+void L1T_SurroundMeasurementStopStandby( void );
+#endif  /* __GERAN_R8__ */
+void L1I_SurroundMeasurementStopStandby( void );
+void L1T_SurroundMeasurementStartStandby( ScanList* list );
+void L1I_SurroundMeasurementStartStandby( ScanList* list );
+void L1T_SurroundEnterStandby( void );
+void L1T_SurroundLeaveStandby( void );
+//#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+#if 1
+void L1I_SurroundMeasurementPagingBlockStandby( kal_uint16 pm_session_num, intx frameDelay, intx ebitDelay );
+#else
+/* under construction !*/
+#endif
+void L1T_SurroundMeasurementsDoneStandby( ScanList* scanList );
+void L1I_SurroundMeasurementStopGAPSuspended( void );
+#endif
+
+ScanList* L1T_SurroundMeasurementStartDedi( ScanList* list );
+void      L1T_SurroundMeasurementStopDedi( void );
+
+void L1T_SurroundMeasurementStartPacketIdle( ScanList* list, bool usePPCh, intx duration );
+void L1T_SurroundMeasurementStopPacketIdle( void );
+
+ScanList* L1T_SurroundMeasurementStartPacketTransfer( ScanList* list );
+void      L1T_SurroundMeasurementStopPacketTransfer( void );
+
+void L1T_StartNCReport( intx period , bool useT3158 );
+void L1T_StopNCReport( void );
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#ifdef  __GERAN_R8__  
+/* under construction !*/
+/* under construction !*/
+#endif  /* __GERAN_R8__ */
+#endif
+
+/* --- ticking the measurements --------------------------------------------- */
+
+void L1I_SurroundMeasurementPagingBlockIdle( void );       /* idle mode */
+void L1I_SurroundMeasurementReportingPeriod( void );       /* dedicated */
+void L1I_ExtendedMeasurementReportingPeriod( void );       /* dedicated */
+void L1I_SurroundMeasurementPacketPagingBlock( void );     /* packet idle */
+void L1I_SurroundMeasurementPagingBlockPacketIdle( void ); /* packet idle */
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+#if 1
+void L1I_SurroundMeasurementPagingBlock_PIdle( kal_uint16 pm_session_num, l1c_sim_mode_enum local_sim_mode, bool start_suspend_timer, intx frameDelay,intx ebitDelay );
+void L1I_SurroundMeasurementPagingBlockRTB( kal_uint16 pm_session_num, l1c_sim_mode_enum local_sim_mode, bool start_suspend_timer, intx frameDelay,intx ebitDelay );
+void L1I_SurroundMeasurementPTMRTBAllow( uint32 PMNumber, intx frameDelay, intx ebitDelay );
+#else
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+#endif
+#ifdef __PKT_EXT_MEAS__
+void L1I_ExtendedMeasurementPacketPagingBlock( void );     /* packet idle */
+bool L1I_IsPktExtendedMeasurementActive( void );
+#endif
+void L1I_BCChMeasurementBlockTick( void );                 /* packet transfer */
+void L1I_SurroundTickMeasurementDedi(l1c_sim_mode_enum);
+void L1I_SurroundTickMeasurementPT( l1c_sim_mode_enum );
+
+/* --- MAC ------------------------------------------------------------------ */
+
+void L1I_MACStart( void );
+void L1I_MACStop( void );
+
+#ifdef __NEW_TBF_ARCH__
+void L1I_MACSetUplink( int8 index, MACUplinkParams* up, FrameNumber startingTime );
+void L1I_MACSetDownlink( int8 index, MACDownlinkParams* down );
+void L1I_MACUpdateTimeSlotsAll( TimeSlotMask* timeSlotsDown, TimeSlotMask* timeSlotsUp );
+TimeSlotMask L1I_MACGetTimeSlotsUp( void );
+TimeSlotMask L1I_MACGetTimeSlotsDown( void );
+void L1I_MACRxBlockTick( TimeSlot syncTimeSlot );
+void L1I_MACBlockTick( TimeSlot syncTimeSlot, Power txPower[8] );
+#else /* __NEW_TBF_ARCH__ */
+void L1I_MACSetUplink( MACUplinkParams* up, FrameNumber startingTime );
+void L1I_MACSetDownlink( MACDownlinkParams* down );
+void L1I_MACRxBlockTick( TimeSlot syncTimeSlot );
+void L1I_MACTxBlockTick( void );
+#endif /* __NEW_TBF_ARCH__ */
+
+void L1I_MACDropBlock( void );
+void L1I_MACDropTimeslot6( void );
+bool L1I_MACIsTS0Free( intx syncTimeSlot );
+TimeSlot L1I_UpdateStartTimeSlotFBSB( void );
+bool L1I_MACGetAllocationExhausted( void );
+void L1I_MACSetTimingAdvance( TimingAdvance timingAdvance );
+
+#ifdef __PS_SERVICE__
+TimingAdvance L1I_MACGetTimingAdvance (void);
+#endif
+
+void L1I_PRAChSetFreeUSFMask( intx freeUSFMask, l1c_sim_mode_enum local_sim_mode);
+void L1I_MACRepeatAllocation( bool repeat, TimeSlotMask timeSlotOverrideMask, FrameNumber startFrameNumber);
+void L1I_MACReleaseTimeSlots( TimeSlotMask timeSlotsKept );
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void L1I_PreGetUplinkPDTChFail( l1c_sim_mode_enum local_sim_mode );
+void L1I_Internal_PreGetUplinkPDTCh (l1c_sim_mode_enum local_sim_mode, kal_uint32 ul_data_index);
+kal_bool l1_detect_paging_block_ind_hdlr(kal_uint8 *pch_data
+                                      #ifdef __GL1_GEMINI__
+                                         , module_id_enum mod_indx
+                                      #endif
+                                          );
+#ifdef __GL1_GEMINI__
+void l1a_paging_param_assign_req_handler(ilm_struct* ptr_ilm);
+#endif /* __GL1_GEMINI__ */
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+void L1I_Internal_PreGetUplinkPDTCh (PrePacketUplinkSpec *ppus, l1c_sim_mode_enum local_sim_mode);
+#endif
+bool L1I_Internal_PRAChCheckUSFFree(void);
+void L1I_Internal_MACSetReceivedUSF( TimeSlot timeSlot, intx usf, l1c_sim_mode_enum local_sim_mode);
+bool L1I_Internal_MACFrameTick( PacketTransferSpec* pts, l1c_sim_mode_enum local_sim_mode);
+
+
+#ifdef __NEW_TBF_ARCH__
+MACDownlinkParams* L1I_MACGetDownParameters( int8 index );
+MACUplinkParams* L1I_MACGetUpParameters( int8 index );
+#endif /* __NEW_TBF_ARCH__ */
+
+#ifdef __EGPRS_MODE__
+void L1I_MACSetEgprsLoopMode( bool isOn );
+#endif /*__EGPRS_MODE__*/
+
+/* --- other ticks ---------------------------------------------------------- */
+
+void L1I_PRAChBlockTick( void );
+void L1I_BCChMeasurementBlockTick( void );
+
+/* --- Decode USF for PPCH/PAGC fast decoding ------------------------------- */
+
+void L1I_PPChDecodeUSF( bool decodeUSF );
+void L1I_PAGChDecodeUSF( bool decodeUSF );
+
+/* ----- L1C Sleep Mode function ------------------------------------------- */
+
+bool L1I_CheckReportIsEmpty( void );
+bool L1I_CheckPSMResultIsEmpty( void );
+void L1I_DisableTurboSleep( void );
+void L1I_EnableTurboSleep( void );
+void L1I_DisableSleepMode( void );
+void L1I_ReEnableSleepMode( void );
+void L1SM_SW_WakeUp(void);
+kal_bool L1SM_Leave_Polling( void );
+
+/* ----- For fix allocation ------------------------------------------- */
+
+#ifdef __NEW_TBF_ARCH__
+#ifndef __REMOVE_FA__
+void L1I_MACRepeatAllocation( bool repeat, TimeSlotMask timeSlotOverrideMask, FrameNumber startFrameNumber);
+void L1I_MACResetRepeatParams( void );
+bool L1I_MACGetAllocationExhausted( void );
+#endif
+#else
+void L1I_MACRepeatAllocation( bool repeat, TimeSlotMask timeSlotOverrideMask, FrameNumber startFrameNumber);
+void L1I_MACResetRepeatParams( void );
+bool L1I_MACGetAllocationExhausted( void );
+#endif
+
+/* ----- For AMR ------------------------------------------------------------ */
+
+void       L1T_CalculateAMRQICompensated( Report* report );
+void       L1I_InitAMRQICompensated( uint8 tchMode, bool isHopping );
+void       L1T_InitAMRQICompensated(Report* report);
+
+void       L1I_StartAMR( void );
+void       L1I_StopAMR( bool applyPendingRATCCh );
+
+void       L1I_RATSCChStart( void );
+void       L1I_RATSCChStop( bool applyPendingRATCCh );
+void       L1I_RATSCChDownlink( RxData *rx );
+BlockData* L1I_RATSCChUplink( TChMode tchMode,  l1c_sim_mode_enum local_sim_mode);
+void       L1I_RATSCChAndFACCh( TChMode tchMode,  l1c_sim_mode_enum local_sim_mode );
+/*For task print out l1c/l1d information*/
+extern void L1SM_Print_FMresult(void);
+extern void L1_Task_Level_Info(void); 
+//#endif  //l1_generic_l1_core_private_h
+
+/* ----- For smart paging--------------------------------------------------------- */
+#ifdef __SMART_PAGING_IN_IDLE__
+bool L1I_QuerySmartPaging(l1c_sim_mode_enum);
+#endif /*__SMART_PAGING_IN_IDLE__*/
+
+
+/* ----- For SIM MODE--------------------------------------------------------- */
+//extern l1c_sim_mode_enum l1c_sim_mode;
+
+#ifdef  __GL1_GEMINI__ 
+void L1T_SetSimMode(l1c_sim_mode_enum mode, sim_mode_from_enum from);
+void L1I_SetSimMode(l1c_sim_mode_enum mode, sim_mode_from_enum from);
+l1c_sim_mode_enum L1I_RestoreTaskSimMode(sim_mode_from_enum from);
+
+void L1I_SaveHisrSimMode(void);
+l1c_sim_mode_enum L1I_RestoreHisrSimMode(void);
+
+#define IS_SIM1               (l1c_sim_mode == L1C_SIM1)
+#define IS_NOT_SIM1           (l1c_sim_mode != L1C_SIM1)
+#define GET_RP_TYPE(type)       (ReportType)(type + l1c_sim_mode * REPORT_SIM_SIZE)
+#define GET_LOCAL_RP_TYPE(type,sim_index)       (ReportType)((type) + (sim_index) * REPORT_SIM_SIZE)
+#define GEN_MEAS_PRIORITY(_priority)      ((MeasurementPriority)(_priority + l1c_sim_mode))
+#ifdef __GL1_GEMINI_WCDMA__
+/* LTG will also use this macro. Since L1C_MM_SIM_NUM is always one in LTG, the assert is still available. */
+/* Rick: Cast L1C_MM_SIM_NUM to l1c_sim_mode_enum to fix build warning. 
+Remember that L1C_MM_SIM_NUM will never be larger than L1C_SIM_NUM */
+#define SIM_MODE_ASSERT_REBOOT(mode)  L1C_ASSERT_Reboot( mode < (l1c_sim_mode_enum)L1C_MM_SIM_NUM )
+#else
+#define SIM_MODE_ASSERT_REBOOT(mode)  L1C_ASSERT_Reboot(l1c_sim_mode == mode)
+#endif /*__GL1_GEMINI_WCDMA__*/
+
+#else  /*__GL1_GEMINI__*/
+#define IS_SIM1               (true)
+#define IS_NOT_SIM1           (false)
+#define GET_RP_TYPE(type)  (type)
+#define GET_LOCAL_RP_TYPE(type,sim_index)       (type)
+#define GEN_MEAS_PRIORITY(_priority)      (_priority)
+#define SIM_MODE_ASSERT_REBOOT(mode)
+#endif  /*__GL1_GEMINI__*/
+
+#define CHK_REPORT_TYPE(_rp_type)     (_rp_type & REPORT_TYPE_MASK)
+
+/*  ------ Suspend notification in Gemini for AGPS  ----- */
+#if ( defined( __L1_GPS_AUTO_TIMING_SYNC_SUPPORT__  ) || defined( __L1_GPS_REF_TIME_SUPPORT__  ) )
+void L1I_InternalGpsSuspendNotify( void );
+Timer* L1I_agpsFindTimer( void );
+#endif
+
+/* ----- GEMINI2.0----------------------------------------------------- */
+#ifdef __GL1_GEMINI__
+#define V_MASK(mode)             (SurroundMode)(mode & (L1SCModeVirtual-1) )
+#define IS_VMODE(mode)           ( (mode & L1SCModeVirtual)? (true): (false) )
+#define PROTECT_STR(timer)       ( L1I_TimerIsProtected(timer) )
+#else
+#define V_MASK(mode)             mode
+#define IS_VMODE(mode)           ( false )
+#define PROTECT_STR(timer)       ( 2 )
+#endif
+
+#if defined( __GL1_GEMINI__) && defined(__BSIC_SEARCH_IN_PEER_IDLE_FRAME__)
+#define SET_TIMER_RDRBN_INDEX(_timer_ptr, _idx)   {(_timer_ptr)->rdrbn_index = _idx;}
+#else
+#define SET_TIMER_RDRBN_INDEX(_timer_ptr, _idx)
+#endif
+
+/* Constant */
+#ifdef __GL1_GEMINI__
+#define PROTECT_NONE_STATE   0xFF
+#endif
+
+/* ----- For GEMINI1.2 -------------------------------------------------------- */
+#ifdef __GL1_GEMINI__
+/*General: pass fn from function paramter*/
+#define SET_SIM2_FN_FOR_RX(fn, num)  \
+{\
+   if (IS_NOT_SIM1)\
+   {\
+      L1D_SetSIM2FrameNumber_ForRx((uint8)l1c_sim_mode, fn, num);\
+   }\
+}
+/*Get currunt time*/
+#define SET_SIM2_CURRENT_FN_FOR_RX(num)  \
+{\
+   if (IS_NOT_SIM1)\
+   {\
+      L1D_SetSIM2FrameNumber_ForRx((uint8)l1c_sim_mode, L1I_GetFN(l1c_sim_mode), num);\
+   }\
+}
+/*Get currunt time*/
+#define SET_SIM2_CURRENT_FN_FOR_TX(num)  \
+{\
+   if (IS_NOT_SIM1)\
+   {\
+      L1D_SetSIM2FrameNumber_ForTx((uint8)l1c_sim_mode, L1I_GetFN(l1c_sim_mode), num);\
+   }\
+}
+#else /*__GL1_GEMINI__*/
+#define SET_SIM2_FN_FOR_RX(fn, num)
+#define SET_SIM2_CURRENT_FN_FOR_RX(num)
+#define SET_SIM2_CURRENT_FN_FOR_TX(num)
+#endif /*__GL1_GEMINI__*/
+
+
+#ifdef __GL1_GEMINI__
+/*SIM1 may also be adjusted.*/
+#define L1I_ADJUST_TIMING_ERR(timer, rp)\
+{\
+   L1I_AdjustTimingError(timer, rp);\
+}
+#else
+#define L1I_ADJUST_TIMING_ERR(t, r)
+#endif
+
+#if defined (__GL1_GEMINI__) && defined(__WEIGHTING_ROUND_ROBIN__)
+#define L1I_SET_HW_EXECUTE(_flag)  L1I_SetHwExecute(_flag)
+#else
+#define L1I_SET_HW_EXECUTE(_flag)
+#endif
+extern uint16 L1D_Get_MinTqWrap();
+void L1I_L1D_PDTCh( Report *report, bool ccReset, bool egprs );
+void L1I_L1D_PTCChDown( Report *report, intx subBlock, TimeSlot timeSlotPosition );
+void L1I_L1D_PTCChUp( Power txPower, TimeSlot timeSlotPosition );
+void L1I_L1D_Interference( Report *report, ARFCN arfcn );
+void L1I_L1D_SDCChDown( Report *report );
+void L1I_L1D_SDCChUp( bool handover );
+void L1I_L1D_SACChCDown( Report *report );
+void L1I_L1D_SACChCUp( bool handover );
+void L1I_L1D_DChAB( bool isTCh );
+void L1I_L1D_TCh( Report *report, intx flags, HandoverState handover_state );
+void L1I_L1D_SACChT( Report *report, intx subBlock, bool handover );
+#ifdef __L1_CB__
+void L1I_L1D_BCCh( Report *report, ARFCN arfcn, BSIC bsic );
+#endif
+void L1I_L1D_PCh( Report *report, ARFCN arfcn, BSIC bsic );
+void L1I_L1D_CBCh( Report *report );
+void L1I_L1D_NBCCh( Report *report, ARFCN arfcn, BSIC bsic, AfcParams *afcParams );
+void L1I_L1D_PBCCh( Report *report, bool decodeUSF );
+void L1I_L1D_NPBCCh( Report *report, FrameNumber frameNumber );
+void L1I_L1D_PPCh( Report *report, bool decodeUSF );
+void L1I_L1D_PAGCh( Report *report, HoppingSequence *hoppingSequence, TSC tsc, TimeSlot timeSlotPosition, bool decodeUSF );
+void L1I_L1D_PACChDown( Report *report, HoppingSequence *hoppingSequence, TSC tsc );
+#if IS_GSM_INCREASE_RACH_TX_POWER_SUPPORT
+void L1I_L1D_RACh( ARFCN arfcn, BSIC bsic, Power txPower, RAChData rachData, intx burstLength, TSC tsc, int8 rachTxCount );
+#else
+void L1I_L1D_RACh( ARFCN arfcn, BSIC bsic, Power txPower, RAChData rachData, intx burstLength, TSC tsc );
+#endif
+void L1I_L1D_PRACh( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, TimeSlot timeSlotPosition, Power txPower, RAChData rachData, intx burstLength, TSC tsc );
+void L1I_L1D_PollResp( HoppingSequence *hoppingSequence, BSIC bsicOrTSC, Power txPower, TimingAdvance timingAdvance, BlockData *blockData, int burstLength );
+
+void L1I_L1D_FCChT(void);
+void L1I_L1D_SChT( Report *report, ARFCN arfcn, intx ebitPosition, AfcParams *afcParams );
+
+#ifdef __GL1_MULTI_MODE__
+void L1I_L1D_FCCh_DM( Report *report, ARFCN arfcn, int32 len_ebit, AfcParams *afcParams, int16 repeat_cnt );
+void L1I_2GCheckReport (Report* report);
+void L1I_FCChWinOffStart( uint8 frames );
+#endif /* __GL1_MULTI_MODE__ */
+
+extern void L1I_L1D_SCDedicateModeStart( void );
+extern void L1I_L1D_SCDedicateModeEnd( void );
+extern void L1I_L1D_SCAccessModeStart( void );
+extern void L1I_L1D_SCAccessModeEnd( void );
+extern void L1I_L1D_PM_ConsumePMQueue( void );
+extern void L1I_L1D_DChStopHandoverASAP( void );
+
+#if 0
+/* under construction !*/
+#ifndef __L1_TIMING_DEBUG__
+/* under construction !*/
+#endif
+#ifndef __LEVEL3_DEBUG__
+/* under construction !*/
+#endif
+/* under construction !*/
+#ifdef __L1_TIMING_DEBUG__
+/* under construction !*/
+#endif
+#endif
+
+#if (defined(__L1_TIMING_DEBUG__) && defined(__LEVEL1_DEBUG__))
+#define L1_TimingDebug_Level1(_id)   L1_TimingDebug(_id)
+#define L1_TimingDebug_Level2(_id)
+#define L1_TimingDebug_Level3(_id)
+#elif (defined(__L1_TIMING_DEBUG__) && defined(__LEVEL2_DEBUG__))
+#define L1_TimingDebug_Level1(_id)   L1_TimingDebug(_id)
+#define L1_TimingDebug_Level2(_id)   L1_TimingDebug(_id)
+#define L1_TimingDebug_Level3(_id)
+#elif (defined(__L1_TIMING_DEBUG__) && defined(__LEVEL3_DEBUG__))
+#define L1_TimingDebug_Level1(_id)   L1_TimingDebug(_id)
+#define L1_TimingDebug_Level2(_id)   L1_TimingDebug(_id)
+#define L1_TimingDebug_Level3(_id)   L1_TimingDebug(_id)
+#else
+#define L1_TimingDebug_Level1(_id)
+#define L1_TimingDebug_Level2(_id)
+#define L1_TimingDebug_Level3(_id)
+#endif
+
+#ifdef __2G_TX_VOLTAGE_COMPENSATION_SUPPORT__
+/* Tx-Volt compensation.*/
+void L1I_TriggerTxComp(void);
+void L1T_TxCompRequestGetPeriodTrigger(bool request);
+bool L1T_IsTxCompRequested(void);
+#endif
+
+/*HW CLK/MIPI CLK switch support*/
+#if IS_2G_DYNAMIC_HW_CLOCK_SUPPORT
+
+typedef enum{
+   MIPINeighbourARFCN = 0,
+   MIPIBcchARFCN,
+   MIPIHoppingARFCN
+}mipi_arfcn_source;
+
+void L1T_UpdateMIPIClkTable(ARFCN* ARFCNList, intx arfcnCount, mipi_arfcn_source source);
+
+void L1T_HWClockSpecificSyncFlag( kal_bool syncFlag );
+
+void L1T_InformDynHWClkOff( void );
+
+#endif  /* end of IS_2G_DYNAMIC_HW_CLOCK_SUPPORT */
+
+/* For channel lock and unlock mechanism */
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) 
+#define MAX_2G_USECOUNT 5
+void L1I_ChannelsUnlock( void );
+void L1I_ChannelDelayUnlock( void );
+void L1I_ChannelsLock( void );
+void L1I_SetClearTXHW( uint8 FrameNumber );
+void L1I_SetClearRXHW( uint8 FrameNumber );
+intx L1I_GetRTBPriority ( TimerType Channel_Type, intx ChannelPriority);
+bool L1I_IsGapStopTimer_all_Started ( void );
+#endif /* defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ ) */
+
+#define QUERY_CURRENT_UMTS_RAT
+#define CURRENT_UMTS_RAT_IS_TDD(sim_mode) MMRF_UBIN_isTdscdmaModeActivated(sim_mode)
+#define CURRENT_UMTS_RAT_IS_FDD(sim_mode) MMRF_UBIN_isWcdmaModeActivated(sim_mode)
+
+#ifdef __MTK_TARGET__
+#ifndef __L1_STANDALONE__
+void l1a_send_em_rf_test_gsm_rx_test_ind( Report *report );
+void l1a_get_current_tx_ant_handler( ilm_struct *ptr_ilm );
+   #if IS_2G_RXD_SUPPORT
+   void l1a_send_em_rf_test_gsm_rx_test_two_path_ind( Report *report );
+   #endif
+#if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void l1a_em_update_req_handler( ilm_struct* ptr_ilm );
+void L1T_TAS_SendCurrentAntMsg( l1c_sim_mode_enum local_sim_mode );
+#if IS_2G_TAS_SUPPORT
+kal_uint8 L1T_TAS_Get_Current_Ant( l1c_sim_mode_enum local_sim_mode );
+void L1T_TAS_SetMonitorAntChangeFlag(l1c_sim_mode_enum local_sim_mode, kal_bool monitor_ant_flag);
+#endif
+#if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+kal_uint8 L1T_UTAS_Get_Current_Tx_Ant( l1c_sim_mode_enum local_sim_mode );
+void L1T_UTAS_SetMonitorAntChangeFlag(l1c_sim_mode_enum local_sim_mode, kal_bool monitor_ant_flag);
+#endif
+#endif /* IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT */
+void l1a_get_rf_temperature_req_handler ( ilm_struct* ptr_ilm );
+#endif /*__L1_STANDALONE__*/
+#endif /*__MTK_TARGET__*/
+
+bool L1I_IsBCChStopInQueue( void );
+
+#if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1T_SetPowerScanAntenna( bool isReset );
+void L1T_SetTASTxPowerDecrementTable( bool valid, uint8 tx_reduction_table[4][2][4], uint8 tx_reduction_table_tas[4][2][4] );
+void L1I_CheckTASEnableInfo( ARFCN arfcn );
+void L1T_KeepPowerScanAntenna( void );
+void L1I_TASInformC0Dominate( bool dominate );
+void L1T_TASDisable( void );
+void L1I_ChangeAntennaStatus( void );
+
+#if IS_2G_TAS_INHERIT_4G_ANT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1T_QueryForLTEAntennaInherit( bool isISR );
+void L1T_IsSRVCCHandInfoUpdate( bool value, l1c_sim_mode_enum local_sim_mode );
+#endif /* Endof IS_2G_TAS_INHERIT_4G_ANT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 ) */
+
+/*****************************************************************/
+#if IS_2G_TAS_SUPPORT || IS_2G_RXD_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+int8 L1T_GetPChTid( void );
+int8 L1T_GetAGChTid( void );
+#endif /* IS_2G_TAS_SUPPORT || IS_2G_RXD_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT */
+/*****************************************************************/
+/*****************************************************************/
+#if IS_2G_TAS_ANT_IDX_FOR_PM_WINDOW_SUPPORT
+extern void L1I_SelectBestAntennaForScan(Measurements* meas);
+extern void L1I_ChangeAntennaStatusDuringScan(l1c_sim_mode_enum local_sim_mode);
+extern int32 L1T_QueryMaxSupportAnt( void );
+#endif
+
+/*****************************************************************/
+#if defined(__MTK_TARGET__) && !defined(__L1_STANDALONE__)
+
+#define EM_BACKUP_RXLEVEL_DEFAULT_VALUE -116
+#define EM_BACKUP_SNR_DEFAULT_VALUE 32
+
+/* Engineering Mode */
+typedef enum 
+{
+   /* Bit-map format */
+   TAS_EM_SOURCE_NONE = 0x0,
+   TAS_EM_SOURCE_AP   = 0x1,  /* AP side EM mode */ 
+   TAS_EM_SOURCE_TOOL = 0x2,  /* Catcher or ELT  */
+   TAS_EM_SOURCE_BOTH = 0x3   /* Both AP and Tool*/
+}tas_em_source_enum;
+
+void L1I_UpdateMaxTxpReductionInfo(bool);
+extern void L1T_TAS_SendMsg( void );
+tas_em_source_enum L1T_Get_EM_Source( void );
+void L1T_Set_EM_Source( tas_em_source_enum src );
+#if IS_2G_TAS_SUPPORT
+void L1T_Get_TAS_Info( em_gsm_tas_info_ind_struct* em_info );
+#endif
+
+bool L1T_Need_Send_Report( void );
+#if GL1_EM_IDLE_MODE_INFO_SUPPORT
+void L1T_Idle_Mode_SendEMInfo(void);
+#endif
+
+#endif /*defined(__MTK_TARGET__) && !defined(__L1_STANDALONE__)*/
+#endif /*IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )*/
+
+#if IS_2G_TAS_SUPPORT
+void L1T_InitTASParameters( void );
+void L1T_ResetTASInternalParameters( bool isAntennaChange );
+void L1T_DecreaseTASCountDown(void);
+void L1I_TASInformTXPower( Power power );
+void L1T_TASInformRXLevel( Power power );
+void L1T_CheckTASCriterion( Report* report );
+void L1T_ForceAntInfoUpdate( void );
+#endif /* IS_2G_TAS_SUPPORT */
+
+
+#if defined(__MD93__)
+#if IS_2G_RXD_SUPPORT
+AntennaStatus L1I_QueryAntennaStatus( FrequencyBand band, l1c_sim_mode_enum local_sim_mode, uint8 *rxd_mode);
+#elif IS_2G_TAS_SUPPORT
+AntennaStatus L1I_QueryAntennaStatus( FrequencyBand band, l1c_sim_mode_enum local_sim_mode);
+#endif /*IS_2G_RXD_SUPPORT*/
+#endif /* !__MD95__ */
+
+#if IS_GSM_EM_TX_POWER_CONTROL_SUPPORT
+
+void L1T_SetGsmTxPower( kal_bool* flag, kal_int8* mode);
+void L1T_GetCurrentPowerCtrlInfo(kal_int8* CurrentPCL, kal_uint8* band, kal_int16* apc_dac, kal_uint8* mod_type);
+void L1T_InitForcePclData(void);
+FrequencyBand L1T_GetServingBandInfo(void);
+FrequencyBand L1T_GetUserBandInfo(void);
+PowerControlLevel L1T_GetUserPCLInfo(void);
+void l1a_gsm_em_tx_power_ctrl_req_handler( ilm_struct *ptr_ilm );
+void L1T_SetServingBandInfo(FrequencyBand Band);
+void L1T_SetCurrentGSMKPower(Power MaxPower);
+void L1T_SetCurrentEPSKPower(Power MaxPower);
+extern short L1D_RF_UpdateTxInfo( short sc_mode, int rf_band, short power_dbm, short *mod_type);
+extern int L1D_RF_UpdateTXBackoffInfo( void);
+
+#endif
+#ifdef __EM_MAX_TX_POWER_SUPPORT__
+void L1T_UpdateMaxTxDACValue( FrequencyBand band, kal_uint16 dac_value );
+kal_uint16 L1I_RequestMaxTxDACValue( FrequencyBand band );
+void L1T_InitMaxTxDACValue(void);
+#endif
+
+/* move L1C to normal domain begin */
+//define SISR code number
+#if (CUR_GEN >= MD_GEN95)
+#define GL1C_CT1_NORMAL_DOMAIN_LISR_CODE IRQ_SW_LISR17_CODE  /* id 166 for Gen 95 */
+#else
+#define GL1C_CT1_NORMAL_DOMAIN_LISR_CODE IRQ_SW_LISR24_CODE  /* id 166 for Gen 92 and 93 */
+#endif
+
+#define GL1C_H2N_BUF_SIZE 2
+
+//#define GL1C_IS_NORMAL_DOMAIN  ((kal_get_current_vpe_id()%2)==0)
+//#define GL1C_IS_HRT_DOMAIN      ((kal_get_current_vpe_id()%2)==1)
+
+#define GL1C_IS_NORMAL_DOMAIN  (kal_get_current_domain()==KAL_DOMAIN_NORMAL)
+#define GL1C_IS_HRT_DOMAIN     (kal_get_current_domain()==KAL_DOMAIN_HRT)
+
+//#define FRC_WRAP_CHECK(f) ( (f)<0? (f)+USCNT_WRAP : (f) )
+
+#define GL1C_RB_SIZE(rb)          ( sizeof((rb).buf)/sizeof(*((rb).buf)) )
+#define GL1C_RB_INIT(rb)          ( (rb).write = (rb).read = 0 )
+#define GL1C_RB_EMPTY(rb)         ( (rb).write == (rb).read )
+#define GL1C_RB_FULL(rb)          ( ((rb).write - (rb).read) >= GL1C_RB_SIZE((rb)))
+#define GL1C_RB_MASK(rb)          ( GL1C_RB_SIZE((rb)) - 1 )
+#define GL1C_RB_CNT(rb)           ( (rb).write - (rb).read )
+#define GL1C_GET_READ_BUF(rb, buf)                              \
+{                                                               \
+   L1C_ASSERT_Reboot( !GL1C_RB_EMPTY(rb) );                     \
+   buf = &((rb).buf[(rb).read & GL1C_RB_MASK((rb))]);           \
+}
+#define GL1C_GET_WRITE_BUF(rb, buf)                            \
+{                                                              \
+   L1C_ASSERT_Reboot( !GL1C_RB_FULL(rb) );                     \
+   buf = &((rb).buf[(rb).write & GL1C_RB_MASK((rb))]);         \
+}
+
+/* main func for L1C sisr */
+void L1I_SISR_normal_domain( kal_uint32 irq_id );
+
+/* func for SISR to handle queue function from ct1 */
+void L1I_StopPchExtTimer(l1c_sim_mode_enum sim_mode);
+kal_bool L1I_h_ignore_timertype(TimerType type, l1c_sim_mode_enum sim_mode);
+Timer* L1I_h_GetNextValidTimer(int32 *ebitDelay );
+kal_bool L1I_h_check_sisr_sleep_condition(void);
+/* move L1C to normal domain end */
+
+/* Deepti start */
+extern kal_bool L1I_CheckHRTFailure( void );
+/* Deepti end */
+
+#define FCCH_INTERVAL_FRAME_NUM        ( 18 )
+kal_bool L1I_Query_OtherRat_Active(void);
+
+void L1I_Send_TxPower_To_SM(Power txpower);
+
+#if defined(__MD97__) && defined( __MTK_TARGET__ )
+#define MAX_EFUSE_RAND 10
+extern void l1a_mode_utility_gemini_feature_start_random_timer( void );
+#endif
+
+#endif  //l1_generic_l1_core_private_h
diff --git a/mcu/l1/interface/gl1/l1_dm.h b/mcu/l1/interface/gl1/l1_dm.h
new file mode 100644
index 0000000..c3cf840
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_dm.h
@@ -0,0 +1,1366 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   l1_dm.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is for the dual mode operation.
+ *
+ * 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!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * 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 L1_DM_H
+#define L1_DM_H
+
+#include "l1_surround_private.h"
+#include "common_reg.h"
+#include "l1d_data_l1core.h"
+#include "l1d_cid.h"
+#include "l1_types.h"
+#include "l1_core_private.h"
+#include "mph_types.h"
+#include "tool.h"
+#include "kal_general_types.h"
+#include "mll1_gsm.h"
+#include "gmss_public.h"
+
+/****************************** enum begin ************************************/
+typedef enum
+{
+   UMTS_FDD_IDLE,
+   UMTS_FDD_FACH,
+   UMTS_FDD_EFACH_DRX,
+   UMTS_FDD_DCH,
+   UMTS_TDD_IDLE,
+   UMTS_TDD_FACH,
+   UMTS_TDD_DCH,
+   UMTS_C2K_IDLE,
+   LTE_IDLE,   
+   LTE_DCH,
+   LTE_DCH_DRX,
+   GSM_IDLE,
+   GSM_DCH,
+   NEWRADIO_IDLE,
+   NEWRADIO_DCH,
+   MM_NULL
+} mm_mode_enum;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/****************************** enum end **************************************/
+
+
+
+/****************************** define begin ************************************/
+#define  L1C_AG_AHEAD_FRAME 9
+#define  L1C_AG_LENGTH_EBIT 173333  /* 80ms for 2G active */
+#define  L1C_AG_NOT_CNF_LENGTH   (-1)  //
+
+
+#define  L1C_NORMAL_GAP_SERVICE  (0x1)
+#define  L1C_AUTO_GAP_SERVICE    (0x2)
+#define  L1C_GAP_STOP_TIME 3 
+
+#define GL1_GAP_NUM_IN_PERIOD GSM_SESSION_IN_PERIOD
+
+/* define database switch macros for 2G standby */
+#ifdef  __GERAN_R8__ 
+#define SIM_REG_BA_OFFSET                        ( L1C_SIM1 )  //0
+#define SIM_PRIO_BA_OFFSET                       ( L1C_SIM_NUM )  //L1C_SIM_NUM
+#define SWITCH_TO_PRIO_RESEL_STANDBY()           ( l1c_sim_prio_ba_offset = SIM_PRIO_BA_OFFSET )   /* be called only when the sim is in standby mode */
+#define SWITCH_TO_REG_RESEL_STANDBY()            ( l1c_sim_prio_ba_offset = SIM_REG_BA_OFFSET )
+#define SWITCH_TO_ASSIGNED_RESEL_STANDBY( mode ) ( l1c_sim_prio_ba_offset = (( mode == REG_RESEL_STANDBY )? SIM_REG_BA_OFFSET : SIM_PRIO_BA_OFFSET ) )
+#define L1C_RESEL_MODE_STANDBY                   ( (l1c_sim_prio_ba_offset == SIM_REG_BA_OFFSET)? REG_RESEL_STANDBY : PRIO_RESEL_STANDBY )
+#define IS_PRIO_RESEL_MODE_STANDBY               ( l1c_sim_prio_ba_offset == SIM_PRIO_BA_OFFSET )
+#define IS_REG_RESEL_MODE_STANDBY                ( l1c_sim_prio_ba_offset == SIM_REG_BA_OFFSET )
+#else
+#define L1C_RESEL_MODE_STANDBY                   ( REG_RESEL_STANDBY )
+#endif  /* __GERAN_R8__ */
+
+/* define L1C MM mode macros for 2G standby */
+#define L1C_IS_CONNECTED_STANDBY(mode)           ( mode == UMTS_FDD_FACH || mode == UMTS_TDD_FACH || mode == UMTS_FDD_DCH || mode == UMTS_TDD_DCH || mode == LTE_DCH )
+#define L1C_IS_IDLE_STANDBY(mode)                ( mode == UMTS_FDD_IDLE || mode == UMTS_TDD_IDLE || mode == UMTS_C2K_IDLE || mode == LTE_IDLE || mode == NEWRADIO_IDLE )
+#define L1C_IS_IDLE_OR_CON_DRX_STANDBY(mode)     ( mode == UMTS_FDD_IDLE || mode == UMTS_TDD_IDLE || mode == UMTS_FDD_EFACH_DRX || mode == UMTS_C2K_IDLE || mode == LTE_IDLE || mode == LTE_DCH_DRX || mode == NEWRADIO_IDLE )   
+
+/* this macro must be used in 2g standby */
+#define L1C_IS_UTRAN_TDD_MODE_STANDBY(mode)      ( mode == UMTS_TDD_FACH || mode == UMTS_TDD_DCH || mode == UMTS_TDD_IDLE )
+#define L1C_IS_UTRAN_TDD_MODE_CONNECTED_STANDBY(mode) 	 ( mode == UMTS_TDD_FACH || mode == UMTS_TDD_DCH )
+
+
+#define GL1_CHECK_BIT(a, mask) ( ((a)&(mask)) != 0 )
+#define GL1_SET_BIT(a, mask)   ( (a) |= (mask) )
+#define GL1_CLEAR_BIT(a, mask) ( (a) &= ~(mask) )
+
+
+
+#define DEFAULT_PM_PASS_PER_PERIOD_IDLE 1
+#define DEFAULT_PM_PASS_PER_PERIOD_EFACH_DRX 1
+#define DEFAULT_PM_PASS_PER_PERIOD_DCH_FACH 3
+#define DEFAULT_PM_PASS_PER_PERIOD_LTE_CONNECTED_DRX 1
+#define MAX_TRIES_FB_PLMN_2G_STANDBY         2
+#define MIN_3G_GAP_FRAME 8  /* 2 blocks, to avoid PCh norm/ext case. */
+#define RF_ADDITIONAL_MARGIN_FOR_SB_HEAD_EBITS (TQ_SBWIN_DSP_EXTEND1 * 2)
+#define RF_ADDITIONAL_MARGIN_FOR_SB_TAIL_EBITS (TQ_SBWIN_DSP_EXTEND2 * 2)
+#define FB_MAX_WINDOW_SLOTS (12*8+3)
+#define FB_MAX_SEARCH_TOTAL_SLOTS (FB_MAX_WINDOW_SLOTS*8)  /* use to stop FB search if UMTS_IDLE gap < FB_MAX_WINDOW_SLOTS */
+#define FRAME_IN_EBITS 10000
+#define SLOT_IN_EBITS  1250
+#define FB_MIN_WINDOW_EBITS 2176   //TDD gap use
+#define FB_MIN_WINDOW_SLOTS 3 //FDD/LTE gap use
+
+#ifdef __UMTS_RAT__  // TDD needs 106, FDD needs 36
+#define L1_MAX_GAP_HANDLER 106
+#endif
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+#ifdef __UMTS_RAT__
+#define TD_SUBFRAME_TO_EBIT 10833  //10840
+#define TD_SLOT_TO_EBIT 1462
+#define LONG_GAP_LEN_FACH_DCH 10000 //10000
+#define MIN_SB_DELAY_ALLOW_FB_SEARCH  32502  /* # of ebit for 15ms */
+#define DEFALT_BSIC_RECONFIRM_TIME               5000  /* in unit of ms */
+#define DEFALT_BSIC_SEARCH_ABORT_TIME        (DEFALT_BSIC_RECONFIRM_TIME*10/46)  /* in unit of TDMA frames */
+#endif
+
+#ifdef __GL1_GEMINI__
+#if defined( __GL1_GEMINI_WCDMA__ ) || defined( __GEMINI__ ) || defined( __CDMA2000_RAT__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+#define STANDBY_MEAS_LENGTH_ACTIVE_IDLE 2 //unit: frame
+#endif
+#endif
+
+#define SRVCC_USE_CGI_AUTO_GAPS 1
+
+#if (SRVCC_USE_CGI_AUTO_GAPS)
+#define SRVCC_BOOST_IN_QDBM  1
+#define SRVCC_MAX_BOOST_RANGE_IN_QDBM   12
+#define MAX_SRVCC_BSIC_ATTEMPTS 2
+#endif
+/****************************** define end **************************************/
+
+
+/****************************** struct begin ************************************/
+typedef struct Gap_Handler Gap_Handler;
+
+struct Gap_Handler
+{
+   Time                start_time;
+   bool                pm_period_start;
+   gsm_tgmp_enum       purpose;
+   kal_uint16          gap_num;
+   sGAP                gap[GL1_MAX_GAP_NUM_IN_ONE_FRAME];
+   kal_bool            gap_reschedule;
+   Gap_Handler*        prev;
+   Gap_Handler*        next;
+};
+
+typedef struct
+{
+   Gap_Handler     GAPPool[L1_MAX_GAP_HANDLER];
+   Gap_Handler*    unusedGAPs[L1_MAX_GAP_HANDLER];
+   Gap_Handler*    usedGAPs[L1_MAX_GAP_HANDLER];     
+   Gap_Handler*    running_gap;
+   Gap_Handler*    gapTimer_gap;
+   Gap_Handler*    bsic_gap;
+   kal_uint32      t_reconfirm; /* In unit of TDMA frames(4.6ms). used for fach/dch/lte connected */
+   kal_uint32      t_identify;  /* In unit of TDMA frames(4.6ms). used for fach/dch/lte connected*/
+   kal_uint32      bsic_reconfirm_para; /* In unit of msec. Used in FACH/DCH mode. */
+   Time            next_session_start_after;  //for FB gap in the end of period, the first session in the next session must >= this time
+   uint16          fb_search_cnt_down;
+   kal_uint8       unusedGAPCount;
+   kal_uint8       usedGAPCount;
+#ifdef __LTE_RAT__
+   kal_uint8       tds_lte_left_gap_idx;  //use for lte left pattern calculation
+#endif /*__LTE_RAT__*/
+} GapGlobal;
+
+typedef struct
+{
+   mm_mode_enum          mode;
+   Timer                 activeRATTimer;
+   Timer                 standbyRATTimer;  
+   /* 3G active, common parameters */
+   kal_bool              pm_meas_started;  
+   intx                  pm_cell_num[ NUM_RESEL_MODE_STANDBY ];    
+   kal_bool              lock_sm;  
+   bool                  Dedi3G;
+   kal_uint8             GAPStatus;  //bit0: normal gap, bit1: auto gap
+   kal_bool              gap_suspended;  // fmo_lock
+   kal_uint8             wait_HW_stop_count;  /* frame countdown to wait 2G FB/SB, PM stop  */
+   bool                  umts_hspa;  //TDS
+
+   /* Power Scan */
+   kal_bool              power_scan_started;
+   kal_bool              tempStopPSM;
+   /* RSSI measurement */
+   kal_uint8             pm_pass_per_period; /* Default=1. */
+   kal_uint8             pm_pass_this_period[ NUM_RESEL_MODE_STANDBY ]; 
+   kal_uint8             pm_tid[ NUM_RESEL_MODE_STANDBY ];
+   kal_uint8             pm_tid_new[ NUM_RESEL_MODE_STANDBY ];
+   bool                  pm_tid_done[ NUM_RESEL_MODE_STANDBY ];
+   bool                  next_pm_start_time_valid;
+   kal_uint8             next_pm_pass_per_period;   //FDD connected
+   Time                  next_pm_start_time;  //FDD connected
+   intx                  next_pm_cell_num;  //connected
+   kal_uint8             arfcn_count_measured; //the number of arfcn that have been measured; reset when ba is changed or avg is reset
+#if 1 //def __GL1_GEMINI__
+//   Timer                 idleSuspendPM;  //used to stop measurement at the end of idle gap
+#endif
+   bool                  stopAllMeas;  //only TDS use
+   //bool                  skip_next_gap;  //TDS         /* after long fb search gap in FACH/DCH, skip next gap to prevent conflict */
+   Timer                 pmSessionTimer;  //TDS 
+
+   /* BSIC search */ 
+   Timer                 sbTimer;
+   Timer                 fbTimer;
+   Timer                 bsicSCTimer;
+   Timer                 dummyFBTimer;
+   Timer                 SRVCCGapSetTimer;
+   Timer                 SRVCCGapResetTimer;
+   bool                  resetSRVCCGapMeas;
+   bool                  first_gap_notify;
+   uint16                default_sb_window_ebits;
+   TID                   fb_tid;
+   TID                   sb_tid;
+   bool                  fb_started;    
+   bool                  sb_started;      
+   bool                  retry_sb;
+   bool                  fb_max_window;
+   kal_uint16            fb_total_search_slot;  /* used to count total FB search slot in UMTS_IDLE */
+   intx                  fb_slot_count;  //slot for FDD, ebit for TDD
+   AGCCellData           bsic_agc_cell;
+   //AfcParams*            afc;
+   /*FDD*/
+   //kal_uint8             bsic_slot;  /* For FB window. */
+   //scCellBSIC*           bsic_cell;  /* For FB or SB. */
+   //AGCCellData           cell;
+   //ARFCN                 fb_arfcn;
+   /* Gap Handler and Timing sync. */ 
+   Timer                 gapTimer;  
+   Timer                 gapStopTimer_all;  //syy
+   Timer                 gapStopTimer_suspend;  //syy: fmo lock timer
+   Timer                 syncTimer;
+   TID                   sync_tid;
+   Time                  sync_offset;
+   //Time                  sync_start_time;  
+  
+
+   /* For 2G active */
+   Timer                 search_3gTimer;
+   kal_int8              GAPreservedFrames;  /* The gap reserved frames for 3G, ex Timer_3GSearch, TimerAutoGap. Only SIM1 need to check it. */
+   intx                  search_3g_FN26;
+   kal_uint8             search_3g_state_cnt;  /* Range: 0~7. If equals 7, it will be reset to 0, and enters CM state. */
+   kal_bool              gap_schedule_started;
+   /* For 2G active/PCH, assign DRX period to 3G. */
+   bool                  rf_checked;
+   bool                  l1i_checked;
+   bool                  rf_sleep;
+   kal_uint16            l1i_sleep_frame;
+   kal_uint16            l1i_sleep_ebit;
+   bool                  umts_gap_running;
+   Time                  umts_gap_start_time;
+   kal_uint32            umts_gap_len;
+   TID                   GAPtid;
+   TID                   SuspendGaptid;
+
+   /* Measurement priority */
+   MeasurementPriority meas_priority;
+   MeasurementPriority meas_priority_cgi;
+   MeasurementPriority meas_priority_scan;
+#ifdef  __GERAN_R8__
+   MeasurementPriority meas_priority_higher;
+#endif /* __GERAN_R8__ */
+
+#ifdef  __GERAN_R8__
+   kal_bool              pm_meas_started_higher;  
+#endif /* __GERAN_R8__ */
+
+#if defined ( __GL1_GEMINI__ )
+   Timer                 restartGAPtimer; // This variable is only used when active RAT is FDD or LTE.
+#endif
+
+/* TDS */
+   bool                  LockGAP;
+#if defined (__GL1_GEMINI__)
+   bool                  isChannelLock;   //used in TD MM Gemini lock and unlock mechanism
+   /*dm_global.isChannelLock only can be set as true when TDD is active RAT, it cannot be set as true when FDD is active RAT.*/
+#endif  /* defined (__GL1_GEMINI__) */
+
+   //kal_uint8             gapPurpose;
+   kal_bool              DRX_Tick;  //2G active, for drx tick in gap pattern
+
+   Timer                 autoGaptimer;    
+   Timer                 autoGapReportTimer;  
+   kal_int32             autoGaptimerLength;  //the length L1C uses, from the time that AG can be used
+   kal_int32             autoGapLengthGive;  //the length filled in report, from ST. If there's reservation after ST, this will be longer than autoGaptimerLength
+
+   kal_bool              standbyAGConfirm;
+   kal_int8              standbyAGUseCount;
+   Time                  standbyAGStartTime;
+   kal_int32             standbyAGLength;  //-1 means not confirmed
+   Timer                 standbyAGStopTimer;  //used to wait for L1D stop to send ReportGSMAutoGAPStop
+   Timer                 standbyAGEndTimer;  //used to send reportGapEnd when reportCGI is stopped by upper layer
+#ifdef __GL1_GEMINI__
+#if defined( __GL1_GEMINI_WCDMA__ ) || defined( __GEMINI__ ) || defined( __CDMA2000_RAT__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+   Timer                 standbyMeasTimer;  // used to schedule standby measurement for standby meas
+   Timer                 standbyMeasTimerPowerScan;    // used to schedule standby measurement for manual power scan request
+#endif
+#endif
+#if defined( __GEMINI__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+   uint32                scanPeriod;
+   uint32                scanLength;
+   uint32                scanPeriod_PM;
+   uint32                scanLength_PM;
+   uint16                BSICPeriod;
+   uint8                 rdrb_for_manualscan_standbymeas;
+   bool                  backup_meas;
+   bool                  backup_scan;
+#endif
+   intx                  arfcn_start_index_copy;  //To backup the value of arfcn_start_index
+#ifdef  __GL1_GEMINI__
+   Timer                 VirtualSuspendCnfTimer;
+#endif
+} DualModeGlobal;
+
+
+
+/****************************** struct end **************************************/
+
+
+
+
+/****************************** function prototype begin ************************************/
+/* for autonomous gap, common for FDD, TDD, LTE */
+void L1T_AutoGAPStart( Time starting_time );
+void L1T_AutoGAPEnd( void );
+void L1T_GSMAutoGAPStop( void );
+void L1T_GSMAutoGAPConfirm( kal_bool, kal_int32 );
+
+void L1I_Timer_AutoGap( Timer* timer );
+void L1I_Timer_ReportAutoGap( Timer* timer );
+void L1I_MMPutAutoGAP( void );
+intx L1I_GetGSMAutoGAPLengthEbit( void );
+void L1I_Timer_GSMAutoGAPStop(Timer* timer);
+void L1I_Timer_GSMAutoGAPEnd(Timer* timer);
+void L1T_ReRequestGSMAutoGAP( void );
+void L1I_ReRequestGSMAutoGAP( void );
+
+
+/* to suspend GL1 gap usage. to replace fach/fmo lock/unlock */
+void L1T_SuspendGAP( void );
+void L1T_ResumeGAP( void );
+
+void L1T_CancelGap_Lock_2G( void );
+void L1T_CancelGap_Unlock_2G( void );
+void L1T_SetGAPPurpose_idle(kal_uint16 gap_num, ll1_gsm_standby_gap_struct *gap);
+void L1I_Start_SACCh_Timer( bool delay );
+
+void L1T_SetModeInStandby( ll1_active_rat_mode_status_enum mode );
+void L1I_Internal_StopGAP(void);
+Gap_Handler* L1I_UpdateRunningGap( l1c_mm_sim_mode_enum local_sim_mode );
+
+void L1T_GAPStatus(gl1_gap_status_enum GAPStatus);
+void L1T_StartGAPSchedule( void );
+void L1T_StopGAPSchedule (void);
+void L1T_StopGAPPattern(void);
+void L1I_NextBSIC_GAP(void);
+void L1I_Update_HP_SB_UTRAN_TDD( Gap_Handler* gap );
+void L1I_StartBSIC_GAP(Gap_Handler* gap);
+void L1I_StartFB_GAP(Gap_Handler* gap);
+void L1I_StartSB_GAP(Gap_Handler* gap);
+void L1T_StandbyRAT(void);
+void L1T_ActiveRAT(void);
+void L1T_InterRATSyncGen(void);
+void L1T_InitMM( void );
+void L1I_Set_L1D_DM_State( void );
+void L1I_Set_L1D_DM_Query_State( void );
+void L1I_Start_GAP_Timer(void);
+void L1I_Init_GAPSchedule(void); // bool priority_low );
+void L1I_Timer_SB(Timer* timer);
+void L1I_Timer_FB(Timer* timer);
+#ifdef  __GL1_GEMINI__
+void L1I_Timer_VirtualSuspendCnf(Timer* timer);
+#endif
+
+void L1D_FCCh_DM( Report *report, ARFCN arfcn, int32 gap_len_ebit, AfcParams *afcParams, int16 repeat_cnt, L1D_APIcaller_id caller );
+void L1D_SCh_DM( Report *report, ARFCN arfcn, bool retry, intx ebitPosition, AfcParams *afcParams, L1D_APIcaller_id caller );
+
+void L1T_SetGAPPattern_NR(kal_uint16 session_num, ll1_gsm_standby_gap_struct* session, ll1_active_rat_mode_status_enum mode,
+   kal_bool pm_tick, kal_uint8 pm_tid, kal_bool pm_tick_higher, kal_uint8 pm_tid_higher );
+
+#ifdef  __LTE_RAT__  
+void L1T_SetGAPPattern_LTE(kal_uint16 session_num, ll1_gsm_standby_gap_struct* session, ll1_active_rat_mode_status_enum mode,
+   kal_uint32 t_reconfirm, kal_uint32 t_identify, kal_uint16 gap_expand_period, kal_uint8 n_freq,   
+   kal_bool pm_tick, kal_uint8 pm_tid,
+   kal_bool pm_tick_higher, kal_uint8 pm_tid_higher, kal_uint8 gap_set_num );
+
+void L1T_SetGAPPurpose_LTE_connected( kal_uint16 gap_num, ll1_gsm_standby_gap_struct *gap, kal_uint32 t_reconfirm_dch, kal_uint32 t_identify_dch, kal_uint16 gap_expand_period, kal_uint8 n_freq, kal_uint8 gap_set_num );
+#endif /*__LTE_RAT__*/
+
+#ifdef __CDMA2000_RAT__
+void L1T_SetGAPPattern_C2K( kal_uint16 gap_num, ll1_gsm_standby_gap_struct* gap, ll1_active_rat_mode_status_enum mode, 
+   kal_bool pm_tick, kal_uint8 pm_tid );
+#endif
+
+#ifdef  __GERAN_R8__ 
+void L1T_SetGAPPattern_FDD( kal_uint16 gap_num, ll1_gsm_standby_gap_struct* gap, ll1_active_rat_mode_status_enum mode, 
+   kal_uint32 t_reconfirm, kal_uint32 t_identify,
+   kal_bool pm_tick, kal_uint8 pm_tid, 
+kal_bool pm_tick_higher, kal_uint8 pm_tid_higher );
+//void L1T_GAPScheduleDone( kal_uint8 tid, kal_bool priority_search );
+#else
+void L1T_SetGAPPattern_FDD( kal_uint16 gap_num, Gap_Session*gap, ll1_active_rat_mode_status_enum mode, 
+   kal_uint32 t_reconfirm, kal_uint32 t_identify,
+   kal_bool pm_tick, kal_uint8 pm_tid );
+//void L1T_StartGAPSchedule( void );
+//void L1T_GAPScheduleDone( kal_uint8 tid );
+#endif  /* __GERAN_R8__ */
+
+#if defined ( __GL1_GEMINI__ ) && defined ( __GL1_MULTI_MODE__ )
+void L1T_StopALTGAPSchedule_2( void );
+void L1T_CancelGap_Lock_2G_2( void );
+bool L1I_QueryAny2GStandbyLockSM( void );
+bool L1I_QueryAnyDedicatedFlag( void );
+#endif
+
+void L1I_Timer_GAP(Timer* timer);
+void L1I_Schedule_GapPurpose_rssi( Gap_Handler* gap, Timer* timer );
+
+
+/* L1 internal function for DM. */
+void L1I_InternalFrameTick_DM (void);
+void L1I_StartSB_Timer(scCellBSIC* cell, kal_bool retry, intx sb_ebitDelay);
+void L1I_StartFB_Timer(scCellBSIC* cell, intx ebitDelay, intx slot_count);
+intx L1I_GetNormalGapFBLength( l1c_sim_mode_enum local_sim_mode );
+scCellBSIC* check_fb_position(Gap_Handler *gap, intx* ebitDelay, intx* slot_count);
+scCellBSIC* check_sb_position(Gap_Handler *gap, intx* ebitDelay);
+scCellBSIC* check_hp_sb_position(Gap_Handler *gap, intx* ebitDelay, bool* retry_sb, kal_uint16* sb_pos);
+void L1_Prepare_HP_SB_Data( SChData* p );
+kal_uint16 ebit_2_slot(intx ebit);
+void L1T_SetGAPPurpose_fach( kal_uint16 gap_num, ll1_gsm_standby_gap_struct *gap, kal_uint32 t_reconfirm_fach, kal_uint32 t_identify_fach);
+void L1T_SetGAPPurpose_dch( gsm_tgmp_enum change_purpose, kal_uint16 gap_num, ll1_gsm_standby_gap_struct *gap, kal_uint32 t_reconfirm_dch, kal_uint32 t_identify_dch);
+
+
+intx L1I_GetNext_SB_Position( Time servTime, int32 frameOffset, intx ebitOffset, intx gap_delay  );
+kal_bool check_bcch_gap_coincide(intx timer_schedule_delay, intx gap_len, intx bcch_ebitDelay);
+kal_bool check_sb_gap_coincide(intx gap_len, intx sb_ebitDelay);
+kal_uint8 check_hp_sb_gap_coincide(intx gap_ebitDelay, intx len, intx sb_ebitDelay, kal_bool retry);
+bool check_hp_sb_end(kal_uint16 hp_sb_pos);
+
+
+//void L1I_Start_GAP_Timer(void);
+#ifdef __GL1_GEMINI__
+#if defined( __GL1_GEMINI_WCDMA__ ) || defined( __GEMINI__ ) || defined( __CDMA2000_RAT__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+void L1I_Timer_StandbyMeas( Timer* timer );
+void L1I_Timer_StandbyPowerScan (Timer* timer );
+bool L1I_IsNeedToDoStandbyMeas( void );
+void L1I_StartStandbyMeasTimer( void );
+#endif
+#endif
+#ifdef __GL1_GEMINI_WCDMA__
+void L1I_SetStandbyPwrScanPriority( bool is_PLMNList );
+#endif
+void L1I_Timer_Search_3g(Timer* timer);
+void L1I_Timer_BSICSC(Timer* timer);
+void L1I_Timer_DUMMYFB(Timer* timer);
+void L1I_Timer_SRVCCGapSet(Timer* timer);
+void L1I_Timer_SRVCCGapReset(Timer* timer);
+void L1I_BackupARFCNIndex(void);
+void L1I_RestoreARFCNIndex(void);
+
+void L1I_TimerStandby( Timer* timer );
+void L1T_Next_BSICSC(void);
+void L1T_StartStandby_Timer( void );
+void L1I_Timer_IRATSync(Timer* timer);
+void L1I_Timer_ActiveRAT(Timer* timer);
+
+void L1T_Search_3g_Start(void);
+void L1T_DM_SetMode( SurroundMode newMode );
+void L1T_DM_Set_search_3g_FN26(kal_uint8 search_3g_FN26);
+
+//void L1T_Init_GAPSchedule(void); // bool priority_low );
+void L1I_Init_3G_GAP_SimMode( l1c_mm_sim_mode_enum local_sim_mode );
+void L1I_Check_3G_GAP( l1c_mm_sim_mode_enum local_sim_mode );
+
+#ifdef MTK_SLEEP_ENABLE
+bool L1I_Assign_3G_GAP( kal_uint16 l1i_sleep_frame );
+#else
+bool L1I_Assign_3G_GAP(void);
+#endif
+
+bool L1I_Check_3G_GAP_From_Timer(int32 ebitDelay);
+void L1I_gsm_gap_cancel_req(void);
+
+void L1I_ReportFCCh_DM( Report* report );
+void L1T_ReportFCCh_DM( Report* report );
+void L1I_StopSCh_DM( void);
+void L1I_StopFCCh_DM( void );
+uint8 L1I_SChStop_DM( void );
+uint8 L1I_FCChStop_DM( void );
+void L1I_AbortReservationFCCh_DM( intx busyFrames, intx busyEBits );
+//void L1D_SCh_DM( Report* report, ARFCN arfcn, bool retry, AfcParams* afcParams );
+void L1I_ReportSCh_DM( Report* report );
+void L1T_ReportSCh_DM( Report* report );
+
+void L1I_ReportSyncTime( Report* report );
+void L1T_ReportSyncTime( Report* report );
+void L1T_ReportSuspendGap( Report* report );
+void L1T_Init_Gap(void);
+void L1I_Update_Gap(Gap_Handler* gap, intx remain_gap_len);
+Gap_Handler* L1I_NewGapHandler(void);
+void L1I_DeleteGapHandler(Gap_Handler* gap_handler);
+
+void L1T_ResetAFC_DM(void);
+
+intx L1_TimeDiff( Time timeA, Time timeB);
+void L1I_InsertGapHandler(Gap_Handler* gap);
+void L1I_RemoveGapHandler(Gap_Handler* gap_handler);
+void L1I_DebugGapHandler(void); /* Only for debug purpose. */
+void L1I_RemoveSuspend( void );
+
+void L1I_Schedule_GapPurpose_undefined(Gap_Handler* gap);
+
+void L1I_Consume_PM_DM(void);  /* Used to consume PM cells, and not to fill it into PM queue. This is used for FMO_Lock request. */
+void L1I_MeasurementsProcessDummyResults( void );
+void L1T_SurroundReportTickStandby(void);
+uint8 L1I_SurroundAbortReceive_DM( void );
+uint8 L1I_SurroundAbortBCChReceive_DM( void );
+intx  L1I_NBCChStop( void );
+void L1I_Timer_Tick(Timer* timer);
+void L1I_Timer_GAPStop_suspend(Timer* timer);
+void L1I_Timer_GAPStop_all(Timer* timer); //syy
+
+//void L1I_TimerSuspendPMforGAP( Timer* timer );  //syy
+
+#ifdef __GL1_GEMINI__
+void L1I_Timer_restartGAP(Timer* timer);
+kal_bool L1I_QueryIsContiFB( void );
+kal_uint32 L1I_QueryGAPReservedLength( void );
+#endif      
+
+#ifdef __GL1_GEMINI__
+#if defined( __GL1_GEMINI_WCDMA__ ) || defined( __GEMINI__ ) || defined( __CDMA2000_RAT__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+kal_uint32 L1I_QueryGAPPMReservedLength(void);
+#endif /* defined( __GL1_GEMINI_WCDMA__ ) || defined( __GEMINI__ ) */
+#endif
+
+#if defined( __GEMINI__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ )
+void L1I_SetStandbyPwrScanParam( uint32 scanPeriod, uint32 scanLength );
+void L1I_SetStandbyBSICParam( uint16 scanPeriod );
+void L1I_AssignGAPinVirtualMode( void );
+
+#ifdef __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__
+void L1T_VStandbyMeasSetParam( uint32 MeasPeriod, uint32 MeasLength );
+#endif /* __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ */
+
+#endif /* defined( __GEMINI__ ) || defined( __IRAT_MEAS_SUPPORT_IN_VIRTUAL_MODE__ ) */
+
+#ifdef __GL1_MULTI_MODE__
+bool L1I_QueryAnyActiveRATinDedicated( void );
+#endif
+
+/* Interface with L1D. */
+//void L1D_FCCh_DM(Report* report, ARFCN arfcn, int16 gap_len, AfcParams* afcParams);
+void L1D_Sync_To_3G_DM(Report* report);
+void L1D_Start_Next_PM_DM( void );
+void L1D_Skip_PM_DM(L1D_APIcaller_id caller);
+uint16 L1D_Get_SBWIN_LEN_DM(void);
+intx L1D_Cal_PM_Count_DM( sGAP *gap );
+intx L1D_Cal_FB_Slot_Length_DM(intx ebit_duration);
+void L1D_Sync_To_Multi_Mode( Report *report, L1D_APIcaller_id caller );
+bool L1D_check_3g_reli(void);
+#if IS_GL1_MULTI_MODE_SUPPORT
+void L1D_Set_GSM_RAT_Mode( L1D_MM_STATE L1D_DM_STATE, l1c_sim_mode_enum sim_idx, L1D_APIcaller_id caller);
+void L1D_Set_GSM_Query_RAT_Mode( L1D_MM_STATE L1D_DM_STATE );
+#endif
+
+void L1I_ResetAFC_DM( void );
+
+
+void L1T_Set_Timer_UTRAN_FDD_and_EUTRAN( void );
+void L1T_Set_Timer_UTRAN_TDD( void );
+void L1T_SetGAPPattern_TDD( kal_uint16 gap_num, ll1_gsm_standby_gap_struct* gap, ll1_active_rat_mode_status_enum mode,
+					             kal_bool pm_tick, kal_uint8 pm_tid
+#ifdef  __GERAN_R8__
+					            ,kal_bool pm_tick_higher, kal_uint8 pm_tid_higher
+#endif
+#ifdef  __LTE_RAT__
+					            ,kal_uint16 dmo_lte_period, kal_uint16 dmo_lte_length 
+#endif
+);
+
+/* L1C DM Internal Use. */
+Time L1I_GapEndTime( Gap_Handler* session );
+void L1I_Stop_BSIC_Schedule_UTRAN_TDD( void );
+void L1I_Measurement_Period_Start_UTRAN_TDD( void );
+void L1I_Schedule_GapPurpose_rssi_UTRAN_TDD( Gap_Handler* gap, sGAP* gap_pattern );
+void L1I_Schedule_GapPurpose_bsic_UTRAN_TDD( Gap_Handler* gap, sGAP* gap_pattern );
+void L1I_Timer_GAP_UTRAN_TDD(Timer* timer);
+void L1I_Timer_PM_Session_UTRAN_TDD( Timer* timer );
+void L1I_Reset_PM_Session( void );
+void L1T_SetGAPPurpose_fach_dch_UTRAN_TDD( kal_uint16 gap_num, ll1_gsm_standby_gap_struct* gap
+#ifdef  __LTE_RAT__
+                                          ,kal_uint16 dmo_lte_period, kal_uint16 dmo_lte_length 
+#endif
+);
+
+#ifdef __UMTS_TDD128_MODE__
+/* TDD DM *//* L1C/D Interface function for DM. */
+/* TDD DM *///void L1D_Sync_To_3G_DM( Report *report );
+   #if L1D_WT_COBIN_ARCHITECTURE_SUPPORT
+/* TDD DM */void L1D_Set_Gap_TDD( sGAP *gap, L1D_APIcaller_id caller );   /* set GAP pattern to L1D in 3G FACH and DCH state */
+   #else
+/* TDD DM */void L1D_Set_Gap( sGAP *gap );   /* set GAP pattern to L1D in 3G FACH and DCH state */
+   #endif
+/* TDD DM *///void L1D_Set_GSM_RAT_Mode( L1D_MM_STATE L1D_DM_STATE, L1D_APIcaller_id caller );	
+/* TDD DM *///bool L1D_IsTDStandby_DM(void);
+/* TDD DM *///void L1D_SCh_DM( Report *report, ARFCN arfcn, bool retry, intx ebitPosition, AfcParams *afcParams );
+/* TDD DM *///void L1D_FCCh_DM( Report *report, ARFCN arfcn, int32 gap_len_ebit, AfcParams *afcParams, int16 repeat_cnt );
+/* TDD DM *///void L1D_Sync_To_3G_DM( Report *report );
+/* TDD DM *///uint16 L1D_Get_SBWIN_LEN_DM( void );
+   #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+/* TDD DM */void  L1D_AFCSetDACValue_DM( AfcParams *p, int32 DacValue, L1D_APIcaller_id caller );
+   #else
+/* TDD DM */void  L1D_AFCSetDACValue_DM( AfcParams *p, int16 DacValue, L1D_APIcaller_id caller );
+   #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+/* TDD DM *///bool L1D_check_3g_reli( void );
+/* TDD DM */void L1D_AFCResetParams_DM( AfcParams *p, L1D_APIcaller_id caller );
+/* TDD DM */bool L1D_AFC_2G_ACTIVE_ASK_FreqCorrect( uint8 simIndex, kal_bool correction, kal_bool is_l1c, AfcParams *afcParams );
+/* TDD DM */void L1D_Start_Next_PM_DM( void );
+/* TDD DM *///void L1D_Skip_PM_DM( L1D_APIcaller_id caller );
+/* TDD DM *///intx L1D_Cal_PM_Count_DM( sGAP* gap );
+   #if L1D_WT_COBIN_ARCHITECTURE_SUPPORT
+      #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+/* TDD DM */kal_int32 L1D_AFCGetDAC_Value_DM_TDD(bool is_2g_2_3g);   
+      #else
+/* TDD DM */kal_int16 L1D_AFCGetDAC_Value_DM_TDD(bool is_2g_2_3g);   
+      #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+/* TDD DM */void L1D_FCCh_Update_rxTime_TDD(Time rxTime, L1D_APIcaller_id caller);
+/* TDD DM */void L1D_FBM_Update_left_times_TDD(int16 new_left_times, L1D_APIcaller_id caller);
+/* TDD DM */intx L1D_Cal_PM_Count_DM_Query_TDD( sGAP *gap );
+   #else
+   #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+   /* TDD DM */kal_int32 L1D_AFCGetDAC_Value_DM(bool is_2g_2_3g);
+   #else
+/* TDD DM */kal_int16 L1D_AFCGetDAC_Value_DM(bool is_2g_2_3g);   
+   #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+/* TDD DM */void L1D_FCCh_Update_rxTime(Time rxTime, L1D_APIcaller_id caller);
+/* TDD DM */void L1D_FBM_Update_left_times(int16 new_left_times, L1D_APIcaller_id caller);
+/* TDD DM */intx L1D_Cal_PM_Count_DM_Query( sGAP *gap );
+   #endif
+/* TDD DM */void L1D_Sync_To_Multi_Mode( Report *report, L1D_APIcaller_id caller );
+#endif /*__UMTS_TDD128_MODE__*/
+
+/****************************** function prototype end **************************************/
+
+
+
+
+
+
+/****************************** global variable begin ************************************/
+
+
+#ifdef __GL1_GEMINI_WCDMA__
+#define gap_global          gapGlobals_database[l1c_sim_mode]
+#define local_gap_global  gapGlobals_database[local_sim_mode]
+extern GapGlobal  gapGlobals_database[L1C_MM_SIM_NUM];
+#define dm_global          dmGlobals_database[l1c_sim_mode]
+#define local_dm_global  dmGlobals_database[local_sim_mode]
+extern DualModeGlobal  dmGlobals_database[L1C_MM_SIM_NUM];
+#define gap_base          gapBase_database[l1c_sim_mode]
+#define local_gap_base  gapBase_database[local_sim_mode]
+extern Gap_Handler  gapBase_database[L1C_MM_SIM_NUM];
+extern uint8 syncBitmap;
+#else
+#define local_gap_global  gap_global
+#define local_dm_global  dm_global
+#define local_gap_base  gap_base
+extern GapGlobal gap_global;
+extern DualModeGlobal dm_global;
+extern Gap_Handler gap_base;
+#endif
+bool L1I_QueryAllSIMInGSMIdle( void );
+
+/****************************** global variable end **************************************/
+
+
+EXTERN_TRACE_CLASS( tcDM ); /* For L1 simulation. */
+
+#endif
+#if IS_TXRX_GET_INFO
+kal_uint64 L1D_Rx_Active_Time();
+void L1D_Rx_Reset_Time();
+void L1I_CalculateFBRxTime(void);
+void L1I_QueryFBStartTime(void);
+Power L1I_QueryTxPowerInfo(void);
+void L1I_getTxinformationTime(Power txpower, int32 reservationMask);
+#endif
diff --git a/mcu/l1/interface/gl1/l1_private.h b/mcu/l1/interface/gl1/l1_private.h
new file mode 100644
index 0000000..1af361a
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_private.h
@@ -0,0 +1,141 @@
+/*******************************************************************************
+*  Modification Notice:
+*  --------------------------
+*  This software is modified by MediaTek Inc. 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:
+ * ---------
+ *   l1_private.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Layer1 private stuff
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:   1.2  $
+ * $Modtime:   May 16 2005 23:14:06  $
+ * $Log:   //mtkvs01/vmdata/Maui_sw/archives/mcu/l1/common/l1_private.h-arc  $
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * add to source control recursely
+ *
+ * removed!
+ * removed!
+ * 
+ * 
+ *    Rev 1.2   May 17 2005 00:33:10   BM_Trunk
+ * Karlos:
+ * add copyright and disclaimer statement
+ * 
+ *    Rev 1.1   Jan 18 2005 00:37:12   BM
+ * append new line in W05.04
+ * 
+ *    Rev 1.0   Nov 30 2002 19:50:14   admin
+ * Initial revision.
+ *
+ *    Rev 1.0   Sep 06 2002 11:18:58   admin
+ * Initial revision.
+ *
+ *    Rev 1.2   Jan 03 2002 11:52:26   mtk00210
+ * merge the branch B.L1.20011225
+ *
+ *    Rev 1.1.1.1   Dec 27 2001 10:52:46   mtk00210
+ * correct author
+ *
+ *    Rev 1.1.1.0   Dec 25 2001 16:40:38   mtk00210
+ * revise L1 for RSSI, multiband AFC, new L1D/L1C interface,
+ * and new CBCH handler
+ *
+ *    Rev 1.1   Dec 21 2001 12:17:40   admin
+ * add copyright
+ *
+ *
+ *******************************************************************************/
+
+/******************************************************************************
+ *
+ *  File:            /MTKteam/source/gprsmtk/l1/generic/SCCS/s.l1_private.h
+ *  -----
+ *
+ *  SCCS Version:    2.1
+ *  -------------
+ *
+ *  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 Communications Consultants Worldwide Limited (C) 2000
+ *
+ *  Project:
+ *  --------
+ *
+ *  Software Unit:  Layer1 private stuff.
+ *  --------------
+ *
+ *  Description:
+ *  ------------
+ *
+ *
+ *  Modification History:
+ *  ---------------------
+ *  Date       Vers  Auth  Details
+ *  ----       ----  ----  -------
+ *  28-Mar-01  2.1   VKL   Initial version
+ *
+ *****************************************************************************/
+
+#ifndef l1_generic_l1_private_h
+#define l1_generic_l1_private_h
+
+
+#include "l1_public.h"
+#include "l1_core.h"
+
+#endif
+
diff --git a/mcu/l1/interface/gl1/l1_public.h b/mcu/l1/interface/gl1/l1_public.h
new file mode 100644
index 0000000..c76bbca
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_public.h
@@ -0,0 +1,1625 @@
+/*******************************************************************************
+*  Modification Notice:
+*  --------------------------
+*  This software is modified by MediaTek Inc. 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:
+ * ---------
+ *   l1_public.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Layer1 public interface
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ *******************************************************************************/
+
+/******************************************************************************
+ *
+ *  File:            /MTKteam/source/gprsmtk/l1/generic/SCCS/s.l1_public.h
+ *  -----
+ *
+ *  SCCS Version:    2.21
+ *  -------------
+ *
+ *  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 Communications Consultants Worldwide Limited (C) 2001
+ *
+ *  Project:
+ *  --------
+ *
+ *  Software Unit:  Layer1 public interface.
+ *  --------------
+ *
+ *  Description:
+ *  ------------
+ *
+ *
+ *  Modification History:
+ *  ---------------------
+ *  Date       Vers  Auth  Details
+ *  ----       ----  ----  -------
+ *  28-Mar-01  2.1   VKL   Initial version
+ *  25-Apr-01  2.2   APB   Add prototype for strdup
+ *  27-Apr-01  2.3   VKL   Added AGCGroupPTCCh and AGCGroupMax.
+ *                         Changed prototypes of L1D_ReportPeriod() and
+ *                         L1D_PTCChStart().
+ *                         Added prototypes for L1D_DChSetTxPower() and
+ *                         L1D_PDTChSetHoppingSequence()
+ *  01-May-01  2.4   VKL   Renames PSM functions
+ *  01-May-01  2.5   DBT   Fix merge errors
+ *                         Change prototype for PDTCh drivers
+ *  21-May-01  2.6   VKL   removed ifdef WIN32 ( now in l1_const.h)
+ *                         replaces L1_PSM* functions by new power measurement
+ *                         manager functions
+ *                         renamed parameter to L1D_CBChStart and
+ *                         L1D_PBCChStart
+ *                         change parameters to L1D_PTCChStart
+ *                         surround cell power measurements now done in
+ *                         separate module, not in report period any more.
+ *                         L1D_ReportPeriod therfore no longer gets scan list
+ *                         added functions for PCh, PAGCh, PRACh, and
+ *                         interference measurements.
+ *  15-Jul-01  2.7   VKL   Added ARFCN conversion functions
+ *                         Added L1I_GetUplinkPDTCh()
+ *                         Added MAC functions
+ *                         Added driver to adjust frequency
+ *                         TCh drv now get param to mark if a blk can be DTXed
+ *                         PAGCh driver now gets time slot parameters
+ *                         PDTCh driver no longer gets time slot allocation.
+ *                         MAC now handles this.
+ *                         Add burstLength param to L1D_RACh() and L1D_PRACh()
+ *                         Removed rachData parameter from L1D_PTCChUp()
+ *  08-Aug-01  2.8   VKL   Added L1I_ReportRxBurstData()
+ *                         Added startTimeSlot parameter to L1D_FCChTStart()
+ *                         and L1D_FCChT()
+ *  02-Sep-01  2.9   VKL   Change params to L1I_GetUplinkPDTCh(), add dtxAllowed
+ *                         parameter to L1D_ReportPeriod(), pass DChParams
+ *                         structure to L1D_DChStart() instead of individual ones
+ *                         pass timeSlotPosition to L1D_PTCChUp(), ..Down() instead
+ *                         add L1D_PDTChStart() and L1D_PDTChStop()
+ *                         change L1D_PTDCh() params, cleanup BSIC vs. TSC usage,
+ *                         add bsic field to TBFParams, add subBlock field to RxData
+ *                         replace reportPeriodLock field by monitorReport field
+ *  12-Sep-01  2.10   VKL   Add ARFCN2INDEX for backward compatibility, add AGC parameter
+ *                         structure and variable declaration
+ *  13-Sep-01  2.11  VKL   Add drivers for neighbour PBCCh receive
+ *  26-Sep-01  2.12  VKL   Added tsc parameter to L1D_PTCChStart()
+ *                         Added L1D_PollResp() and L1D_PDTChSetHoppingSequence()
+ *  28-Sep-01  2.13  VKL   Changed parameters of L1I_GetUplinkPDTCh()
+ *                         Changed AGC completely.
+ *                         Added prototype for L1D_GetHardwareGain()
+ *  28-Sep-01  2.14  SGB   Add temporary OLD_AGC conditional compile option
+ *  09-Oct-01  2.15  VKL   Add new AGC constants
+ *  09-Oct-01  2.16  VKL   Add new AGC constant
+ *  09-Oct-01  2.17  VKL   Add AGC algorithm for NPBCCh and interference
+ *                         measurements
+ *  10-Oct-01  2.18  VKL   Add per cell AFC support
+ *  12-Oct-01  2.19  VKL   Add sacchPosition parameter to L1D_DChStart
+ *  11-Oct-01  2.20  SY    Revise AGC interface and add paramter of L1D_DChStart
+ *  26-Oct-01  2.21  VKL   Remove L1D_AdjustFrequency() prototype
+ *                         Increse size of agcScaleBetaServingCell array
+ *  26-Oct-01  2.21  SGB   Correct File history
+ *  17-Nov-01  2.22  VKL   Change AGC interface
+ *                         Replace AGCGroup values by #defines to temporarily
+ *                          patch in new AGC
+ *                         Move AGCParams to l1_types.h
+ *  21-Nov-01  2.23  VKL   Make PRACh aware of syncTimeSlot
+ *                         Remove frequencyError param from L1I_ReportRxBurstData
+ *  04-Dec-01  2.24  VKL   Add flags parameter to L1I_GetUplinkFACCh()
+ *                         Replace L1D_TChF() by L1D_TCh().
+ *                         Add fn parameter to L1D_NPBCCh()
+ *
+ *****************************************************************************/
+
+#ifndef l1_generic_l1_public_h
+#define l1_generic_l1_public_h
+
+#if !defined(GEN_FOR_PC)
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#endif    // GEN_FOR_PC
+
+#include "l1_const.h"
+#include "l1_types_public.h"
+#include "l1_tool.h"
+#include "l1_types.h"
+
+#if !defined(IC_BURNIN_TEST) && !defined(GEN_FOR_PC) && !defined(__NO_L1TRC_GEN__)
+#include "TrcMod.h"
+#endif
+
+#include "mph_types.h"
+#include "l1d_cid.h"
+#include "kal_general_types.h"
+#include "l1d_public.h"
+#ifdef __MTK_TARGET__
+#include "perf_api.h"
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* --- layer1 functions accessible by hardware driver ----------------------- */
+/* -------------------------------------------------------------------------- */
+
+#define ARFCN2INDEX L1_ARFCNToIndex /* backward compatibility */
+
+intx           L1_ARFCNToIndex( ARFCN arfcn );
+ARFCN          L1_IndexToARFCN( intx index );
+FrequencyBand  L1_ARFCNToFrequencyBand( ARFCN arfcn );
+
+#if IS_DYNAMICAL_NOISE_FLOOR_AND_SATURATION_SUPPORT
+intx           L1_PowerToIndex( Power power );
+#endif
+
+
+typedef enum          
+{                     
+   caller_l1c,
+   caller_tst,
+   caller_l1d,  
+}L1D_APIcaller_id;
+
+/* --- getting uplink data -------------------------------------------------- */
+
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void  L1I_GetUplinkSACCh( kal_uint32 ul_data_index, QueryTxDataCallback* callback);
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+BlockData*  L1I_GetUplinkSACCh( void );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void  L1I_GetUplinkFACCh( intx flags, kal_uint32 ul_data_index, QueryTxDataCallback* callback);
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+BlockData*  L1I_GetUplinkFACCh( intx flags );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+/*AMR_ENABLE*/
+BlockData*  L1I_GetUplinkRATSCCh( intx flags );
+/*end of AMR_ENABLE*/
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void  L1I_GetUplinkSDCCh( kal_uint32 ul_data_index, QueryTxDataCallback* callback);
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+BlockData*  L1I_GetUplinkSDCCh( void );
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT*/
+BlockData*  L1I_GetUplinkCSD( intx flags );
+
+/* --- replying reports ----------------------------------------------------- */
+#if defined(__2G_RX_DIVERSITY_PATH_SUPPORT__)
+   #if IS_2G_C_VALUE_SUPPORT
+      #if IS_2G_RAS_DECISION_INCLUDE_DSP_POW_SUPPORT
+      void  L1I_ReportRxBurstData( Report *report, ARFCN arfcn, intx rxSlotIndex, intx subBlock, intx timingError_ebits, Power power_dBm, Power power_dBm_rxd, Power dspPower_dBm, Power dspPower_dBm_drx, int16 dsp_c_value, int16 dsp_c_value_drx, int16 snr );
+      #else
+      void  L1I_ReportRxBurstData( Report *report, ARFCN arfcn, intx rxSlotIndex, intx subBlock, intx timingError_ebits, Power power_dBm, Power power_dBm_rxd, int16 dsp_c_value, int16 dsp_c_value_drx, int16 snr );
+      #endif /* IS_2G_RAS_DECISION_INCLUDE_DSP_POW_SUPPORT */
+   #else
+      #if IS_2G_RAS_DECISION_INCLUDE_DSP_POW_SUPPORT
+      void  L1I_ReportRxBurstData( Report *report, ARFCN arfcn, intx rxSlotIndex, intx subBlock, intx timingError_ebits, Power power_dBm, Power power_dBm_rxd, Power dspPower_dBm, Power dspPower_dBm_drx, int16 snr );
+      #else
+      void  L1I_ReportRxBurstData( Report *report, ARFCN arfcn, intx rxSlotIndex, intx subBlock, intx timingError_ebits, Power power_dBm, Power power_dBm_rxd, int16 snr );
+      #endif /* IS_2G_RAS_DECISION_INCLUDE_DSP_POW_SUPPORT */
+   #endif /* IS_2G_C_VALUE_SUPPORT */
+#else
+void  L1I_ReportRxBurstData( Report *report, ARFCN arfcn, intx rxSlotIndex, intx subBlock, intx timingError_ebits, Power power_dBm, int16 snr );
+#endif
+void  L1I_PutReport( Report *report );
+
+/* --- hopping -------------------------------------------------------------- */
+
+ARFCN L1_CalcHoppingARFCN( HoppingSequence *hs, FrameNumber frame );
+
+/* --- power scan ----------------------------------------------------------- */
+
+#if IS_2G_TAS_ANT_IDX_FOR_PM_WINDOW_SUPPORT
+#if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+bool L1I_MeasurementsGetARFCN( ARFCN* arfcn, l1c_sim_mode_enum* sim_mode,  GL1_AntennaInfo *antenna_assigned);
+#else
+bool L1I_MeasurementsGetARFCN( ARFCN* arfcn, l1c_sim_mode_enum* sim_mode);
+#endif /* IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 ) */
+#endif
+
+void  L1I_MeasurementsPutResult( PMResult pmResult );
+
+/* --- MAC ------------------------------------------------------------------ */
+
+void  L1I_MACSetReceivedUSF(TimeSlot timeSlot, intx usf, Report* report);
+bool  L1I_MACFrameTick( PacketTransferSpec *pts );
+#if IS_DUAL_CORE_GL1AC_MODEM_SUPPORT
+void  L1I_PreGetUplinkPDTCh( Report* report, kal_uint32 ul_data_index, QueryTxDataCallback *callback );
+#else /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+void  L1I_PreGetUplinkPDTCh(PrePacketUplinkSpec *ppus, Report* report);
+#endif /* IS_DUAL_CORE_GL1AC_MODEM_SUPPORT */
+bool  L1I_PRAChCheckUSFFree( void );
+
+/* --- AFC ------------------------------------------------------------------ */
+typedef struct
+{
+   Power  burstpower;
+   uint16 snr;
+   int16  freq_offset;
+
+#if IS_SAIC_CHIP_MT6223_AND_LATTER_VERSION
+   int16  tx_freq_offset;
+   int16  c_value;
+   #if IS_2G_C_VALUE_SUPPORT
+   int16  c_value_drx;
+   #endif
+   bool   isSAIC;
+   #if IS_EGPRS
+   bool   isEPSK;
+   #endif
+#endif /* End of "IS_SAIC_CHIP_MT6223_AND_LATTER_VERSION" */
+
+} BurstAfcDB;
+
+typedef struct
+{
+   BurstAfcDB  burstafc[4];
+
+#if IS_ACC_NC_AFC_DB_UPDATE_SUPPORT
+   bool        AfcForNbcch;
+#endif   /* IS_ACC_NC_AFC_DB_UPDATE_SUPPORT */
+
+} AfcUpdateParams;
+
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+int32 L1I_AFCGetFBSBFreqSetting( AfcParams *p, bool beginfreqcorrection );
+int32 L1I_AFCAdjustFBSBFreqSetting( AfcParams *p, uint8 sub_stage );
+#else
+uint16 L1I_AFCGetFBSBFreqSetting( AfcParams *p, bool beginfreqcorrection );
+
+uint16 L1I_AFCAdjustFBSBFreqSetting( AfcParams *p, uint8 sub_stage );
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+void   L1I_AFCFBSBUpdate( AfcParams *p, intx freq_offset, int8 freqcorrectionstepcnt, bool decodeOk, FrequencyBand  band );
+
+void   L1I_AFCBeforeTick( AfcParams *p );
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+int32 L1I_AFCGetNBFreqSetting( void );
+#else
+uint16 L1I_AFCGetNBFreqSetting( void );
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+void   L1I_AFCNBUpdate( AfcUpdateParams *p, TimeSlotMask timeSlots, FrequencyBand band );
+void   L1I_AFCAfterTick( void );
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+void   L1I_SetAFcData( int32 calibrated_dac_default, intx calibrated_int_slope );
+#else
+void   L1I_SetAFcData( int16 calibrated_dac_default, intx calibrated_int_slope );
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+
+#if IS_GEMINI_SUPPORT
+void   L1I_AFCSetDatabaseToSIMx( uint8 simIndex );
+#endif
+
+//extern intx  afc_inv_slope;
+//extern int16 afc_dac_default;   /* move to l1d_public.h */
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+extern int32 onek_hz_dac;
+#else
+extern int16 onek_hz_dac;
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+
+#if IS_TDD_DUAL_MODE_SUPPORT
+extern int16 GSM_afc_inv_slope; 
+extern intx  GSM_afc_dac_default;
+#endif
+
+extern Power agc_gainoffset_h2l;
+extern Power agc_gprs_gainoffset;
+#if IS_EGPRS
+extern Power agc_edge_gainoffset;
+#endif
+
+/*XO*//* --XO AFC------------------------------------------------------------ */
+/*XO*/ void  L1IXO_PrepareTuneSlope( bool freq_crt );
+/*XO*/ void  L1DXO_PrepareTuneSlope( Report *report );
+/*XO*/ void  L1DXO_TuneSlope( void );
+/*XO*/ bool  L1DXO_IsSlopeCorrected( void );
+
+/* --- AGC ------------------------------------------------------------------ */
+
+typedef Report* AGCGroup;
+
+#define AGCGroupPowerMeasurement NULL
+#define AGCGroupFCCh report
+#define AGCGroupSCh report
+#define AGCGroupNBCCh report
+#define AGCGroupBCCh report
+#define AGCGroupPCh report
+#define AGCGroupCBCh report
+#define AGCGroupSACChC report
+#define AGCGroupSDCCh report
+#define AGCGroupTCh report
+#define AGCGroupSACChT report
+#define AGCGroupFCChT report
+#define AGCGroupSChT report
+#define AGCGroupPTCCh report
+#define AGCGroupPBCCh report
+#define AGCGroupNPBCCh report
+#define AGCGroupPPCh report
+#define AGCGroupPAGCh report
+#define AGCGroupPDTCh report
+#define AGCGroupInterference imm.params.report
+
+/*
+   first beta (forgetting factor) in the table. This is used if the delay
+   between the measurements is zero after scaling the delay.
+   This is a floating point number used to init the AGCs internal tables.
+*/
+#define BETA0 (0.1)
+
+/*
+   The AGC uses fixed point arithmetic for scales and forgetting factors (beta).
+   This constant defines the number of bits after the decimal point.
+*/
+#define AGC_PRECISION 10
+
+/*
+   Convert a floating point number to the AGCs internal fixed point format
+*/
+#define AGC_TOFIX(n) ((int16)((1<<AGC_PRECISION)*(n)))
+
+extern const AGCParams agcParams[ FrequencyBandCount ];
+#if IS_DYNAMICAL_NOISE_FLOOR_AND_SATURATION_SUPPORT
+extern AGCParams_T agcParams_p[];
+#endif
+
+
+void  L1I_AGCBeforeBlock( Report *report, TimeSlotMask timeSlots );
+Gain  L1I_AGCGetGain(     Report *report, ARFCN arfcn, TimeSlot timeSlot );
+#if defined(__2G_RX_DIVERSITY_PATH_SUPPORT__)
+L1D_RX_POWER L1I_AGCGetInputPower(     Report *report, ARFCN arfcn, TimeSlot timeSlot );
+   #if IS_2G_EXTERNAL_LNA_SUPPORT
+L1D_RX_POWER L1I_AGCUpdate(      Report *report, ARFCN arfcn, TimeSlot timeSlot, L1D_RX_POWER observedDSPOutputPower, L1D_RX_GAIN usedGain, BurstAfcDB *pBurstData, L1D_RX_ELNA_TYPE elna_status );
+L1D_RX_POWER L1I_AGCMeasurementUpdate( ARFCN arfcn, L1D_RX_POWER observedDSPOutputPower, L1D_RX_GAIN usedGain, L1D_RX_ELNA_TYPE elna_status );
+   #else
+L1D_RX_POWER L1I_AGCUpdate(      Report *report, ARFCN arfcn, TimeSlot timeSlot, L1D_RX_POWER observedDSPOutputPower, L1D_RX_GAIN usedGain, BurstAfcDB *pBurstData );
+L1D_RX_POWER L1I_AGCMeasurementUpdate( ARFCN arfcn, L1D_RX_POWER observedDSPOutputPower, L1D_RX_GAIN usedGain );
+   #endif
+L1D_RX_POWER  L1I_AGCMeasurementGetInputPower( ARFCN arfcn );
+#else
+   #if IS_2G_EXTERNAL_LNA_SUPPORT
+Power L1I_AGCUpdate(      Report *report, ARFCN arfcn, TimeSlot timeSlot, Power observedDSPOutputPower, Gain usedGain, BurstAfcDB *pBurstData, MMRF_ELNA_TYPE_E elna_status );
+Power L1I_AGCMeasurementUpdate( ARFCN arfcn, Power observedDSPOutputPower, Gain usedGain, MMRF_ELNA_TYPE_E elna_status );
+   #else
+Power L1I_AGCUpdate(      Report *report, ARFCN arfcn, TimeSlot timeSlot, Power observedDSPOutputPower, Gain usedGain, BurstAfcDB *pBurstData );
+Power L1I_AGCMeasurementUpdate( ARFCN arfcn, Power observedDSPOutputPower, Gain usedGain );
+   #endif
+Gain  L1I_AGCMeasurementGetGain( ARFCN arfcn );
+#endif
+void  L1I_AGCAfterBlock(  Report *report, TimeSlotMask timeSlots );
+
+
+
+
+
+/* -------------------------------------------------------------------------- */
+/* --- hardware driver functions -------------------------------------------- */
+/* -------------------------------------------------------------------------- */
+
+/* --- starting and stopping ------------------------------------------------ */
+
+void L1D_Init0( void );
+void L1D_Init( void );
+void L1D_Init2(void);
+void L1D_Exit( L1D_APIcaller_id caller );
+void L1D_Meta_Init( void );
+
+void L1D_Start( void );
+void L1D_Stop( L1D_APIcaller_id caller );
+
+/* --- ticking and sleeping ------------------------------------------------- */
+
+void L1D_FrameTick( void );
+
+bool L1D_PowerDown( intx frames );
+void L1D_PowerUp( void );
+
+/* --- drivers -------------------------------------------------------------- */
+
+#if IS_TDD_DUAL_MODE_SUPPORT
+/*TDD*/ /*--------------------------- GSM Using Only ------------------------------*/
+   #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+/*TDD*/ void L1D_AFCSetDACValue_DM( AfcParams *p, int32 DacValue, L1D_APIcaller_id caller );
+   #else
+/*TDD*/ void L1D_AFCSetDACValue_DM( AfcParams *p, int16 DacValue, L1D_APIcaller_id caller );
+   #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+/*TDD*/ bool L1D_check_3g_reli( void );
+/*TDD*/ void L1D_AFCResetParams_DM( AfcParams *p, L1D_APIcaller_id caller );
+/*TDD*/ /*--------------------------- TDD Using Only ------------------------------*/
+/*TDD*/ kal_uint16 L1D_GetInitMode( void );
+/*TDD*/ void L1D_ErrorCheck_DM_RF_Conflict( uint32 start_subfn, uint16 start_chip, uint32 end_subfn, uint16 end_chip );
+/*TDD*/ /*--------------------------- GSM/TDD Using  ------------------------------*/
+   #if L1D_WT_COBIN_ARCHITECTURE_SUPPORT
+      #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+/*TDD*/ kal_int32 L1D_AFCGetDAC_Value_DM_TDD( bool is_2g_2_3g );   
+      #else
+/*TDD*/ kal_int16 L1D_AFCGetDAC_Value_DM_TDD( bool is_2g_2_3g );   
+      #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+   #else
+      #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+/*TDD*/ kal_int32 L1D_AFCGetDAC_Value_DM( bool is_2g_2_3g );
+      #else
+/*TDD*/ kal_int16 L1D_AFCGetDAC_Value_DM( bool is_2g_2_3g );
+      #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+   #endif
+/*TDD*/ void L1D_AFCChangeTDReliable_DM( bool is_afc_reliable );
+#endif
+void L1D_AFC_Control_Switch_DM( kal_bool is_2G_control );
+
+void L1D_AFC_Update_Mode(kal_uint8 sim_num, kal_uint8 new_mode, L1D_APIcaller_id caller );
+void L1D_AFC_Update_Gap_Start(kal_uint8 sim_num, L1D_APIcaller_id caller);
+#ifdef __UMTS_FDD_MODE__
+/*FDD*/ bool L1D_AFC_2G_ACTIVE_ASK_FreqCorrect( uint8 simIndex, kal_bool correction, kal_bool is_l1c, AfcParams *afcParams );
+#endif
+
+#if !IS_MultiMode_AFC_Support
+   #ifdef __UMTS_FDD_MODE__
+      #if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+/*FDD*/ void  L1D_AFCSetDACValue_DM( AfcParams *p, int32 DacValue, L1D_APIcaller_id caller );
+      #else
+/*FDD*/ void  L1D_AFCSetDACValue_DM( AfcParams *p, int16 DacValue, L1D_APIcaller_id caller );
+      #endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+/*FDD*/ int16 L1D_AFCGetServingDACValue_DM( void );
+/*FDD*/ void  L1D_AFCResetParams_DM( AfcParams *p, L1D_APIcaller_id caller );
+   #endif
+#endif
+
+void  L1D_Update_DSP_2G_TimeStamp( kal_uint32 timestamp );
+void  L1D_Update_DSP_3G_TimeStamp( kal_uint16 timestamp );
+
+void  L1D_AFCSetParams( uint8 simIndex, AfcParams *afc, L1D_APIcaller_id caller );
+bool  L1D_AFCGetServingReliable( uint8 simIndex );
+
+#if IS_GEMINI_SUPPORT
+kal_bool L1D_AFC_Ask_FreqCorrection_2( uint8 simIndex, kal_bool correction, AfcParams *afcParams);
+#endif
+
+void  L1D_SCDedicateModeStart( L1D_APIcaller_id caller );
+void  L1D_SCDedicateModeEnd( L1D_APIcaller_id caller );
+void  L1D_SCAccessModeStart( L1D_APIcaller_id caller );
+void  L1D_SCAccessModeEnd( L1D_APIcaller_id caller );
+void  L1D_SetInitMode( int16 mode );
+int   L1D_CheckIfMetaMode( void );
+uint8 L1D_IRDMA_Power_GetHandle( void );
+void  L1D_IRDMA_Power_On( uint8 handle );
+void  L1D_IRDMA_Power_Off( uint8 handle );
+
+Gain  L1D_SetHardwareGain( FrequencyBand band, Gain gain );
+void  L1D_AGCControl( void *privateData );
+
+void  L1D_ExtendFrame( intx extendFrameEBits, L1D_APIcaller_id caller );
+void  L1D_AdjustFrame( intx adjustFrameEBits, L1D_APIcaller_id caller );
+void  L1D_SetSync( FrameNumber setSyncFrame, intx setSyncEBits, L1D_APIcaller_id caller );
+void  L1D_Write_HW_TQWRAP( uint16 tq );
+
+#if IS_GEMINI_SUPPORT
+void  L1D_SetSIM2FrameNumber( FrameNumber setSyncFrame );
+void  L1D_SetSIM2FrameNumber_ForRx( uint8 simIndex, FrameNumber setSyncFrame, int8 burstCnt );
+void  L1D_SetSIM2FrameNumber_ForTx( uint8 simIndex, FrameNumber setSyncFrame, int8 burstCnt );
+#endif
+
+void  L1D_FCCh( Report *report, ARFCN arfcn, bool frequencyCorrect, AfcParams *afc, L1D_APIcaller_id caller );
+void  L1D_FCChStop( L1D_APIcaller_id caller );
+
+void  L1D_SCh( Report *report, ARFCN arfcn, AfcParams *afc, L1D_APIcaller_id caller );
+void  L1D_SChStop( uint8 simIndex, L1D_APIcaller_id caller );
+
+void  L1D_NBCCh( Report *report, ARFCN arfcn, BSIC bsic, AfcParams *afc, L1D_APIcaller_id caller );
+
+void  L1D_BCCh( Report *report, ARFCN arfcn, BSIC bsic, L1D_APIcaller_id caller );
+
+void  L1D_PCh( Report *report, ARFCN arfcn, BSIC bsic, L1D_APIcaller_id caller );
+#ifdef __L1_CB__
+void  L1D_CBChStart( HoppingSequence *hoppingSequence, TSC tsc, TimeSlot timeSlotPosition, L1D_APIcaller_id caller );
+void  L1D_CBCh( Report *report, L1D_APIcaller_id caller );
+void  L1D_CBChStop( L1D_APIcaller_id caller );
+#endif
+#if IS_GSM_INCREASE_RACH_TX_POWER_SUPPORT
+   #if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || IS_2G_Gen97_UTAS_SUPPORT
+void L1D_RACh( ARFCN arfcn, BSIC bsic, Power txPower, RAChData rachData, intx burstLength, TSC tsc ,l1c_d_intf_params* l1c_d_intf_params, int8 rachTxCount, L1D_APIcaller_id caller );
+   #else
+void L1D_RACh( ARFCN arfcn, BSIC bsic, Power txPower, RAChData rachData, intx burstLength, TSC tsc, int8 rachTxCount, L1D_APIcaller_id caller );
+   #endif
+#else
+   #if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || IS_2G_Gen97_UTAS_SUPPORT
+void L1D_RACh( ARFCN arfcn, BSIC bsic, Power txPower, RAChData rachData, intx burstLength, TSC tsc ,l1c_d_intf_params* l1c_d_intf_params, L1D_APIcaller_id caller );
+   #else
+void L1D_RACh( ARFCN arfcn, BSIC bsic, Power txPower, RAChData rachData, intx burstLength, TSC tsc, L1D_APIcaller_id caller );
+   #endif
+#endif
+void  L1D_ReportPeriod( Report *report, TimingAdvance timingAdvance, int8 dtxsetting, L1D_APIcaller_id caller );
+void  L1D_ReportPeriodStop( L1D_APIcaller_id caller );
+
+#if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void  L1D_DChAB( bool isTCh, l1c_d_intf_params* l1c_d_intf_params, L1D_APIcaller_id caller);
+#else
+void  L1D_DChAB( bool isTCh, L1D_APIcaller_id caller );
+#endif /* IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )*/
+void  L1D_DChStart( DChParams *params, intx sacchPosition, L1D_APIcaller_id caller );
+void  L1D_DChStop( bool releaseDCh, L1D_APIcaller_id caller );
+void  L1D_DChStopHandoverASAP( L1D_APIcaller_id caller );
+void  L1D_DChSetHoppingSequence( HoppingSequence *hoppingSequence, L1D_APIcaller_id caller );
+void  L1D_DChSetCiphering( bool enable, int8 algorithm, uint8 key[ 8 ], L1D_APIcaller_id caller );
+void  L1D_DChSetChannelMode( TChMode channelMode, SubChannel subChannel, bool dtxAllowed, L1D_APIcaller_id caller );
+void  L1D_DChSetAMRChannelMode( TChMode channelMode, SubChannel subChannel, bool dtxAllowed, TChAMRConfig *amrConfig, L1D_APIcaller_id caller );
+void  L1D_DChSetAMRConfig( TChAMRConfig *amrConfig, L1D_APIcaller_id caller );
+void  L1D_DChSetAMRQICompensated( uint16 amrCompensated );
+void  L1D_DChInitAMRQICompensated( void );
+void  L1D_DChSetLoopMode( LoopMode mode, L1D_APIcaller_id caller );
+void  L1D_DChSetTxPower( Power txPower, L1D_APIcaller_id caller );
+#ifdef __EGPRS_MODE__
+void  L1D_EGPRSSetSRBMode( bool isOn, TimeSlot dnTsOffset, bool mBit, L1D_APIcaller_id caller );
+#endif /*__EGPRS_MODE__*/
+
+void  L1D_SDCChDown( Report *report, L1D_APIcaller_id caller );
+#if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1D_SDCChUp( bool handover ,l1c_d_intf_params* intf_params, L1D_APIcaller_id caller);
+#else
+void L1D_SDCChUp( bool handover , L1D_APIcaller_id caller);   
+#endif
+void  L1D_SACChCDown( Report *report, L1D_APIcaller_id caller );
+#if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void  L1D_SACChCUp( bool handover, l1c_d_intf_params* intf_params, L1D_APIcaller_id caller );
+#else
+void  L1D_SACChCUp( bool handover, L1D_APIcaller_id caller );
+#endif /* IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 ) */
+#if IS_DUAL_CORE_MODEM_SUPPORT
+void  L1D_SetSABMData( BlockData *data, L1D_APIcaller_id caller );
+#endif /* IS_DUAL_CORE_MODEM_SUPPORT */
+
+#define TCH_BLOCK       0x01 /* interleaved block starts and other one ends */
+#define TCH_FACCHU      0x02 /* uplink FACCh block start */
+#define TCH_FACCHD      0x04 /* downlink FACCh block end */
+#define TCH_NODTXD      0x08 /* no downlink DTX allowed on this block */
+#define TCH_NODTXU      0x10 /* no uplink DTX allowed on this block */
+#define TCH_QSUB        0x20 /* monitor block quality to sub for normal block */
+#define TCH_QFACCHSUB   0x40 /* monitor block quality to sub for FACCh block */
+#define TCH_FORCEFACCH  0x80 /* interleaved block starts and other one ends */
+
+#define SACCH_NONE_SHIFT  0x0000
+#define SACCH_RIGHT_SHIFT 0x0100
+#define SACCH_LEFT_SHIFT  0x0200
+
+#if IS_DUAL_LOOP_AFC_CONTROL_SUPPORT
+#define MAX_FBCORRECTION_SEARCH_TIME   (110) //(110+52)  // FB Search time increase 13*4 caused by USE_3_SUBSTAGES_FB_STAGE1=1
+#else
+#define MAX_FBCORRECTION_SEARCH_TIME   (110)
+#endif
+
+void  L1D_TCh( Report *report, intx flags, HandoverState handover, L1D_APIcaller_id caller );
+void  L1D_SACChT( Report *report, intx subBlock, bool handover, L1D_APIcaller_id caller );
+void  L1D_DChGetCsdASAP( Report *report , Report *oldreport, L1D_APIcaller_id caller );
+
+void  L1D_FCChTStart( Report *report, ARFCN arfcn, TimeSlot startTimeSlot, AfcParams *afc, L1D_APIcaller_id caller );
+void  L1D_FCChT( L1D_APIcaller_id caller );
+void  L1D_FCChTStop( L1D_APIcaller_id caller );
+
+void  L1D_SChT( Report *report, ARFCN arfcn, intx ebitPosition, AfcParams *afc, L1D_APIcaller_id caller );
+
+void  L1D_PTCChStart( HoppingSequence *hoppingSequence, BSIC bsic, TSC tsc, intx burstLength, L1D_APIcaller_id caller );
+void  L1D_PTCChSetHoppingSequence( HoppingSequence *hoppingSequence );
+void  L1D_PTCChStop( L1D_APIcaller_id caller );
+void  L1D_PTCChDown( Report *report, intx subBlock, TimeSlot timeSlotPosition, L1D_APIcaller_id caller );
+#if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1D_PTCChUp( Power txPower, TimeSlot timeSlotPosition, l1c_d_intf_params* intf_params, L1D_APIcaller_id caller);
+   #else
+void L1D_PTCChUp( Power txPower, TimeSlot timeSlotPosition , L1D_APIcaller_id caller);
+   #endif
+
+void  L1D_PBCChStart( HoppingSequence *hoppingSequence, TSC tsc, TimeSlot timeSlotPosition );
+void  L1D_PBCCh( Report *report, bool decodeUSF, L1D_APIcaller_id caller );
+void  L1D_PBCChStop( L1D_APIcaller_id caller );
+
+void  L1D_NPBCChStart( HoppingSequence *hoppingSequence, TSC tsc, TimeSlot timeSlotPosition, AfcParams *afc, L1D_APIcaller_id caller );
+void  L1D_NPBCCh( Report *report, FrameNumber fn, L1D_APIcaller_id caller );
+void  L1D_NPBCChStop( L1D_APIcaller_id caller );
+
+void  L1D_PPChStart( HoppingSequence *hoppingSequence, TSC tsc, TimeSlot timeSlotPosition, L1D_APIcaller_id caller );
+void  L1D_PPCh( Report *report, bool decodeUSF, L1D_APIcaller_id caller );
+void  L1D_PPChStop( L1D_APIcaller_id caller );
+
+void  L1D_PAGCh( Report *report, HoppingSequence *hoppingSequence, TSC tsc, TimeSlot timeSlotPosition, bool decodeUSF, L1D_APIcaller_id caller );
+
+#if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1D_PRACh( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, TimeSlot timeSlotPosition, Power txPower, RAChData rachData, intx burstLength, TSC tsc , l1c_d_intf_params* intf_params, L1D_APIcaller_id caller );
+#else
+void L1D_PRACh( ARFCN arfcn, BSIC bsic, TimeSlot timeSlot, TimeSlot timeSlotPosition, Power txPower, RAChData rachData, intx burstLength, TSC tsc, L1D_APIcaller_id caller );
+#endif
+
+   #if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1D_PollResp( HoppingSequence *hoppingSequence, BSIC bsicOrTSC, Power txPower, TimingAdvance timingAdvance, BlockData *blockData, int burstLength , l1c_d_intf_params *intf_params, L1D_APIcaller_id caller);
+   #else
+void L1D_PollResp( HoppingSequence *hoppingSequence, BSIC bsicOrTSC, Power txPower, TimingAdvance timingAdvance, BlockData *blockData, int burstLength , L1D_APIcaller_id caller);
+   #endif
+
+void  L1D_PDTChStart( HoppingSequence *hoppingSequence, TSC tsc, BSIC bsic, bool egprs, L1D_APIcaller_id caller );
+#if IS_RTTI_EDGE_SUPPORT
+void  L1D_PDTCh( Report *report, bool ccReset, bool egprs, bool isEven, L1D_APIcaller_id caller );
+#else
+void  L1D_PDTCh( Report *report, bool ccReset, bool egprs, L1D_APIcaller_id caller );
+#endif
+void  L1D_PDTChSetHoppingSequence( HoppingSequence *hoppingSequence );
+void  L1D_PDTChStop( bool released, L1D_APIcaller_id caller );
+void  L1D_PDTChS_StopTxProcess( int16 forceDSPTXNoProcess );
+
+void  L1D_PACChDown( Report *report, HoppingSequence *hs, TSC tsc, L1D_APIcaller_id caller );
+
+void  L1D_Interference( Report *report, ARFCN arfcn, L1D_APIcaller_id caller );
+
+void  L1D_DChUpdateTA( uint8 timingAdvance, L1D_APIcaller_id caller );
+
+void  L1D_PM_FillPMQueue( void );
+
+kal_bool L1D_FBSB_Status_Querry(char querry_mode, char SIM_index);
+
+void  L1D_Suspend_PM( bool suspend, L1D_APIcaller_id caller );
+void  L1D_PM_ConsumePMQueue( void );
+#if defined(__GEMINI__) && defined(__UMTS_RAT__)
+extern kal_bool UL1D_UMTS_Is_In_Dedi_Mode( void );
+#endif
+
+void  L1D_GetCurrentTime( uint32 *frame_number, uint16 *tq_count );
+void  L1D_MeasureMaxDuration_Start( sMTMAXTIME *data );
+void  L1D_MeasureMaxDuration_Stop( sMTMAXTIME *data );
+#if IS_DUAL_CORE_MODEM_SUPPORT
+void L1D_MeasureMaxDuration_SetStopTime( sMTMAXTIME *data, int16 stop_time );
+#endif /* IS_DUAL_CORE_MODEM_SUPPORT */
+void  L1D_MeasureMaxEnd_Start( sMTMAXTIME *data );
+void  L1D_MeasureMaxEnd_Stop( sMTMAXTIME *data );
+void  L1D_MeasureTime_L1I_Start( void );
+void  L1D_MeasureTime_L1I_Stop( void );
+void  L1D_MeasureTime_L1I_Skip( void );
+
+/* --- sleep mode manager --------------------------------------------------- */
+
+void  L1SM_FrameTick( uint16 *frames, uint16 *ebit );
+void  L1SM_BeginCalibration( void );
+
+/* --- test mode ------------------------------------------------------------ */
+
+void   L1ITST_AGCBeforeBlock( Report *report, TimeSlotMask timeSlots );
+Gain   L1ITST_AGCGetGain( Report *report, ARFCN arfcn, TimeSlot timeSlot );
+#if defined(__2G_RX_DIVERSITY_PATH_SUPPORT__)
+L1D_RX_POWER L1ITST_AGCGetInputPower( Report *report, ARFCN arfcn, TimeSlot timeSlot );
+   #if IS_2G_EXTERNAL_LNA_SUPPORT
+L1D_RX_POWER L1ITST_AGCUpdate( Report *report, ARFCN arfcn, TimeSlot timeSlot, L1D_RX_POWER observedDSPOutputPower, L1D_RX_GAIN usedGain, BurstAfcDB *pBurstData, L1D_RX_ELNA_TYPE elna_status);
+   #else
+L1D_RX_POWER L1ITST_AGCUpdate( Report *report, ARFCN arfcn, TimeSlot timeSlot, L1D_RX_POWER observedDSPOutputPower, L1D_RX_GAIN usedGain, BurstAfcDB *pBurstData );
+   #endif
+#else
+   #if IS_2G_EXTERNAL_LNA_SUPPORT
+Power  L1ITST_AGCUpdate( Report *report, ARFCN arfcn, TimeSlot timeSlot, Power observedDSPOutputPower, Gain usedGain, BurstAfcDB *pBurstData, MMRF_ELNA_TYPE_E elna_status );
+   #else
+Power  L1ITST_AGCUpdate( Report *report, ARFCN arfcn, TimeSlot timeSlot, Power observedDSPOutputPower, Gain usedGain, BurstAfcDB *pBurstData );
+   #endif
+#endif
+void   L1ITST_AGCAfterBlock( Report *report, TimeSlotMask timeSlots );
+
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+int32 L1ITST_AFCGetFBSBFreqSetting( AfcParams *p, bool beginfreqcorrection );
+#else
+uint16 L1ITST_AFCGetFBSBFreqSetting( AfcParams *p, bool beginfreqcorrection );
+#endif
+void   L1ITST_AFCFBSBUpdate( AfcParams *p, intx freq_offset, intx freqcorrectionstepcnt, bool decodeOk, FrequencyBand band );
+
+void   L1ITST_AFCBeforeTick( AfcParams *p );
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+int32 L1ITST_AFCGetNBFreqSetting( void );
+#else
+uint16 L1ITST_AFCGetNBFreqSetting( void );
+#endif
+void   L1ITST_AFCNBUpdate( AfcUpdateParams *afcupdate, TimeSlotMask timeSlots, FrequencyBand  band );
+void   L1ITST_AFCAfterTick( void );
+
+bool   L1ITST_MACFrameTick( PacketTransferSpec *pts );
+#if IS_DUAL_CORE_MODEM_SUPPORT
+void   L1ITST_PreGetUplinkPDTCh( Report* report, kal_uint32 ul_data_index, QueryTxDataCallback *callback );
+#else
+void   L1ITST_PreGetUplinkPDTCh( PrePacketUplinkSpec *ppus, Report *report );
+#endif /* IS_DUAL_CORE_MODEM_SUPPORT */
+void   L1ITST_MACSetReceivedUSF( TimeSlot timeSlot, intx usf, Report *report );
+bool   L1ITST_PRAChCheckUSFFree( void );
+
+#if IS_DUAL_CORE_MODEM_SUPPORT
+void  L1ITST_GetUplinkSACCh( kal_uint32 ul_data_index, QueryTxDataCallback *callback );
+void  L1ITST_GetUplinkFACCh( intx flags, kal_uint32 ul_data_index, QueryTxDataCallback *callback );
+#else
+BlockData* L1ITST_GetUplinkSACCh( void );
+BlockData* L1ITST_GetUplinkFACCh( intx flags );
+#endif /* IS_DUAL_CORE_MODEM_SUPPORT */
+BlockData* L1ITST_GetUplinkRATSCCh( intx flags );  /*AMR_ENABLE*/
+#if IS_DUAL_CORE_MODEM_SUPPORT
+void  L1ITST_GetUplinkSDCCh( kal_uint32 ul_data_index, QueryTxDataCallback *callback );
+#else
+BlockData* L1ITST_GetUplinkSDCCh( void );
+#endif /* IS_DUAL_CORE_MODEM_SUPPORT */
+BlockData* L1ITST_GetUplinkCSD( intx flags );
+
+void  L1D_RXWin_On( ARFCN arfcn );
+void  L1D_RXWin_Off( void );
+#if defined(__EPSK_TX__)
+void  L1D_RF_SetRampApcLevelEPSK( int rf_band, int power_in_dBm, int apc_dac );
+#endif
+void  L1D_TXWin_On( ARFCN arfcn, uint8 modtype, uint8 powerlev );
+void  L1D_TXWin_Off( void );
+void  L1D_SetBBTXCfg( const sBBTXCfg *bbtx );
+void  L1D_ReadBBTXCfg( sBBTXCfg *bbtx );
+intx  L1D_ReadBBTXCfgVer( void );
+void  L1D_RF_SetBBTXParameters( void *table );
+void  L1D_RF_SetRampApcLevel( int rf_band, int power_in_dBm, int apc_dac );
+
+#if IS_EGPRS
+   #if !defined(__NEW_TBF_ARCH__)
+void  L1D_SetIRParams( TFI tfi, bool dnRlcAckMode, int16 WS, bool resetIR, L1D_APIcaller_id caller );
+   #else
+void  L1D_SetIRParams( uint8 idx, TFI tfi, IRParams *ir, L1D_APIcaller_id caller );
+void  L1D_BackupRestore_AllVQ( uint8 ctrl, bool isNextTbfEdge, L1D_APIcaller_id caller ); // 0: restore, 1: backup
+   #endif
+   #if IS_RTTI_EDGE_SUPPORT || IS_FANR_EDGE_SUPPORT
+#define __2G_R7_L1_WORKAROUND__
+void L1D_SetULTBFParams( UpSpecParams *up, uint8 idx2 );
+   #endif
+#endif
+
+void  L1D_GetBatteryMeasurementSetting( SBATMEASARG *meas_args );
+void  L1D_SetBatteryVoltage( int volt );
+void  L1D_SetBatteryTemperature( int temp );
+void  L1D_SetRFTemperature( int temp );
+#if IS_2G_TAS_SUPPORT || IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void  L1D_SetRFTxPowerDecrementTable_TAS( bool valid, uint8 op_code, uint8 tx_reduction_table[4][2][4], uint8 tx_reduction_table_tas[4][2][4]);
+#else
+void  L1D_SetRFTxPowerDecrementTable( bool valid, uint8 op, uint8 tx_reduction_table[4][2][4] );
+#endif
+void  L1D_SIM_Notify_DSP( uint8 simIndex );
+void  L1D_SIM_Notify( uint8 simIndex, uint8 status, L1D_APIcaller_id caller );
+uint8 L1D_IS_GetRFTemperatureFromADC( void );
+uint8 L1D_IS_GetBatteryInfoFromADC( void );
+int32 L1D_UpdateVoltInfoPeriod( void );
+
+void  L1D_VOLTCOM_Enable_in_Meta( void *data );
+void  L1D_VOLTCOM_Disable_in_Meta( void *data );
+
+#if IS_TX_POWER_CONTROL_SUPPORT
+void  L1D_TXPC_Enable_in_Meta( void *data );
+void  L1D_TXPC_Disable_in_Meta( void *data );
+#endif
+
+#define CHECK_PM_AVAILABLE    0x00
+#define CHECK_FBM_IN_QUEUE    0x01
+#define CHECK_SBM_IN_QUEUE    0x02
+#define CHECK_IMM_IN_QUEUE    0x04
+#define CHECK_FSIWIN_USING    0x08
+#define CHECK_PM_SUSPENDED    0x10
+#define CHECK_PM_SKIPPED      0x20
+#define CHECK_ONE_PM_BYPASS   0x40
+
+/* --- Feature of Modem Hard Real Time Recovery --------------------------------------------------------- */
+
+typedef enum
+{
+   MDTR_MSG_PENDING_FLAG,    /* 0*/
+   MDTR_MSG_TIMER_CONFLICT,  /* 1*/
+   MDTR_MSG_L1C_TR_COMPLETE, /* 2*/
+   MDTR_MSG_32K_WRAP,        /* 3*/
+   MDTR_MSG_PRE_EQ_ASSERT,   /* 4*/
+   MDTR_MSG_POST_EQ_ASSERT,  /* 5*/
+   MDTR_MSG_CD_DONE_ASSERT,  /* 6*/
+   MDTR_MSG_PENDING_PARAMS,  /* 7*/
+   MDTR_MSG_TIMING_PARAMS,   /* 8*/
+   MDTR_MSG_DLY_RESUME_SET,  /* 9*/
+   MDTR_MSG_DLY_RESUME_CLR,  /*10*/
+   MDTR_MSG_ALIGN_FRAME      /*11*/
+} MDTR_DBG_MSG;
+
+bool L1D_MDTR_TimingAbnormal(void);
+void L1D_MDTR_DebugMessage(MDTR_DBG_MSG msgID, int32 param1, int32 param2);
+void L1I_MDTR_RaisePendingFlag(void);
+void L1I_MDTR_RaiseRecoverFlag(intx frames, intx ebits);
+
+void   L1_Get_Cal_Data_Download_Info( void );
+void   L1T_UpdateCalibrationData( kal_uint32 cal_lid, L1dOperationMode mode );
+uint16 L1D_Check_PM_Window_Is_Available( void );
+#if IS_FORCE_ENHENCE_PM_SUPPORT
+void L1D_Set_Force_Enhence_PM(bool enable, L1D_APIcaller_id caller);
+#endif
+int16  L1D_Get_RFOnTime( void );
+
+#ifdef __SGTDS_STANDBY_AFC_TRACKING__
+Standby_AfcParams_list* L1I_GetStandbyAFCList_TDD( void );
+bool L1I_IsTDDinDedicate( void );
+bool L1I_IsSpecialGAPHandlingStarted( void );
+#ifdef __GL1_GEMINI__
+void L1I_ClearReservation_SGTDS( void );
+#endif
+#endif
+
+#ifdef __GL1_GEMINI_WCDMA__
+bool L1I_QueryAnyPLMN_BSIC_NBCCh( void );
+#endif
+
+#if IS_2G_RXD_SUPPORT 
+uint16 L1D_RAS_NVRAM_LID_QUERY(void);
+#endif /* IS_2G_RXD_SUPPORT */
+
+#if IS_2G_TAS_SUPPORT||IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+   #if IS_2G_Gen95_UTAS_SUPPORT || ( CUR_GEN > MD_GEN95 )
+void L1I_AssignUTASParameters( TASPublicParams* custom_param, MMRFD_ANT_HW_LAYOUT_INFO_T* ant_hw_layout_info);
+#if IS_GSM_TX_DETECTOR_SUPPORT
+void L1I_UpdateTxDValue( Power avg_txPower_det );                                       //L1C->L1D
+#endif /* End of IS_GSM_TX_DETECTOR_SUPPORT*/
+   #elif IS_2G_TAS_SUPPORT
+void L1I_AssignTASParameters( TASPublicParams* public );                               //L1C->L1D
+   #else
+   #endif
+uint16 L1D_TAS_NVRAM_LID_QUERY(void);                                                  //L1D->L1C
+bool L1_CheckSimMode(l1c_sim_mode_enum local_sim_mode);                                //L1C->L1D
+   #if IS_2G_TAS_INHERIT_4G_ANT
+bool L1I_QueryInheritAntennaFromLteBand(kal_uint8 g_band,kal_uint8* l_band);           //L1C->L1D
+   #endif
+#endif
+
+#if defined(__MD93__)
+#if IS_2G_RXD_SUPPORT
+AntennaStatus L1I_QueryAntennaStatus( FrequencyBand band, l1c_sim_mode_enum local_sim_mode, uint8 *rxd_mode);
+#elif IS_2G_TAS_SUPPORT
+AntennaStatus L1I_QueryAntennaStatus( FrequencyBand band, l1c_sim_mode_enum local_sim_mode);
+#endif /*IS_2G_RXD_SUPPORT*/
+#endif /* __MD93__*/
+
+#if IS_2G_RXD_SUPPORT
+void L1I_AssignRASParameters( RASPublicParams* public ); /* for l1d to assign RAS public parameter from NVRAM */
+#endif
+
+#if IS_2G_DYNAMIC_HW_CLOCK_SUPPORT
+void L1I_AssignParameters_HW_CLOCK( L1D_RF_INTERFERENCE_ARFCN_INDICATION_T* HWClockParams );
+#endif
+
+void  L1D_CheckAllGl1dActDone( Report *report, L1D_APIcaller_id caller );
+
+#if IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT
+uint8 L1D_Apply_Frequent_Wakeup(void);
+#endif /* IS_AFC_CAPABILITY_ENHANCEMENT_SUPPORT */
+
+#if IS_FAST_TIMING_ADJUST_SUPPORT
+void L1I_Set_TCh_timing_adjustment(l1c_sim_mode_enum local_sim_mode, int16 timing_adj);
+#endif
+
+/****************************************************************************
+  FUNCTION NAME: GL1_FLIGHT_MODE_SWITCH
+
+  DESCRIPTION:   GL1 PERF recovery API
+
+  PARAMETERS:    None   
+
+  RETURNED VALUES: None
+
+*****************************************************************************/
+#define GL1_ASSERT_Reboot( st )                          if(!(st))   ASSERT( 0 )
+
+#ifdef __MTK_TARGET__
+#define GL1_WARNING(expr) MODEM_WARNING_MESSAGE( expr )
+
+#if defined(__GL1_GEMINI__)
+#define GL1_FLIGHT_MODE_SWITCH \
+{                                                   \
+    protocol_exception_recovery_info_struct info;   \
+    info.protocol_id = l1c_sim_mode;      \
+    info.disable_escalate_recovery = KAL_TRUE;     \
+    info.debug.p_buf = NULL;                        \
+    info.debug.size = 0;                            \
+    PROTOCOL_EXCEPTION_RECOVERY( MOD_L1, RECOVERY_TYPE_FLIGHT_MODE, &info );\
+}
+#else
+#define GL1_FLIGHT_MODE_SWITCH \
+{                                                   \
+    protocol_exception_recovery_info_struct info;   \
+    info.protocol_id = 0;      \
+    info.disable_escalate_recovery = KAL_TRUE;     \
+    info.debug.p_buf = NULL;                        \
+    info.debug.size = 0;                            \
+    PROTOCOL_EXCEPTION_RECOVERY( MOD_L1, RECOVERY_TYPE_FLIGHT_MODE, &info );\
+}
+#endif /* End of defined(__GL1_GEMINI__)*/
+#else /* XlSIM*/
+#define GL1_WARNING(expr) GL1_ASSERT_Reboot( expr )
+#define GL1_FLIGHT_MODE_SWITCH     (void)0
+#endif /* __MTK_TARGET__ */
+
+#endif /*l1_generic_l1_public_h*/
diff --git a/mcu/l1/interface/gl1/l1_rtb_timertype.h b/mcu/l1/interface/gl1/l1_rtb_timertype.h
new file mode 100644
index 0000000..5f227ba
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_rtb_timertype.h
@@ -0,0 +1,105 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   l1_rtb_timertype.h
+ *
+ * Project:
+ * --------
+ *   Umoly_Software
+ *
+ * Description:
+ * ------------
+ *   Real Time Base for MM Gemini project
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * $Log$
+ *
+ * 05 30 2019 priyanshi.jain
+ * [MOLY00402003] [VMOLY] GEMINI N+L DSDS
+ * DSDS Phase-1 changes
+ *
+ * 07 03 2015 terence.chen
+ * [MOLY00124313] Change the path of l1_rtb.h and check-in the code of SRLTE
+ * <saved by Perforce>
+ *
+ * 06 05 2015 arkadeep.sett
+ * Created header file to move RTB timer definitions
+ */
+#ifndef L1_RTB_TIMERTYPE_H
+#define L1_RTB_TIMERTYPE_H
+
+
+#define MERGE_STR(x,y)    x##y   /* ex : if x=123 and y=456, then MERGE_STR(x,y)=123456 */
+#define L1_TIMER_TYPE(x)  MERGE_STR(rG,x)   /* ex : if x=TimerNone, then MERGE_STR(rG,x)=rGTimerNone */
+#define UL1_TIMER_TYPE(x) MERGE_STR(r,x)
+#define TL1_TIMER_TYPE(x) MERGE_STR(r,x)
+#define EL1_TIMER_TYPE(x) MERGE_STR(r,x)
+#define CL1_TIMER_TYPE(x) MERGE_STR(r,x)
+#define NL1_TIMER_TYPE(x) MERGE_STR(r,x)
+
+/* Define timertype in l1_rtb.c; otherwise, the module which included l1_rtb.h may have build error. */
+typedef enum
+{
+   rTimerInit = -1,
+   #include "l1_timertype.h"
+   #include "ul1_timertype.h"
+   #include "tl1_timertype.h"
+   #include "el1_timertype.h"
+   #include "cl1_timertype.h"
+#if defined(__NR_RAT__)
+   #include "nl1_rx_timertype_public.h"
+#else
+   NL1_TIMER_TYPE( NTIMER_NONE ), // NTIMER_NONE must be the first timer name. (RTB interface requirement)
+   NL1_TIMER_TYPE( NTIMER_END ), // NTIMER_END must be the last timer name. (RTB interface requirement) 
+#endif
+   rTimerNum
+}rTimerType;
+
+#undef MERGE_STR
+#undef L1_TIMER_TYPE
+#undef UL1_TIMER_TYPE
+#undef TL1_TIMER_TYPE
+#undef EL1_TIMER_TYPE
+#undef CL1_TIMER_TYPE
+#undef NL1_TIMER_TYPE
+
+#endif
diff --git a/mcu/l1/interface/gl1/l1_surround_private.h b/mcu/l1/interface/gl1/l1_surround_private.h
new file mode 100644
index 0000000..f4119d8
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_surround_private.h
@@ -0,0 +1,740 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   l1_surround_private.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *  Surround cell handling private stuff. 
+ *
+ * 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!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef l1_generic_l1_surround_private_h
+#define l1_generic_l1_surround_private_h
+
+#include "l1_core_private.h"
+#include "tool.h"
+#include "l1_types.h"
+#include "mph_types.h"
+#include "l1d_cid.h"
+#include "kal_general_types.h"
+
+#if 1 //__NORMAL_NW_SEARCH__        
+
+#define MAX_MANUAL_IDLE_CELLS    12
+#define MAX_TRIES_FB_PLMN         2
+
+#else
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+#if IS_GSM_EM_TX_POWER_CONTROL_SUPPORT
+
+typedef struct
+{
+   PowerControlLevel UserPCLevel ;
+   FrequencyBand     UserBand;
+   uint8             mode;
+   bool              valid;
+   FrequencyBand     Serving_band;
+   PowerControlLevel NetworkPCLevel;
+   Power             CurrentPower;
+   #ifdef __EPSK_TX__
+   Power             CurrentPowerEPSK;
+   #endif
+   uint32            apc_dac;
+} force_pcl_struct;
+
+#endif
+
+#define MAX_BSIC_QUEUE_COUNT   32
+#define MAX_IDLE_QUEUE_CELLS     MAX_MANUAL_IDLE_CELLS  + 6
+#ifdef __GL1_MULTI_MODE__
+#define MAX_STANDBY_QUEUE_CELLS     MAX_IDLE_QUEUE_CELLS
+#endif
+#ifdef __GL1_MULTI_MODE__
+//#define MAX_TRIES_FB        2  // for sim1
+#define   MAX_TRIES_FB     ((IS_SIM1)?(2):(1))
+#else                        
+#define MAX_TRIES_FB        1
+#endif
+#define MAX_TRIES_SB        3
+#define MAX_TRIES_EXT_FB    1
+
+EXTERN_TRACE_CLASS( tcSC );
+EXTERN_TRACE_CLASS( tcSC_FB );
+EXTERN_TRACE_CLASS( tcSC_SB );
+EXTERN_TRACE_CLASS( tcSC_SI );
+
+typedef struct
+{
+   bool       bsicKnown;
+   bool       queueing;
+   bool       manual;
+   bool       retry_FB_SB;
+   bool       short_FB;   
+   bool       extended;  
+#if 1 //__NORMAL_NW_SEARCH__
+   bool       FreqCorrect; 
+#endif
+   /* number of current try when receiving (starts with zero) */
+   uint8      tryNo;
+   /* add this to distinguish from different req but for internal */    
+    uint8          tid;
+  
+   SurroundBS* bs;
+   Time       lag;             /* only valid if bsicKnown == true */
+    
+#ifdef __GL1_MULTI_MODE__ // Only for SIM1
+   bool       hp_sb_valid; 
+   kal_uint16 hp_sb_pos;
+   /* For 3G in DCH/FACH mode, 25.133 defines Treconf_FACH, Tidentify_FACH, Treconf_DCH. 
+      For 3G in PCH mode, we will use tryNo, MAX_TRIES_FB, MAX_TRIES_SB. */
+   TimeStamp start_timeStamp; 
+   bool use_reconfirm_drop_cell_criterion; /* For init BSIC, it is false. For reconfirm BSIC, its is true. This field is only valid for DCH/FACH mode. */
+   TimeStamp timeStamp;
+#endif
+#ifdef __GL1_MULTI_MODE__      
+   bool is_cgi;
+   bool is_enhanced_bsic;
+#ifdef __GL1_GEMINI_WCDMA__
+   bool is_PLMNList;
+#endif
+#endif 
+} scCellBSIC;
+
+#ifdef __GL1_MULTI_MODE__
+typedef struct
+{
+   bool       hp_sb_valid; 
+   kal_uint16 hp_sb_pos;
+   TimeStamp  start_timeStamp;
+   Time       lag;
+   uint8      tryNo;
+} scCellBSICHpSBInfo;
+#endif
+
+typedef struct
+{
+   BSIC       bsic;            /* only valid if bsicKnown == true */
+
+   bool       bsicKnown;
+  
+   bool       queueing;
+   bool       manual;
+   bool       is_prior_to_acquire;   
+   /* number of current try when receiving (starts with zero) */
+   uint8      bcchTryNo;
+#ifdef __GL1_GEMINI__
+   uint16     priority_index;
+#else
+   uint8      priority_index;
+#endif
+   /* mask specifying which BCCh blocks to receive. Only valid in idle mode */
+   uint16     bcchMask; /* bit 0..7: BCCh normal, bit 8..15: BCCh ext */
+   uint16     penalty;
+
+   SurroundBS* bs;
+   Time       lag;             /* only valid if bsicKnown == true */
+#ifdef __GL1_MULTI_MODE__    
+   bool is_cgi;
+#endif 
+#ifdef __GL1_GEMINI_WCDMA__
+   bool is_PLMNList;
+#endif
+} scCellBCCH;
+
+typedef struct
+{
+   uint8 queueCnt; 
+   scCellBSIC queue[32]; 
+} BsicCellQueue;
+
+
+typedef struct
+{
+   bool       use_priority_index_order;  
+   uint8 queueCnt;
+   scCellBCCH queue[MAX_IDLE_QUEUE_CELLS]; 
+} BcchCellQueue;
+
+
+typedef struct
+{
+   /* true if suspended and not allowed to receive FCB, SB or BCCh */
+   bool                   suspended;
+
+   /* MAUI_02615979: Clear ncPower when the first ReportSurroundMeasurement after NC meas. report sent is received */
+   bool                   ncReportCanClear;   // True: after NC meas. report sent
+
+   /* the serving cell */
+
+   bool                   GPRSFlag;        /* distinguish TCH or Packet transfer mode*/
+#ifdef __GL1_GEMINI__
+   bool                   IsVirtualMode;
+#endif
+
+   SurroundMode           mode;
+   SurroundMode           oldmode;
+   SurroundMode           FreeHSmode;    /* used to trigger HS free procedure, Reset is default mode */
+   
+//#if ( defined( __L1_GPS_AUTO_TIMING_SYNC_SUPPORT__  ) || defined( __L1_GPS_REF_TIME_SUPPORT__  ) )
+   BSIC                   servingCellBSIC;
+//#endif
+   
+   TimeSlot               timeSlot;
+   TimeSlot               startTimeSlot;
+   bool                   slotDiff;
+   bool                   SetSyncBCChinNull;   /* Rick: To distinguish if SIM did the specific sync BCCh in null mode or not */
+
+   ARFCN                  servingCellARFCN;
+   intx                   sacchPosition;   /* position of the SACCh. 0=>12, 1=>25, 2=>38 ... */ 
+
+
+   /* set while a receive is in progress */
+
+   scCellBSIC*            receivingCell; /* NULL if no receive active */
+   scCellBCCH*            bcchReceivingCell; /* NULL if no receive active */
+   void                   ( *abortReceive )( void ); /* function to abort receive, only valid if receivingCell != NULL */
+
+#ifdef __GL1_MULTI_MODE__   // Only for SIM1
+   uint8                  ( *abortReceive_dm )( void ); /* function to abort receive, only valid if receivingCell != NULL */
+   bool                   gapfor3g;
+   uint8                  RLAcount;
+   bool                   dmResetMode; 
+   bool                   marginForTD; 	
+
+#ifdef __GERAN_R8__
+   SurroundBAList*        BAList_higher;
+#endif  /* __GERAN_R8__ */
+#endif   
+
+   /* BA list for this reporting period */
+   SurroundBAList*        BAList;
+
+   BsicCellQueue          bsic;
+   BcchCellQueue          bcch;
+   
+   PowerAverager          servingAvg;
+#if (IS_CHIP_MT6227_AND_LATTER_VERSION || IS_EDGE_CHIP_MT6229_AND_LATTER_VERSION)
+   uint8                  dcmHandle;
+#endif   
+} SurroundGlobals;
+
+#ifdef __GL1_GEMINI__
+#define scGlobals          scGlobals_database[l1c_sim_mode]
+#define local_scGlobals  scGlobals_database[local_sim_mode]
+extern SurroundGlobals  scGlobals_database[L1C_SIM_NUM];
+   #ifdef __BSIC_SEARCH_IN_PEER_IDLE_FRAME__
+#define mainSIM_scGlobals  scGlobals_database[mainSimIdx]
+extern l1c_sim_mode_enum  mainSimIdx; /*In Gemini2.0, it is the SIM which is in PTM. */
+   #endif /*__BSIC_SEARCH_IN_PEER_IDLE_FRAME__*/
+#else
+#define local_scGlobals  scGlobals
+extern SurroundGlobals  scGlobals;
+#endif
+
+/* m11280.c */
+#if defined (__GL1_GEMINI__) && defined(__BSIC_SEARCH_IN_PEER_IDLE_FRAME__)
+FrameNumber L1I_GetNextFN_MainSIM( TimeSlot timeSlot, intx* syncEBits);
+void L1I_GetTime_MainSIM(Time* time);
+bool L1I_QueryBsicSearchInPeerIdleFrame(void);
+void L1T_SurroundBSICRestart_SIMx(l1c_sim_mode_enum sim_idx);
+#endif /*__GL1_GEMINI__ && __BSIC_SEARCH_IN_PEER_IDLE_FRAME__*/
+
+/* m11281.c */
+#if defined( __GL1_MULTI_MODE__ ) && defined( __GERAN_R8__ )
+void          L1T_SurroundBAlistInit( kal_bool is_higher_priority );
+#else
+void          L1T_SurroundBAlistInit( void );
+#endif /* __GL1_MULTI_MODE__ && __GERAN_R8__ */
+void          L1T_SurroundBAlistExit( void );
+void          L1T_SurroundClearBAList( void );
+void          L1T_SurroundClearQueue( void );
+
+ScanList*     L1T_SurroundGetScanList( void );
+ScanList*     L1T_SurroundGetNewScanList( void );
+ScanList* L1I_CreateScanList_SISR( void );
+
+
+bool L1T_SurroundSetPendingBAList( SurroundBAList* BAList );
+void L1T_SurroundUsePendingBAList( void );
+
+void L1T_SurroundResetPowerAveragers( void );
+void L1T_SurroundUpdateAveragers( ScanList* scanList );
+
+void L1T_SurroundAveragersAverageWithLast( ScanList* scanList );
+void L1T_SurroundUpdateRxPower( ScanList* scanList );
+void L1T_SurroundUpdateRxPowerFromAveragers( void );
+
+void L1T_SurroundClearNCPower( void );
+void L1T_SurroundNormaliseNCPower( void );
+void L1T_SurroundSendRLAReport( void );
+void L1T_SurroundSendNCReport( void );
+
+/* m11282.c */
+
+void L1T_SurroundEnterIdle( void );
+void L1T_SurroundLeaveIdle( bool stopMeas );
+void L1T_SurroundMeasurementsDoneIdle( ScanList* scanList );
+void L1T_SurroundSetBAListIdle( SurroundBAList* BAList );
+#ifdef __GL1_MULTI_MODE__
+void L1T_SurroundSendGSMRSSIReport( void );
+void L1T_SurroundSetBAListStandby( SurroundBAList* BAList );
+void L1T_SurroundResetBSICSearchTime( bool ResetInitBSIC, bool ResetReconfBSIC );
+void L1T_SurroundSChDoneStandby( scCellBSIC* cell, SChData* sch );
+void L1T_SurroundBCChDoneStandby( scCellBCCH* cell, RxData* bcch, bool next );
+void L1T_SurroundResumeStandby( void );
+#endif
+void L1T_SurroundSChDoneIdle( scCellBSIC* cell, SChData* sch );
+void L1T_SurroundBCChDoneIdle( scCellBCCH* cell, RxData* bcch, bool next );
+void L1T_SurroundReportTickIdle( void );
+void L1T_SurroundResumeIdle( void );
+void L1T_SurroundBSICIdleReq( const SCBsicInfo* sc );
+void L1T_SurroundBCChIdleReq( const SCBcchInfo* sc );
+void L1T_SurroundBSICIdleStop( const SCBsicStopInfo* sc );
+void L1T_SurroundBCChIdleStop( const SCBcchStopInfo* sc );
+#ifdef __GL1_MULTI_MODE__
+void L1T_SurroundBSICStandbyReq( const SCBsicInfo* sc );
+void L1T_SurroundBSICStandbyStop( const SCBsicStopInfo* sc );
+void L1T_NextBSICStandby( void );
+void L1T_NextBSICStandby_Report( Report* report );
+void L1I_NextBSICStandby(void);
+void L1T_Next_BSICSC_Report(Report* report);
+void L1T_SurroundBCChStandbyReq( const SCBcchInfo* sc );
+void L1T_SurroundBCChStandbyStop( const SCBcchStopInfo* sc );
+void L1T_NextBCChStandby( void );
+void L1T_NextBCChStandby_Report( Report* report );
+void L1I_NextBCChStandby( void );
+#endif
+void L1T_NextBSICIdle( void ); 
+int32 L1T_SurroundPagingBlocksPerPeriodIdle( int32 framesPerPeriod );
+//void L1T_SurroundClearManualList( void ); /* move to l1_core.h for BLindHO*/
+/* m11284.c */
+
+void L1T_SurroundEnterDedi( void );
+void L1T_SurroundLeaveDedi( void );
+void L1T_SurroundMeasurementsDoneDedi( ScanList* scanList );
+void L1T_SurroundSetBAListDedi( SurroundBAList* BAList );
+void L1T_SurroundUpdateCellFlagsDedi( void );
+void L1T_SurroundNextBSICDedi( void );
+void L1T_SurroundSChDoneDedi( scCellBSIC* cell, SChData* sch );
+void L1T_SurroundResumeDedi( void );
+void L1T_SurroundReportTickDedi( void );
+void L1T_SurroundSChDoneDedi( scCellBSIC* cell, SChData* sch );
+void L1T_SurroundBSICDediReq( const SCBsicInfo* sc );
+void L1T_SurroundBSICDediStop( const SCBsicStopInfo* sc );
+bool L1I_QueryAnyBSIC( void );
+
+/* m11285.c */
+
+void L1T_SurroundEnterDediSDCCh( void );
+void L1T_SurroundLeaveDediSDCCh( void );
+void L1T_SurroundMeasurementsDoneDediSDCCh( ScanList* scanList );
+
+/* m11286.c */
+
+void L1T_SurroundEnterDediTCh( void );
+void L1T_SurroundLeaveDediTCh( void );
+#ifdef __GL1_MULTI_MODE__
+void L1T_SurroundStopDediSC( void );
+void L1T_SurroundStopPacketTransferSC( void );
+#endif
+void L1T_SurroundMeasurementsDoneDediTCh( ScanList* scanList );
+
+/* m11287.c */
+#ifdef __PS_SERVICE__
+void L1T_StartMeasurement( void );
+void L1T_SurroundEnterPacketIdle( SurroundMode oldMode );
+void L1T_SurroundLeavePacketIdle( void );
+void L1T_SurroundMeasurementsDonePacketIdle( ScanList* scanList );
+void L1T_SurroundSetBAListPacketIdle( SurroundBAList* BAList );
+void L1T_SurroundSChDonePacketIdle( scCellBSIC* cell, SChData* sch );
+void L1T_SurroundReportTickPacketIdle( void );
+void L1T_SurroundResumePacketIdle( void );
+void L1T_SurroundPagingBlockTickPacketIdle( bool isPPCh );
+void L1T_SurroundNextBSICPacketIdle( void );
+int32 L1T_SurroundPagingBlocksPerPeriodPacketIdle( int32 framesPerPeriod );
+void L1T_SurroundFramesPerPeriodPacketIdle( int32 period );
+void L1T_UpdateMeasurementDuration( void );
+
+/* m11288.c */
+
+void L1T_SurroundEnterPacketTransfer( void );
+void L1T_SurroundLeavePacketTransfer( void );
+void L1T_SurroundMeasurementsDonePacketTransfer( ScanList* scanList );
+void L1T_SurroundSetBAListPacketTransfer( SurroundBAList* BAList );
+void L1T_SurroundSChDonePacketTransfer( scCellBSIC* cell, SChData* sch );
+void L1T_SurroundBCChDonePacketTransfer( scCellBCCH* cell, RxData* bcch );
+#endif
+/* m11289.c */
+
+void        L1T_SurroundReceiveFCCh( scCellBSIC* cell );
+void        L1T_SurroundReceiveSCh( scCellBSIC* cell );
+void        L1T_SurroundAbortReceive( void );
+void        L1T_SurroundReceiveBCCh( scCellBCCH* cell, NBCChPriority priority );
+void        L1T_SurroundAbortBCChReceive( void );
+FrameNumber L1T_SurroundGetFN( void );
+void        L1T_SurroundAbortReceiveOfRemovedCells( void );
+
+
+/* m11291.c */
+#ifdef __PS_SERVICE__
+#ifdef __PKT_EXT_MEAS__
+void L1T_SurroundNextBSICExtMeas( void );
+void L1T_SurroundReportExtendedMeasurement( void );
+void L1T_SurroundSChDoneExtendedMeasurement( SChData* sch );
+#endif
+void L1T_SurroundNCReport( void );
+void L1T_SurroundTickExtMeas( void );
+#endif
+#endif
diff --git a/mcu/l1/interface/gl1/l1_timertype.h b/mcu/l1/interface/gl1/l1_timertype.h
new file mode 100644
index 0000000..9bac4ad
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_timertype.h
@@ -0,0 +1,231 @@
+/*******************************************************************************
+*  Modification Notice:
+*  --------------------------
+*  This software is modified by MediaTek Inc. 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:
+ * ---------
+ *   l1_timertype.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Define 2G L1 timertype
+ *
+ * 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!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+L1_TIMER_TYPE(TimerNone),
+L1_TIMER_TYPE(TimerFullScan),
+L1_TIMER_TYPE(TimerFCBSearch),
+L1_TIMER_TYPE(TimerBCChNorm),
+L1_TIMER_TYPE(TimerBCChExt),
+L1_TIMER_TYPE(TimerPChNorm),
+L1_TIMER_TYPE(TimerPChExt),
+L1_TIMER_TYPE(TimerCBChNorm),
+L1_TIMER_TYPE(TimerCBChExt),
+L1_TIMER_TYPE(TimerSB),
+L1_TIMER_TYPE(TimerNBCChNorm),
+L1_TIMER_TYPE(TimerNBCChExt),
+L1_TIMER_TYPE(TimerNBCChSC),
+L1_TIMER_TYPE(TimerAGCh),
+L1_TIMER_TYPE(TimerRACh),
+L1_TIMER_TYPE(TimerDChStart),
+L1_TIMER_TYPE(TimerDChStop),
+L1_TIMER_TYPE(TimerHs),
+L1_TIMER_TYPE(TimerTCh),
+L1_TIMER_TYPE(TimerSACChT),
+L1_TIMER_TYPE(TimerSDCChUp),
+L1_TIMER_TYPE(TimerSDCChDn),
+L1_TIMER_TYPE(TimerSACChUp),
+L1_TIMER_TYPE(TimerSACChDn),
+L1_TIMER_TYPE(TimerFCBT),
+L1_TIMER_TYPE(TimerSBT),
+L1_TIMER_TYPE(TimerPwrCtrl),
+L1_TIMER_TYPE(TimerReportPeriod),
+L1_TIMER_TYPE(TimerCM),
+L1_TIMER_TYPE(TimerPBCCh),
+L1_TIMER_TYPE(TimerNPBCCh),
+L1_TIMER_TYPE(TimerPPChNorm),
+L1_TIMER_TYPE(TimerPPChExt),
+L1_TIMER_TYPE(TimerSurroundMeasurement),
+L1_TIMER_TYPE(TimerPAGCh),
+L1_TIMER_TYPE(TimerPRACh),
+L1_TIMER_TYPE(TimerTBFStart),
+L1_TIMER_TYPE(TimerTBFStop),
+L1_TIMER_TYPE(TimerPDCh),
+L1_TIMER_TYPE(TimerReportPDCh),
+L1_TIMER_TYPE(TimerPTCChDown),
+L1_TIMER_TYPE(TimerPTCChUp),
+L1_TIMER_TYPE(TimerIM),
+L1_TIMER_TYPE(TimerPOLLRESP),
+L1_TIMER_TYPE(TimerSingleDL),
+L1_TIMER_TYPE(TimerSingleULTwoPhase),
+L1_TIMER_TYPE(TimerSingleULWithoutTBF),
+L1_TIMER_TYPE(TimerRATSCChDL),
+L1_TIMER_TYPE(TimerRATSCChUL),
+L1_TIMER_TYPE(TimerReset),
+L1_TIMER_TYPE(TimerTickL2),
+L1_TIMER_TYPE(TimerPeek), //SM_WAKEUP_COMPENSATION
+L1_TIMER_TYPE(TimerNCReport),
+L1_TIMER_TYPE(TimerStopAllChannel),
+L1_TIMER_TYPE(TimerSuspend),
+L1_TIMER_TYPE(TimerGAP),
+L1_TIMER_TYPE(TimerSB_DM),
+L1_TIMER_TYPE(TimerFB_DM),
+L1_TIMER_TYPE(TimerTick),
+L1_TIMER_TYPE(Timer3G_Search),
+L1_TIMER_TYPE(TimerGAP_Stop),
+L1_TIMER_TYPE(TimerBSICSC_DM), /* For L1C/SC internal use. */
+L1_TIMER_TYPE(TimerStandbyDone),
+L1_TIMER_TYPE(TimerIRATSYNC_DM),
+L1_TIMER_TYPE(TimerDTS),
+L1_TIMER_TYPE(TimerUTS),
+L1_TIMER_TYPE(TimerNSFT),
+L1_TIMER_TYPE(TimerLoopback),
+L1_TIMER_TYPE(TimerL1AGps),
+L1_TIMER_TYPE(TimerServingSB),
+L1_TIMER_TYPE(TimerSendGapEnd),
+L1_TIMER_TYPE(TimerActiveRAT),
+L1_TIMER_TYPE(TimerStandby),
+L1_TIMER_TYPE(TimerSuspendPM),
+L1_TIMER_TYPE(TimerGapReport),
+L1_TIMER_TYPE(TimerTickGAP),
+L1_TIMER_TYPE(TimerSuspendGAPPM),
+L1_TIMER_TYPE(TimerSuspnedPwrScan),
+L1_TIMER_TYPE(TimerSuspendBA),
+L1_TIMER_TYPE(TimerSuspendPwrScanCGI),
+L1_TIMER_TYPE(TimerSuspendDedi2G),
+L1_TIMER_TYPE(TimerFCChWinOff),
+L1_TIMER_TYPE(TimerAutoGAP),    //for GSM active auto gap
+L1_TIMER_TYPE(TimerReportAutoGAP),    //for GSM active auto gap start report
+L1_TIMER_TYPE(TimerCGIPowerScan),    //for CGI scan in GSMAutoGAP
+L1_TIMER_TYPE(TimerCGIFCBSearch),    //for BSIC in GSMAutoGAP
+L1_TIMER_TYPE(TimerCGINBCChNorm),        //for NBCCh in GSMAutoGAP
+L1_TIMER_TYPE(TimerCGINBCChExt),        //for NBCCh in GSMAutoGAP
+L1_TIMER_TYPE(TimerGSMAutoGAPStop),  //to stop GSM auto gap
+L1_TIMER_TYPE(TimerGSMAutoGAPEnd),  //to send auto gap end
+L1_TIMER_TYPE(TimerGAP_PM),
+L1_TIMER_TYPE(TimerGAP_Suspend),
+L1_TIMER_TYPE(TimerUTSStop),
+L1_TIMER_TYPE(TimerTSTSDCChUp),
+L1_TIMER_TYPE(TimerTSTSDCChPauseDTIRQ),
+L1_TIMER_TYPE(TimerTSTDChStop),
+L1_TIMER_TYPE(TimerMetaPDCh),
+L1_TIMER_TYPE(TimerMetaPdtchPauseDTIRQ),
+L1_TIMER_TYPE(TimerMetaPdtchStop),
+L1_TIMER_TYPE(TimerGAP_PowerScan),
+L1_TIMER_TYPE(TimerDUMMYFB_DM),
+L1_TIMER_TYPE(TimerSRVCCGapSet),
+L1_TIMER_TYPE(TimerSRVCCGapReset),
+L1_TIMER_TYPE(TimerVirtualSuspendCnf),
+L1_TIMER_TYPE(TimerEnd),
diff --git a/mcu/l1/interface/gl1/l1_tool.h b/mcu/l1/interface/gl1/l1_tool.h
new file mode 100644
index 0000000..a21f9d2
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1_tool.h
@@ -0,0 +1,509 @@
+/*******************************************************************************
+*  Modification Notice:
+*  --------------------------
+*  This software is modified by MediaTek Inc. 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:
+ * ---------
+ *   l1_tool.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   Layer1 core global tools
+ *
+ * Author:
+ * -------
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:   1.11  $
+ * $Modtime:   Jul 19 2005 17:19:28  $
+ * $Log:   //mtkvs01/vmdata/Maui_sw/archives/mcu/l1/common/l1_tool.h-arc  $
+ *
+ * 06 04 2018 priyanshi.jain
+ * [MOLY00330249] ELT????-???? GSM?????? SNR?
+ * 	
+ * 	UMOLYE Real SNR
+ *
+ * 12 18 2015 terence.chen
+ * [MOLY00153957] [UMOLY] Sync code from LR11 to UMOLY
+ * Sync GL1A/C and RTB code from LR11.
+ *
+ * 12 04 2014 rick.wu
+ * [MOLY00083549] [MT6291] Merge GL1 codes from MT6291_DEV to UMOLY
+ * Fix build error
+ *
+ * 05 23 2014 rick.wu
+ * [MOLY00063424] [TK6291][L1S][GL1AC] U3G code check in for L1S load
+ * .
+ *
+ * 01 23 2014 rick.wu
+ * [MOLY00054324] [4G Gemini][Merge] MOLY.MM.GEMINI.DEV Merge back to MOLY
+ * .
+ *
+ * 01 22 2014 hsin-chun.chen
+ * [MOLY00054353] Mapping GAS_n to GL1_n in SGLTE and SGLTE DSDS in accordance with MM.GEMINI check in
+ * 	<saved by Perforce>
+ *
+ * 03 19 2012 william.lin
+ * removed!
+ * .
+ *
+ * 03 13 2012 william.lin
+ * removed!
+ * .
+ *
+ * 03 12 2012 william.lin
+ * removed!
+ * .
+ *
+ * 01 17 2012 william.lin
+ * removed!
+ * .
+ *
+ * 06 08 2011 samuel.yang
+ * removed!
+ * .
+ *
+ * 06 08 2011 jp.lien
+ * removed!
+ * .
+ *
+ * 04 12 2011 sy.yeh
+ * removed!
+ * .
+ *
+ * 02 07 2011 yr.chiang
+ * removed!
+ * .
+ *
+ * 12 15 2010 jp.lien
+ * removed!
+ * .
+ *
+ * 12 15 2010 chang-kuan.lin
+ * removed!
+ * .
+ *
+ * 08 08 2010 yr.chiang
+ * removed!
+ * .
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * Fix L1D build warnings for RVCT31
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * For L1D code revision
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * add to source control recursely
+ *
+ * removed!
+ * removed!
+ * Seperate l1_tool.h to l1_tool.h + tool.h
+ *
+ * removed!
+ * removed!
+ * 
+ *
+ * removed!
+ * removed!
+ * Checkin L1C dual mode source codes
+ *
+ * removed!
+ * removed!
+ * 
+ * 
+ *    Rev 1.11   Jul 19 2005 17:24:20   mtk00674
+ * Fix compile error in simulation for AMR to add MT6228 / MT6227 compile option
+ * Resolution for 12011: [L1C][update] For AMR simulation tp add MT6228 / MT6227 compile option
+ * 
+ *    Rev 1.10   May 17 2005 00:33:12   BM_Trunk
+ * Karlos:
+ * add copyright and disclaimer statement
+ * 
+ *    Rev 1.9   Jan 26 2005 17:47:16   mtk00248
+ * Add ScanInt8 and ScanInt8Range.
+ * 
+ *    Rev 1.8   Jan 18 2005 00:37:12   BM
+ * append new line in W05.04
+ * 
+ *    Rev 1.7   May 03 2004 17:41:38   mtk00474
+ * Reason:
+ *  for L1A simulation environment
+ * Solution:
+ *  Add ASSERT before kal_mem_cpy to avoid copy the non-sense freq. list members to L1C
+ *  Sync. some parameters of some sub-routines of simulated-files to real files.
+ * Verify:
+ *  Run the simulation tool 
+ * 
+ * Resolution for 5259: update L1A simulation environment
+ * 
+ *    Rev 1.6   May 22 2003 17:25:56   mtk00274
+ * Add L1_PowerAveragerPutPt to calculate one second running average in packet transfer mode.
+ * Resolution for 1606: [L1C][Update]Add TA value debug code on PTCCH channel handler.
+ * 
+ *    Rev 1.5   05 Mar 2003 14:42:42   mtk00276
+ * Not to use "__HW_DIVIDER__" compile option.
+ * Resolution for 1125: Dividers checkin
+ * 
+ *    Rev 1.4   03 Mar 2003 17:52:48   mtk00276
+ * Divider checkin
+ * Resolution for 1125: Dividers checkin
+ * 
+ *    Rev 1.3   03 Mar 2003 17:26:04   mtk00276
+ * Divider checkin
+ * Resolution for 1125: Dividers checkin
+ * 
+ *    Rev 1.2   03 Mar 2003 17:23:08   mtk00276
+ * Divider checkin.
+ * Resolution for 1125: Dividers checkin
+ * 
+ *    Rev 1.1   28 Jan 2003 10:54:06   mtk00276
+ * Add check SIM function for turbo sleep mode and smart HO mechanism. If test SIM presents(or SIM type unknown), we 
+ * shall disable turbo sleep mode(not to delay report handling),
+ *  and shall not enable smart HO mechanism.
+ * Resolution for 774: Add check SIM function for turbo sleep mode and smart HO mechanism
+ * 
+ *    Rev 1.0   Nov 30 2002 19:50:14   admin
+ * Initial revision.
+ *
+ *    Rev 1.2   20 Sep 2002 14:54:48   mtk00248
+ * Add compile option to the following code:
+ * void ConsolePrintf( const char* format, ... );
+ * void ConsoleVPrintf( const char* format, va_list args );
+ * void ConsoleFlush( void );
+ * void ConsolePutchar( char c );
+ *
+ *    Rev 1.1   11 Sep 2002 16:02:08   mtk00274
+ * Merge Albert's code.
+ *
+ *    Rev 1.0   Sep 06 2002 11:18:58   admin
+ * Initial revision.
+ *
+ *    Rev 1.5   Jul 04 2002 23:35:00   mtk00210
+ * Enhance L1 assert and display message on LCD on target environment
+ *
+ *    Rev 1.4   Apr 29 2002 08:58:28   mtk00274
+ * Send ReportReportPeriodDone when first PCH is received to resolve GSM11.10 test case 20.6
+ *
+ *    Rev 1.3   Jan 24 2002 15:21:12   mtk00274
+ * Fix the data type of L1_PowerAveragerGet() from int16 to int32
+ *
+ *    Rev 1.2   Jan 03 2002 11:52:26   mtk00210
+ * merge the branch B.L1.20011225
+ *
+ *    Rev 1.1.1.1   Dec 27 2001 10:52:48   mtk00210
+ * correct author
+ *
+ *    Rev 1.1.1.0   Dec 25 2001 16:40:20   mtk00210
+ * revise L1 for RSSI, multiband AFC, new L1D/L1C interface,
+ * and new CBCH handler
+ *
+ *    Rev 1.1   Dec 21 2001 12:17:42   admin
+ * add copyright
+ *
+ *
+ *******************************************************************************/
+
+/******************************************************************************
+ *
+ *  File:            /MTKteam/source/gprsmtk/l1/generic/SCCS/s.l1_tool.h
+ *  -----
+ *
+ *  SCCS Version:    2.14
+ *  -------------
+ *
+ *  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 Communications Consultants Worldwide Limited (C) 2001
+ *
+ *  Project:
+ *  --------
+ *
+ *  Software Unit:  Layer1 core global tools.
+ *  --------------
+ *
+ *  Description:
+ *  ------------
+ *
+ *
+ *  Modification History:
+ *  ---------------------
+ *  Date       Vers  Auth  Details
+ *  ----       ----  ----  -------
+ *  28-Mar-01  2.1   VKL   Initial version
+ *  17-Apr-01  2.2   VKL   added L1_FrameNumberMod52 and L1_FrameNumberDiv
+ *  25-Apr-01  2.3   APB   Add PromoteScriptHandler()
+ *  27-Apr-01  2.4   VKL   Moved ring buffer handling from
+ *                         generic/l1_core_private.h to generic/l1_tool.h
+ *                         Moved hardware read and write macros from
+ *                         simulation/generic/simul_public.h to
+ *                         generic/l1_tool.h
+ *                         Fixed L1_FrameNumberDiv1326()
+ *  01-May-01  2.5   VKL   Simplify RB_COUNT
+ *  21-May-01  2.6   VKL   added L1_FrameNumberDiv52
+ *   1-May-01  2.7   APB   Add ScanPrintChk() reference
+ *  15-Jul-01  2.8   VKL   Added L1_FrameNumberMod104()
+ *  21-Sep-01  2.9   VKL   Added RB_PEEK and RB_CONSUME
+ *   1-Oct-01  2.10  SGB   Fix merge error
+ *   1-Oct-01  2.11  VKL   Add ScanTSC()
+ *  11-Oct-01  2.12  SY    Add  ScanUlTxPower()
+ *  12-Oct-01  2.13  SGB   Fix merge error
+ *  26-Oct-01  2.14  VKL   Add power averager
+ *   9-Nov-01  2.15  APB   Add TRACEC7 - 11
+ *   9-Nov-01  2.16  VKL   Add L1_PowerAveragerAverageWithLast()
+ *  15-Nov-01  2.17  APB   Add ScanEOL
+ *  04-Dec-01  2.18  VKL   Make rinbuffer members volatile
+ *                         Fix non simulated HW_WRITE and HW_READ
+ *
+ *****************************************************************************/
+
+#ifndef l1_generic_l1_tool_h
+#define l1_generic_l1_tool_h
+
+//#include "divider_public.h"  Remove from U3G
+#include "mph_types.h"
+#include "l1_types.h"
+#include "l1_types_public.h"
+#include "l1_core_private.h"
+#include "kal_general_types.h"
+
+#include "event_info_utility.h"
+/* --- frame numbers arithmetic -------------------------------------------- */
+
+FrameNumber L1_FrameNumberAdd(  FrameNumber a, int32 b );
+FrameNumber L1_FrameNumberSub(  FrameNumber a, int32 b );
+int32       L1_FrameNumberDiff( FrameNumber a, FrameNumber b );
+
+#define L1_FrameNumberMod(a,b)      ((intx)((a)%(b)))
+#define L1_FrameNumberMod13( a )    ((intx)((a)%13))
+#define L1_FrameNumberMod26( a )    ((intx)((a)%26))
+#define L1_FrameNumberMod51( a )    ((intx)((a)%51))
+#define L1_FrameNumberMod52( a )    ((intx)((a)%52))
+#define L1_FrameNumberMod102( a )   ((intx)((a)%102))
+#define L1_FrameNumberMod104( a )   ((intx)((a)%104))
+
+#define L1_FrameNumberDiv( a, b )   ((a)/(b))
+#define L1_FrameNumberDiv26( a )    ((a)/26)
+#define L1_FrameNumberDiv51( a )    ((a)/51)
+#define L1_FrameNumberDiv52( a )    ((a)/52)
+#define L1_FrameNumberDiv1326( a )  ((a)/1326)
+
+/* --- time arithmetic ----------------------------------------------------- */
+
+void L1_TimeAddWhileEBits( Time* time, intx ebits );
+void L1_TimeAddEBits( Time *time, intx ebits );
+void L1_TimeSubEBits( Time *time, intx ebits );
+void L1_TimeAdd( Time *time, FrameNumber frame, intx ebits );
+void L1_TimeSub( Time *time, FrameNumber frame, intx ebits );
+void L1_TimeNormalise( Time *time );
+bool L1_TimeOutCheck ( uint32 startTime, uint32 duartion );
+/* --- calculation of RLA_C ------------------------------------------------ */
+
+void L1_PowerAveragerReset( PowerAverager *a , SurroundMode mode );
+void L1_PowerAveragerPut( PowerAverager *a, Power power, kal_uint8 min_sample );
+void L1_PowerAveragerPutPt( PowerAverager *a, Power power );
+void L1_PowerAveragerAverageWithLast( PowerAverager *a, Power power );
+void L1_PowerAveragerGet( PowerAverager *a, PowerSum32 *power, kal_uint8 min_sample );
+void L1_SNRAveragerGet(SNRAverager *s,kal_int16 *snr);
+void L1_SNRAveragerPut(SNRAverager *s,kal_int16 snr);
+/* --- Idenify SIM1/SIM2 report -------------------------------------------- */
+
+#if !defined(__GL1_GEMINI__)
+#define GET_SIM_X_FROM_REPORT(_report)  (0) /*0->SIM1*/
+#define GET_SIM_X_FROM_HS(hs)           (0)
+#else
+#define GET_SIM_X_FROM_REPORT(_report)  (uint8)((_report->type & REPORT_SIM_MASK)>> 7) /*0->SIM1, 1->SIM2, 2->SIM3, 3->SIM4 */
+#define GET_SIM_X_FROM_HS(hs)           (hs->simIndex)
+#endif
+
+/*For show trace in catcher, SIM1: "[SIM1]xxxx" */
+#define SIM_MODE_STR(_mode)              (_mode + 1) 
+#define RTB_MODE_STR                     (L1C_SIM1 + 1)
+#define DEFAULT_SIM_MODE_STR             (L1C_SIM1 + 1)
+
+/* --- Dispatch L1C trace message---------------------- */
+#ifdef __GL1_GEMINI__
+#define L1C_MSG_14(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)\
+   { msg( SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14); }
+
+#define L1C_MSG_13(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)\
+   { msg( SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); }
+
+#define L1C_MSG_12(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)\
+   { msg( SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v12); }
+
+#define L1C_MSG_11(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)\
+   { msg( SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); }
+
+#define L1C_MSG_10(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); }
+
+#define L1C_MSG_9(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8, v9); }
+
+#define L1C_MSG_8(msg, v1, v2, v3, v4, v5, v6, v7, v8)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7, v8); }
+
+#define L1C_MSG_7(msg, v1, v2, v3, v4, v5, v6, v7)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6, v7); }
+
+#define L1C_MSG_6(msg, v1, v2, v3, v4, v5, v6)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5, v6); }
+
+#define L1C_MSG_5(msg, v1, v2, v3, v4, v5)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4, v5); }
+
+#define L1C_MSG_4( msg, v1, v2, v3, v4)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3, v4); }
+
+#define L1C_MSG_3( msg, v1, v2, v3)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2, v3); }
+
+#define L1C_MSG_2( msg, v1, v2)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1, v2); }
+
+#define L1C_MSG_1( msg, v1)\
+   { msg(SIM_MODE_STR(l1c_sim_mode), v1); }
+
+#define L1C_MSG_0( msg)\
+   { msg(SIM_MODE_STR(l1c_sim_mode)); }
+#else /*__GL1_GEMINI__*/
+#define L1C_MSG_14(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14);}
+#define L1C_MSG_13(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);}
+#define L1C_MSG_12(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);}
+#define L1C_MSG_11(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);}
+#define L1C_MSG_10(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8, v9, v10);}
+#define L1C_MSG_9(msg, v1, v2, v3, v4, v5, v6, v7, v8, v9) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8, v9);}
+#define L1C_MSG_8(msg, v1, v2, v3, v4, v5, v6, v7, v8) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7, v8);}
+#define L1C_MSG_7(msg, v1, v2, v3, v4, v5, v6, v7) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6, v7);}
+#define L1C_MSG_6(msg, v1, v2, v3, v4, v5, v6) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5, v6);}
+#define L1C_MSG_5(msg, v1, v2, v3, v4, v5) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4, v5);}
+#define L1C_MSG_4(msg, v1, v2, v3, v4) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3, v4);}
+#define L1C_MSG_3(msg, v1, v2, v3) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2, v3);}
+#define L1C_MSG_2(msg, v1, v2) {msg(SIM_MODE_STR(L1C_SIM1), v1, v2);}
+#define L1C_MSG_1(msg, v1) {msg(SIM_MODE_STR(L1C_SIM1), v1);}
+#define L1C_MSG_0(msg) {msg(SIM_MODE_STR(L1C_SIM1));}
+#endif  /*__GL1_GEMINI__*/
+
+/* --- Utility Macro ------------------------------------------------------- */
+
+/*Please be careful about the datatype of the input parameter!! */
+#define L1_CHK_BIT(a, bit)  ( (a) & (1 << bit))
+#define L1_SET_BIT(a, bit)  ( (a) |= (1 << bit))
+#define L1_CLR_BIT(a, bit)  ( (a) &= ~(1 << bit))
+
+/* --- Original stuff move to tool.h for 3G to include---------------------- */
+
+#include "tool.h"
+
+/* --- specialities ------------------------------------------------------- */
+
+bool ScanPrintChk( void );
+bool ScanCommand( const char *value );
+bool ScanPower( Power *power );
+bool ScanTA( TimingAdvance *ta );
+bool ScanTimeSlot( TimeSlot *timeSlot );
+bool ScanARFCN( ARFCN *arfcn );
+bool ScanFrameOffset( FrameNumber *frameOffset );
+bool ScanEBitOffset( intx *ebitOffset );
+bool ScanBSIC( BSIC *bsic );
+bool ScanTSC( TSC *tsc );
+bool ScanFrame( FrameNumber *frame, int32 min );
+bool ScanUlTxPower( Power *power );
+
+/*------------------- L1A ASSERT --------------------------------------*/
+/*[MAUI_03118234] L1 ASSERT Review
+  A. L1A(_EXT)_ASSERT_Reboot: reboot in both MTK internal & customer release 
+     (L1A_ASSERT_Reboot will be ignored in slim, L1A_EXT_ASSERT_Reboot will reboot in slim)
+  B. L1A(_EXT)_ASSERT_Bypass_Trace: no reboot, but output warning message in system trace
+  C. L1A(_EXT)_ASSERT_Bypass: reboot in MTK internal, ignore in customer release   
+*/
+
+#define L1A_ASSERT_Bypass( st )    (void)0
+#define L1A_ASSERT_Bypass_Trace( st )    if(!(st))   MODEM_WARNING_MESSAGE(0, "[L1A]")
+#define L1A_ASSERT_Reboot( st )    if(!(st))   ASSERT(0)
+#define L1A_EXT_ASSERT_Bypass( st, d1, d2, d3 )    (void)0
+#define L1A_EXT_ASSERT_Bypass_Trace( st, d1, d2, d3 )    if(!(st))   MODEM_WARNING_MESSAGE(0, "[L1A] var1:%d, var2:%d, var3:%d", d1, d2, d3)
+#define L1A_EXT_ASSERT_Reboot( st, d1, d2, d3 )    if(!(st))   EXT_ASSERT(0, d1, d2, d3 )
+	
+#ifdef __MTK_INTERNAL__
+   #undef L1A_ASSERT_Bypass
+   #undef L1A_EXT_ASSERT_Bypass
+   #define L1A_ASSERT_Bypass( st )    if(!(st))   ASSERT(0)
+   #define L1A_EXT_ASSERT_Bypass( st, d1, d2, d3 )    if(!(st))   EXT_ASSERT(0, d1, d2, d3 )
+#endif
+
+#ifdef L1_SIM
+   #undef L1A_ASSERT_Bypass_Trace
+   #undef L1A_EXT_ASSERT_Bypass_Trace
+   #define L1A_ASSERT_Bypass_Trace( st )    if(!(st))   ASSERT(0)
+   #define L1A_EXT_ASSERT_Bypass_Trace( st, d1, d2, d3 )    if(!(st))   EXT_ASSERT(0, d1, d2, d3 )
+#endif
+
+#endif // l1_generic_l1_tool_h
+
diff --git a/mcu/l1/interface/gl1/l1a_dm_private.h b/mcu/l1/interface/gl1/l1a_dm_private.h
new file mode 100644
index 0000000..883d578
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1a_dm_private.h
@@ -0,0 +1,792 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ * l1a_dm_private.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file contains definitions used by L1A dual mode
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#if defined(__UMTS_RAT__) || defined(__LTE_RAT__)
+ 
+#ifndef _L1A_DM_PRIVATE_H
+#define _L1A_DM_PRIVATE_H
+
+#include "kal_public_api.h"
+#include "mph_types.h"
+#include "mph_cs_def.h"
+#include "l1_types.h"
+#include "kal_public_api.h"
+#include "kal_general_types.h"
+#include "mll1_gsm.h"
+#include "mph_dm_msg.h"
+
+/* define gl1_ll1_measure_req meas_purpose_bitmap and tick_bitmap begin */
+#define L1A_MEAS_PURPOSE_ONLY   (0x01)  //this bit is set when tick is need
+#define L1A_MEAS_PURPOSE_ALL    (0x02)
+#define L1A_MEAS_TICK_REG       (0x01)
+#define L1A_MEAS_TICK_PRIO      (0x02)
+#define L1A_MEAS_OOS_BEGIIN     (0x04)  //used in gl1_ll1_measure_req to inform OOS is ongoing to shorten meas period
+#define L1A_IS_REG_TICK_ON(bitmap)  ( ((bitmap&L1A_MEAS_TICK_REG ) != 0)? KAL_TRUE : KAL_FALSE )
+#define L1A_IS_PRIO_TICK_ON(bitmap) ( ((bitmap&L1A_MEAS_TICK_PRIO) != 0)? KAL_TRUE : KAL_FALSE )
+
+
+/* define for 2G standby gap service type check begin */
+/* set if GSM has started standby GSM measurement (RSSI) */
+#define L1A_STANDBY_GSM_MEAS_START (0x0001)
+#ifdef __GERAN_R8__
+/* set if GSM has started Priority standby GSM measurement (RSSI) */
+#define L1A_STANDBY_GSM_PRIO_MEAS_START (0x0002)
+#endif /*__GERAN_R8__*/
+
+#define L1A_STANDBY_GAP_ALL_BOUNDARY (0x00FF)
+/* set if GSM has started standby GSM BSIC measurement */
+#define L1A_STANDBY_GSM_BSIC_READ_START (0x0100)
+/* set if GSM has started power scan in standby */
+#define L1A_STANDBY_MANUAL_POWER_SCAN_START (0x0200)
+/* set if GSM has started cell_bsic read in standby */
+#define L1A_STANDBY_CELL_BSIC_READ_START (0x0400)
+/* set if GSM has started cell_sys_info read in standby */
+#define L1A_STANDBY_CELL_SYS_INFO_READ_START (0x0800)
+
+#define L1A_STANDBY_GAP_REPORT_CGI_BOUNDARY (0x0FFF) 
+/* set if GSM has started reportCGI pwrscan */
+#define L1A_STANDBY_REPORT_CGI_PWRSCAN_START (0x1000)
+/* set if GSM has started reportCGI bsic pwrscan */
+#define L1A_STANDBY_REPORT_CGI_BSIC_READ_START (0x2000)
+/* set if GSM has started reportCGI sys info pwrscan */
+#define L1A_STANDBY_REPORT_CGI_SYS_INFO_READ_START (0x4000)
+
+#define L1A_CHECK_GAP_TYPE_ON(A)    (( (l1a_standby_gap_info.l1a_standby_gap_type & A) !=0 ) ? KAL_TRUE : KAL_FALSE)
+#define L1A_CHECK_GAP_TYPE_OFF(A)   (( (l1a_standby_gap_info.l1a_standby_gap_type & A) ==0 ) ? KAL_TRUE : KAL_FALSE)
+#define L1A_SET_GAP_TYPE_ON(A)   (l1a_standby_gap_info.l1a_standby_gap_type |= A)
+#define L1A_SET_GAP_TYPE_OFF(A)  (l1a_standby_gap_info.l1a_standby_gap_type &= (~A))
+
+#define L1A_IS_STB_GAP_SERVICE_ON() ( (l1a_standby_gap_info.l1a_meas_purpose_bitmap !=0)? KAL_TRUE : KAL_FALSE )
+#define L1A_IS_STB_GAP_SERVICE_OFF() (!L1A_IS_STB_GAP_SERVICE_ON() )
+/* define for 2G standby gap service type check end */
+
+
+
+#define DEFAULT_T_HIGH_PRIO_SEARCH (-1)
+#ifndef GEN_FOR_PC
+#define IMMEDIATELY (-1)
+#endif
+
+typedef enum
+{
+   L1A_EVENT_GAP_SERVICE_REQ_ACTIVE_GAP = 0, 
+   L1A_EVENT_REPORT_GAP_PATTERN_ACTIVE_GAP,
+   L1A_EVENT_ACTIVE_REQ_ACTIVE_GAP,  /* SM/FLIGHT -> DM */
+   L1A_EVENT_STANDBY_REQ_ACTIVE_GAP,
+   L1A_EVENT_DEACTIVATE_REQ_ACTIVE_GAP,
+   L1A_EVENT_TEMP_STOP_MSG_ACTIVE_GAP,  //from l1_main
+   L1A_EVENT_TEMP_RESUME_MSG_ACTIVE_GAP,  //from l1_main 
+   L1A_EVENT_REPORT_GAP_CANCEL_ACTIVE_GAP,
+   L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_CHANNEL_ASSIGN_ACTIVE_GAP                = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_UPLINK_ASSIGN_ACTIVE_GAP                 = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_DOWNLINK_ASSIGN_ACTIVE_GAP               = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_PDCH_FAIL_RECONNECT_ACTIVE_GAP           = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_HANDOVER_ACTIVE_GAP                      = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_CHANNEL_RECONNECT_ACTIVE_GAP             = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_PKT_UNASSIGN_TO_TBF_PEND_ACTIVE_GAP      = L1A_EVENT_IMMED_ASSIGN_ACTIVE_GAP,
+   L1A_EVENT_CHANNEL_RELEASE_ACTIVE_GAP,
+   L1A_EVENT_UNASSIGNMENT_ALL_TBF_REL_ACTIVE_GAP,
+   L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_IDLE_CCCH_START_REQ_ACTIVE_GAP           = L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_PACKET_IDLE_CCCH_START_REQ_ACTIVE_GAP    = L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_PACKET_IDLE_PCCCH_START_REQ_ACTIVE_GAP   = L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_RANDOM_ACCESS_REQ_ACTIVE_GAP             = L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_CELL_SELECTION_INIT_REQ_ACTIVE_GAP       = L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_BSIC_SYNC_REQ_ACTIVE_GAP                 = L1A_EVENT_SPECIFIC_SYNC_REQ_ACTIVE_GAP,
+   L1A_EVENT_HANDOVER_FROM_UMTS_ACTIVE_GAP,
+   L1A_EVENT_INTER_RAT_HANDOVER_ACTIVE_GAP,
+   L1A_EVENT_CHANNEL_RECONNECT_FROM_UMTS_ACTIVE_GAP, 
+   L1A_EVENT_REPORT_DCH_STARTED_ACTIVE_GAP,
+   L1A_EVENT_REPORT_NEW_TBF_STARTED_ACTIVE_GAP        = L1A_EVENT_REPORT_DCH_STARTED_ACTIVE_GAP,
+   L1A_EVENT_REPORT_DCH_STOPPED_ACTIVE_GAP,
+#ifdef __BLIND_HANDOVER__
+   L1A_EVENT_REPORT_FCCH_BLIND_CS_HANDOVER_ACTIVE_GAP = L1A_EVENT_REPORT_DCH_STOPPED_ACTIVE_GAP, 
+#endif /* end of __BLIND_HANDOVER__ */  
+   L1A_EVENT_REPORT_TBF_RECONFIG_ACTIVE_GAP,
+#if defined (__BLIND_HANDOVER__)
+   L1A_EVENT_BLIND_HANDOVER_BSIC_REQ_ACTIVE_GAP,
+#endif 
+   L1A_EVENT_GAP_STOP_CNF_ACTIVE_GAP,
+   L1A_ACTIVE_GAP_EVENT_NUM
+}l1a_active_gap_handler_event_enum;
+
+
+/* standby GAP FSM event */
+typedef enum
+{
+   L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP ,    /* 0 */
+   L1A_EVENT_STANDBY_GSM_PRIO_MEAS_START_REQ_STB_GAP = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_STANDBY_GSM_BSIC_READ_REQ_STB_GAP       = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_MANUSEL_PWRSCAN_REQ_STB_GAP             = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_CELL_BSIC_START_REQ_STB_GAP             = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_CELL_SYS_INFO_READ_REQ_STB_GAP          = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_CGI_PWRSCAN_REQ_STB_GAP          = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_CGI_BSIC_START_REQ_STB_GAP       = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_CGI_SYS_INFO_READ_REQ_STB_GAP    = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_STANDBY_GSM_MEAS_STOP_REQ_STB_GAP       = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_STANDBY_GSM_PRIO_MEAS_STOP_REQ_STB_GAP  = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_STANDBY_GSM_BSIC_STOP_REQ_STB_GAP       = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_STANDBY_CELL_BSIC_RES_STB_GAP           = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_MANUSEL_PWRSCAN_STOP_STB_GAP            = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,   
+   L1A_EVENT_CELL_BSIC_STOP_REQ_STB_GAP              = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_CELL_SYS_INFO_STOP_REQ_STB_GAP          = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_CGI_PWRSCAN_STOP_STB_GAP         = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,   
+   L1A_EVENT_REPORT_CGI_BSIC_STOP_REQ_STB_GAP        = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_CGI_SYS_INFO_STOP_REQ_STB_GAP    = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_GSM_BSIC_STB_GAP                 = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_REPORT_POWER_SCAN_DONE_STB_GAP          = L1A_EVENT_STANDBY_GSM_MEAS_START_REQ_STB_GAP,
+   L1A_EVENT_GAP_NOTIFY_IND_STB_GAP,                 /* 1 */
+   L1A_EVENT_GAP_STOP_REQ_STB_GAP,                   /* 2 */
+   L1A_EVENT_REPORT_GAP_STOP_STB_GAP,                /* 3 */
+   L1A_EVENT_GAP_SUSPEND_REQ_STB_GAP,                /* 4 */
+   L1A_EVENT_REPORT_GAP_SUSPEND_STB_GAP,             /* 5 */
+   L1A_EVENT_GAP_RESUME_REQ_STB_GAP,                 /* 6 */
+   L1A_EVENT_ACTIVE_REQ_STB_GAP,                     /* 7 */
+   L1A_STB_GAP_EVENT_NUM
+}l1a_standby_gap_handler_event_enum;
+
+
+/* active autoGAP FSM event */
+typedef enum
+{
+   L1A_EVENT_AUTO_GAP_START_REQ_ACTIVE_AG,
+   L1A_EVENT_AUTO_GAP_IND_ACTIVE_AG,
+   L1A_EVENT_REPORT_AUTO_GAP_START_ACTIVE_AG,
+   L1A_EVENT_AUTO_GAP_END_IND_ACTIVE_AG,
+   L1A_EVENT_AUTO_GAP_STOP_REQ_ACTIVE_AG,
+   L1A_EVENT_AUTO_GAP_STOP_CNF_ACTIVE_AG,
+   L1A_ACTIVE_AG_EVENT_NUM
+}l1a_active_auto_gap_handler_event_enum;
+
+/* standby autoGAP FSM event */
+typedef enum
+{
+   L1A_EVENT_AG_AVAILABLE_IND_STB_AG,
+   L1A_EVENT_AG_UNAVAILABLE_IND_STB_AG,
+   L1A_EVENT_REPORT_AG_START_STB_AG,
+   L1A_EVENT_REPORT_AG_END_STB_AG,
+   L1A_EVENT_AG_CNF_STB_AG,
+   L1A_EVENT_AG_STOP_IND_STB_AG,
+   L1A_EVENT_REPORT_AG_STOP_STB_AG,
+   L1A_EVENT_CGI_PWRSCAN_START_STB_AG,
+   L1A_EVENT_CGI_PWRSCAN_STOP_STB_AG,
+   L1A_EVENT_REPORT_PWRSCAN_CGI_STB_AG,
+   L1A_EVENT_CGI_BSIC_START_STB_AG,
+   L1A_EVENT_CGI_BSIC_STOP_STB_AG,
+   L1A_EVENT_REPORT_BSIC_CGI_STB_AG,
+   L1A_EVENT_CGI_BCCH_START_STB_AG,
+   L1A_EVENT_CGI_BCCH_STOP_STB_AG,
+   L1A_EVENT_SRVCC_BSIC_START_STB_AG,
+   L1A_EVENT_SRVCC_BSIC_STOP_STB_AG,
+   L1A_EVENT_REPORT_BSIC_SRVCC_STB_AG,
+   L1A_EVENT_REPORT_GSMBSIC_STB_AG,
+   L1A_EVENT_REPORT_RE_REQ_CGI_STB_AG,
+   L1A_STB_AUTO_GAP_EVENT_NUM
+}l1a_standby_auto_gap_handler_event_enum;
+
+
+/* active GAP FSM state*/
+typedef enum
+{
+   L1A_ACTIVE_GAP_NULL = 0,       /* 00 */
+   L1A_ACTIVE_GAP_REQUIRED,       /* 01 */
+   L1A_ACTIVE_GAP_PROCESS,        /* 02 */
+   L1A_ACTIVE_GAP_SUSPENDED,      /* 03 */
+   L1A_ACTIVE_GAP_WAIT_LL1,       /* 04 */
+   L1A_ACTIVE_GAP_WAIT_RPT,       /* 05 */
+   L1A_ACTIVE_GAP_STATE_NUM
+}l1a_active_gap_state_enum;
+
+
+/* standby GAP FSM state*/
+typedef enum
+{
+   L1A_STB_GAP_IDLE = 0,        /* 00 */
+   L1A_STB_GAP_REQUIRED,        /* 01 */
+   L1A_STB_GAP_PROCESS,         /* 02 */
+   L1A_STB_GAP_SELF_STOP,       /* 03 */
+   L1A_STB_GAP_IRT_STOP,        /* 04 */
+   L1A_STB_GAP_STATE_NUM
+}l1a_standby_gap_state_enum;
+
+/* active autoGAP FSM state*/
+typedef enum
+{
+   L1A_ACTIVE_AG_OFF = 0,        /* 00 */
+   L1A_ACTIVE_AG_ON,             /* 01 */
+   L1A_ACTIVE_AG_REQ,            /* 02 */
+   L1A_ACTIVE_AG_PROCESS,        /* 03 */
+   L1A_ACTIVE_AG_STOPPING,       /* 04 */
+   L1A_ACTIVE_AG_STATE_NUM
+}l1a_active_auto_gap_state_enum;
+
+/* autoGAP required in standby state*/
+typedef enum
+{
+   L1A_AG_REQ_IN_STB_IDLE = 0,        /* 00 */
+   L1A_AG_REQ_IN_STB_REQ,             /* 01 */
+   L1A_AG_REQ_IN_STB_GIVEN,           /* 02 */
+   L1A_AG_REQ_IN_STB_STATE_NUM
+}l1a_auto_gap_required_in_standby_state_enum;
+
+
+/* standby autoGAP FSM state*/
+typedef enum
+{
+   L1A_STB_AG_IDLE = 0,      /* 00 */
+   L1A_STB_AG_STARTED,       /* 01 */
+   L1A_STB_AG_REQUIRING,     /* 02 */
+   L1A_STB_AG_PROCESSING,    /* 03 */
+   L1A_STB_AG_STOPPING,      /* 04 */
+   L1A_STB_AG_STATE_NUM
+}l1a_standby_auto_gap_state_enum;
+
+
+/*Shihyao 20090601, used to group gap-related variables into a structure*/
+typedef enum
+{
+   L1A_STATE_NULL_FOR_GAP = 0,              /* 00 */
+   L1A_STATE_RESCHEDULE_GAP_FOR_GAP,        /* 01 */
+   L1A_STATE_WAIT_CCCH_START_FOR_GAP,       /* 02 */
+   L1A_STATE_IRT_HANDOVER_FOR_GAP,          /* 03 */
+   L1A_STATE_BLIND_HANDOVER_BSIC_FOR_GAP,   /* 04 */
+   L1A_CHANNEL_STATE_FOR_GAP_NUM
+}l1a_channel_state_for_gap_enum;
+
+typedef enum
+{
+   L1A_WAIT_GSM_GAP_STOP_CNF_NULL = 0,
+   L1A_WAIT_GSM_GAP_STOP_CNF_STOPPING,
+   L1A_WAIT_GSM_GAP_STOP_CNF_RPT_STANDBY,
+   L1A_WAIT_GSM_GAP_STOP_CNF_RPT_DEACTIVATE,
+   L1A_WAIT_GSM_GAP_STOP_CNF_NUM
+}l1a_wait_gsm_gap_stop_cnf_enum;
+
+
+/* record gap suspend state, used by standby GAP FSM*/
+typedef enum
+{
+   L1A_GAP_NOT_SUSPENDED = 0,      /* 00 */
+   L1A_GAP_SUSPENDED,              /* 01 */
+   L1A_GAP_SUSPENDED_NO_GAP,       /* 02 */
+   L1A_GAP_SUSPEND_NUM
+}l1a_gap_suspend_state_enum;
+
+
+/*================ for ACTIVE GAP FSM usage ====================*/
+typedef struct
+{
+   kal_bool                         l1a_gap_service_enable;  //ON or OFF
+   kal_uint8                        tid;  //from mll1 and gl1 fill in gap_pattern 
+   l1a_channel_state_for_gap_enum   l1a_channel_state_for_gap;
+}l1a_active_gap_database_struct;
+
+/*================ for STANDBY GAP FSM usage ====================*/
+typedef struct
+{
+   /* bitmap of gap service type*/
+   kal_uint32  l1a_standby_gap_type;   
+   /* current standby gap service type bitmaps */
+   kal_uint8   l1a_meas_purpose_bitmap;  //bit0(meas), bit1(cell search)
+   kal_uint8   l1a_tick_bitmap;  //bit0(rank), bit1(prio)
+   /* if(HPS on) # of higer BA. else if(meas on) # of BA. */
+   kal_uint8   l1a_carrier_num;
+   kal_uint8   l1a_carrier_num_old;
+#ifdef __GERAN_R8__
+   kal_int16   l1a_current_t_high_prio_search;
+   kal_int16   l1a_old_t_high_prio_search;
+#endif /*__GERAN_R8__*/
+   kal_uint8   l1a_period_reset_bitmap;  //bit0(rank), bit1(prio)
+   /*LL1 might send gap_suspend_req with gl1's gap service. To prevent waking 2G frequently, 
+     L1A will not inform L1C until gap is given. */
+   l1a_gap_suspend_state_enum    l1a_is_gap_suspended;  
+   /* fast standby plmn list enhancement */
+   kal_bool l1a_standby_cell_bsic_res_req;
+#if (SRVCC_USE_CGI_AUTO_GAPS)
+   kal_bool is_meas_req_sent_without_boost_gap_allocation;
+#endif
+}l1a_standby_gap_database_struct;
+
+/*================ Flags used in 2G active ======================*/
+typedef struct
+{
+   /* syy: to check if sc_mode is changed */
+   ll1_active_rat_mode_status_enum   l1a_sc_mode_old;
+   /* syy: for standby and deactivate cnf after gap_stop_cnf */
+   l1a_wait_gsm_gap_stop_cnf_enum    l1a_wait_gsm_gap_stop_cnf_for_cnf;
+}l1a_dm_active_database_struct;
+
+/*================ Flags used in 2G standby ======================*/
+typedef struct
+{
+   /* william: to record the system mode to be set after gap stop cnf */
+   mph_system_mode_enum   l1a_system_mode_set;
+   /* william: for active cnf after report gap stop*/
+   kal_bool l1a_wait_report_gap_stop_for_active_cnf;
+}l1a_dm_standby_database_struct;
+
+/*================ for ACTIVE AUTO GAP FSM usage ====================*/
+typedef struct
+{
+   kal_bool   l1a_is_ag_started;  //only for assert check
+}l1a_active_auto_gap_database_struct;
+
+/*================ for STANDBY AUTO GAP FSM usage ====================*/
+typedef struct
+{
+   kal_bool    is_started;
+   kal_uint8   scan_id;
+   ARFCN       arfcn;
+} l1a_report_cgi_pwrscan_req_struct;
+
+typedef struct
+{
+   kal_bool     is_started;
+   kal_uint8    bsic_tid;
+   ARFCN        arfcn;
+   kal_bool     is_srvcc;  //to distinguish cgi or srvcc
+   kal_bool     need_trigger_at_end;  //when srvcc_bsic is stopped and started in proc state, need to trigger at RptEnd
+} l1a_report_cgi_bsic_start_req_struct;
+
+typedef struct
+{
+   kal_bool     is_started;
+   ARFCN        arfcn;
+   BSIC         bsic;
+   kal_uint16   bcch_mask;
+   FrameNumber  frame_offset;
+   kal_int32    ebit_offset;   
+} l1a_report_cgi_sys_info_start_req_struct;
+
+#if (SRVCC_USE_CGI_AUTO_GAPS)
+typedef struct
+{
+   Power        b2_threshold_in_qdbm;  //B2 value from ERRC
+   kal_uint8    num_of_bsic_attempts;  //bsic attempt count
+   kal_bool     is_srvcc;              //srvcc flag from MLL1
+   kal_bool     is_srvcc_backup;       //backup srvcc flag
+}l1a_srvcc_perf_improvement_data_struct;
+#endif
+
+typedef struct
+{
+   l1a_report_cgi_pwrscan_req_struct         pwrscan_req;  //for ReportCGI 
+   l1a_report_cgi_bsic_start_req_struct      bsic_req;  //for ReportCGI 
+   l1a_report_cgi_sys_info_start_req_struct  bcch_req;  //for ReportCGI 
+#if (SRVCC_USE_CGI_AUTO_GAPS)
+   l1a_srvcc_perf_improvement_data_struct    srvcc_data;//for srvcc perf improvements
+#endif
+}l1a_standby_auto_gap_database_struct;
+
+/* from m11150.c */
+kal_bool l1a_standby_gap_check_if_service_on(void);
+kal_bool l1a_standby_gap_external_check_if_type_on( kal_uint32  standby_gap_type );
+kal_bool l1a_standby_gap_external_check_if_type_off( kal_uint32  standby_gap_type );
+kal_bool l1a_standby_gap_external_set_type_on( kal_uint32  standby_gap_type );
+kal_bool l1a_standby_gap_external_set_type_off( kal_uint32  standby_gap_type );
+kal_bool l1a_standby_gap_external_check_cell_bsic_res_req_off(void);
+kal_uint8 l1a_standby_gap_external_read_state(void);
+kal_bool l1a_standby_gap_check_if_service_on(void);
+void l1a_standby_gap_handler_init(void);
+void l1a_standby_gap_handler(kal_uint8 event, void* ptr_ilm_rpt);
+kal_uint8 l1a_gap_external_read_active_gap_state(void);
+kal_bool l1a_external_read_active_gap_stopping(void);
+kal_bool l1a_external_read_active_gap_service_enable(void);
+void l1a_active_gap_handler_init(void);
+void l1a_active_gap_handler(kal_uint8 event, void* ptr_ilm_rpt);
+void l1a_update_standby_meas_purpose( mphm_standby_meas_purpose_enum purpose, void* ptr_ilm_rpt );
+#if (SRVCC_USE_CGI_AUTO_GAPS)
+void l1a_send_meas_req_for_srvcc(void);
+void l1a_set_meas_req_sent_without_boost_gap_allocation(kal_bool boost_gap_allocation);
+kal_bool l1a_get_meas_req_sent_without_boost_gap_allocation(void);
+#endif
+
+
+
+/* from m11151.c */
+void l1a_gsm_active_data_init(void);
+void l1a_gsm_standby_data_init(void);
+void l1a_external_set_wait_gsm_gap_stop_cnf_cause( l1a_wait_gsm_gap_stop_cnf_enum cause );
+l1a_wait_gsm_gap_stop_cnf_enum l1a_external_read_wait_gsm_gap_stop_cnf_cause( void );
+ll1_active_rat_mode_status_enum l1a_external_read_old_sc_mode( void );
+void l1a_external_set_wait_report_gap_stop_for_active_req( kal_bool wait_report_gap_stop);
+kal_bool l1a_external_read_wait_report_gap_stop_for_active_req( void );
+void l1a_dm_active_req(void* ptr_ilm);
+void l1a_set_gsm_sm_active_to_dm_active(void* ptr_ilm);
+void l1a_dm_standby_req(void* ptr_ilm);
+void l1a_standby_gsm_bsic_read_req(void* ptr_ilm);
+void l1a_standby_gsm_bsic_stop_req(void* ptr_ilm);
+void l1a_standby_gsm_meas_start_req(void* ptr_ilm);
+void l1a_standby_gsm_meas_stop_req(void* ptr_ilm);
+#ifdef __GERAN_R8__
+void l1a_standby_gsm_prio_meas_start_req(void* ptr_ilm);
+void l1a_standby_gsm_prio_meas_stop_req(void* ptr_ilm);
+#endif /*__GERAN_R8__*/
+void l1a_standby_cell_bsic_start_req(void* ptr_ilm);
+void l1a_standby_cell_bsic_stop_req(void* ptr_ilm);
+void l1a_standby_cell_sys_info_start_req(void* ptr_ilm);
+void l1a_standby_cell_sys_info_stop_req(void* ptr_ilm);
+
+void l1a_temporarily_stop_gsm_gap_req( void* ptr_ilm );
+void l1a_resume_gsm_gap_schedule( void* ptr_ilm );
+kal_bool l1a_inform_gl1_mode_status( kal_bool timing_changed, ll1_active_rat_mode_status_enum new_mode );
+void l1a_receive_report_gappattern(void* ptr_rpt);
+void l1a_receive_report_gsm_rssi(void* ptr_rpt);
+void l1a_receive_report_gsm_bsic(void* ptr_rpt);
+void l1a_receive_report_bsic_cgi(void* ptr_rpt);
+#if !(SRVCC_USE_CGI_AUTO_GAPS)
+kal_bool l1a_receive_report_bsic_srvcc(void* ptr_rpt);
+#else
+void l1a_receive_report_bsic_srvcc(void* ptr_rpt);
+#endif /* SRVCC_USE_CGI_AUTO_GAPS */
+void l1a_receive_report_gap_stop( void );
+void l1a_receive_ll1_gl1_gap_notify_ind(void* ptr_ilm);
+void l1a_receive_mphm_gap_stop_req( void );
+void l1a_receive_report_standby_done(void* ptr_rpt);
+void l1a_receive_report_active_done(void* ptr_rpt);
+void l1a_receive_gsm_gap_stop_cnf();
+void l1a_receive_mphm_sync_req( void );
+void l1a_receive_report_sync_time( void* ptr_rpt );
+void l1a_receive_report_pm_done( void* ptr_rpt );
+void l1a_receive_mphm_gap_suspend_req( void );
+void l1a_receive_report_gap_suspend( void );
+void l1a_receive_mphm_gap_resume_ind( void );
+void l1a_receive_ll1_gl1_mode_status_update_ind(void* ptr_ilm);
+void l1a_send_gl1_ll1_gap_stop_cnf( void );
+void l1a_send_gl1_ll1_gap_stop_req( void );
+void l1a_send_mphm_standby_cnf( void );
+void l1a_send_inter_rat_handover_cnf( void );
+void l1a_send_gl1_ll1_measure_req( l1a_standby_gap_service_req_struct standby_gap_service_req );
+void l1a_send_gl1_ll1_irat_sync_cnf(kal_int32 frame, kal_int32 ebit, kal_uint32 ustime);
+void l1a_send_gl1_ll1_gap_suspend_cnf(void);
+void l1a_send_gl1_ll1_standby_measure_done_ind( kal_uint8 tid, kal_uint8 tick_bitmap );
+void l1a_send_gl1_ll1_rat_status_ind( gl1_ll1_rat_status_enum rat );
+void l1a_send_gl1_ll1_gap_pattern_ind(void* ptr_rpt);
+void l1a_send_mphm_standby_gsm_bsic_ind( SChData* ptr_sch_data );
+void l1a_send_mphm_standby_gsm_report_cgi_bsic_ind( SChData* ptr_sch_data );
+void l1a_send_mphm_standby_gsm_report_srvcc_bsic_ind( SChData* ptr_sch_data );
+void l1a_send_mphm_standby_gsm_report_cgi_pwrscan_cnf( PowerScanData* ptr_scan_data, kal_uint8 scan_id, ARFCN arfcn );
+void l1a_enter_umts_fail_reconnect(void);
+
+
+#ifdef __SGTDS_STANDBY_AFC_TRACKING__
+void l1a_receive_report_gap_tick( void* ptr_rpt );
+void l1a_stop_report_gap_tick( void );
+#endif /*__SGTDS_STANDBY_AFC_TRACKING__*/
+#ifdef __GL1_GEMINI__
+void l1a_update_alt_l1_gsm_gap_service_init(void);
+void l1a_update_alt_l1_gsm_gap_service (kal_bool is_need);
+void l1a_send_mphc_alt_l1_gsm_gap_service_update_req (kal_bool enable);
+void l1a_receive_mphc_alt_l1_gsm_gap_resume_req(void);
+#endif /* end of __GL1_GEMINI__ */
+
+/* from m11152.c, for auto gap */
+void l1a_active_auto_gap_handler_init(void);
+void l1a_active_auto_gap_handler(kal_uint8 event, void* ptr_ilm_rpt);
+void l1a_standby_auto_gap_handler_init(void);
+void l1a_standby_auto_gap_handler(kal_uint8 event, void* ptr_ilm_rpt);
+void l1a_auto_gap_in_standby_init(void);
+void l1a_auto_gap_ind_in_standby(void* ptr_ilm);
+void l1a_report_auto_gap_start_in_standby( void* ptr_rpt );
+void l1a_auto_gap_end_ind_in_standby(void* ptr_ilm);
+kal_uint8 l1a_get_srvcc_bsic_tid( void );
+
+#if (SRVCC_USE_CGI_AUTO_GAPS)
+kal_bool l1a_srvcc_perf_get_is_srvcc_flag( void );
+void l1a_srvcc_perf_set_is_srvcc_flag( kal_bool flag, kal_bool is_srvcc_backup_flag );
+void l1a_srvcc_perf_update_b2_thd( Power b2_threshold_in_qdbm);
+kal_bool l1a_srvcc_perf_is_backup_and_current_srvcc_flag_diff( void );
+void l1a_srvcc_perf_update_bsic_attempt_count( kal_bool is_reset );
+void l1a_srvcc_perf_calculate_boost_value( SChData* ptr_sch_data, mphm_standby_gsm_report_srvcc_bsic_ind_struct *ptr_para );
+void l1a_srvcc_perf_reset_bsic_attempt_count(void);
+#endif
+
+/* from m11127.c */
+void l1a_report_cgi_pwrscan_start( ARFCN arfcn, kal_uint8 scan_id,  kal_bool use_auto_gap );
+void l1a_report_cgi_pwrscan_stop(kal_bool use_auto_gap);
+void l1a_report_cgi_report_scan_done(Report* ptr_rpt);
+
+
+/* from other files */
+extern mph_system_mode_enum l1a_get_system_mode(void);
+
+extern kal_int32 l1a_external_read_paing_period( void );
+
+#ifdef __GL1_GEMINI__
+extern mph_system_mode_enum l1a_get_sim1_system_mode(void);
+#endif /* end of __GL1_GEMINI__ */
+
+#endif /* end of _L1A_DM_PRIVATE_H */
+
+#endif /* __UMTS_RAT__ || __LTE_RAT__ */
diff --git a/mcu/l1/interface/gl1/l1d_2g_interface.h b/mcu/l1/interface/gl1/l1d_2g_interface.h
new file mode 100644
index 0000000..d514ba0
--- /dev/null
+++ b/mcu/l1/interface/gl1/l1d_2g_interface.h
@@ -0,0 +1,145 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   l1d_2g_interface.h
+ *
+ * Project:
+ * --------
+ * 
+ *
+ * Description:
+ * ------------
+ *   L1 interface provided by 2G
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *------------------------------------------------------------------------------
+ *
+ * $Revision:   1.7  $
+ * $Modtime:   May 16 2005 23:14:12  $
+ * $Log:   //mtkvs01/vmdata/Maui_sw/archives/mcu/l1/l1d/m12150.h-arc  $
+ *
+ * 10 25 2018 yungshian.lai
+ * [MOLY00353514] [Gen97] VMOLY xL1SIM GL1TST Part- modify seamless META [ERS00018830].
+ *
+ * 06 03 2014 yi-ying.lin
+ * [MOLY00067365] [L1D][Modify] MT6752 L1D driver developement
+ * 	.
+ *
+ * 12 16 2013 hosen.chen
+ * [MOLY00046159] [L1D][Modify] Check in code of MT6595 2G modem driver modification
+ * 	.
+ *
+ * 04 12 2013 hosen.chen
+ * [MOLY00012945] [MT6290 Bring-up] Check in code of MT6290
+ * .
+ *
+ * 03 28 2013 hosen.chen
+ * [MOLY00012945] [L1D][Modify] Check in code of MT6290
+ * .
+ * 
+ * 08 30 2012 ij.chang
+ * [MOLY00002884] [UL1D][Modify] 32K-Less Feature Check In
+ * .
+ *
+ * 05 08 2012 samuel.yang
+ * removed!
+ * .
+ *
+ * 11 08 2011 jason.lai
+ * removed!
+ * .
+ *
+ * 10 03 2011 jason.lai
+ * removed!
+ * .
+ *
+ *******************************************************************************/
+
+#ifndef  _L1D_2G_INTERFACE_H_
+#define  _L1D_2G_INTERFACE_H_
+
+/*===============================================================================*/
+/*---------------------------------------------*/
+/* Type definition provided by 2G              */
+/*---------------------------------------------*/
+
+/*****************************************************************************
+* Typedef     : L1CalDataDlStatusQueryResult
+* Group       : Real target, Internals, L1D/UL1D common operation
+* Type        : enumeration
+* Description : Define the constant value of return value for calibration
+*               data item download status query function
+*****************************************************************************/
+typedef enum
+{
+   L1_CAL_DATA_CHECK_CODE_NOT_DOWNLOADED = 0,
+   L1_CAL_DATA_CHECK_CODE_SUCCESS_DOWNLOADED,
+   L1_CAL_DATA_CHECK_CODE_NO_NVRAM_LID_MATCHED,
+   L1_CAL_DATA_CHECK_CODE_MAX
+
+} L1CalDataDLStatusQueryResult;
+
+/*===============================================================================*/
+/*---------------------------------------------*/
+/* Interface provided by 2G                    */
+/*---------------------------------------------*/
+
+extern void  L1D_IS_3G_START( void );
+extern void  L1D_CalibrateGainMismatch( int _rat ); // 0: GSM, 1: WCDMA  //
+extern void  L1D_ABB_HWCalibration( int _rat ); // 0: GSM, 1: WCDMA
+extern void  L1D_ABB_HWCalibration_Restore( void );
+extern void  L1D_RF_Init_ABB( void );
+extern short L1D_GCMachine_Done( void );
+extern void  L1D_Update_DSP_3G_TimeStamp( kal_uint16 timestamp );
+
+/*===============================================================================*/
+extern long XO_CapID;
+
+   #if IS_CHIP_MT6595 || IS_CHIP_MT6752_MD1 || IS_CHIP_MT6752_MD2
+extern unsigned short lte_rc_cal_result[2];
+   #elif IS_CHIP_MT6290
+extern unsigned short lte_rc_cal_result[9];
+   #elif IS_CHIP_MT6572
+extern unsigned short rc_cal_result[5];
+   #endif
+#endif
+