[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/protocol/interface/general/scsi.h b/mcu/protocol/interface/general/scsi.h
new file mode 100644
index 0000000..16f7409
--- /dev/null
+++ b/mcu/protocol/interface/general/scsi.h
@@ -0,0 +1,1031 @@
+/*****************************************************************************
+* 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) 2007
+*
+* 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:
+ * --------------------------------------------------------
+ * scsi.h
+ *
+ * Project:
+ * --------------------------------------------------------
+ * MONZA
+ *
+ * Description:
+ * --------------------------------------------------------
+ * Implementation of Scsi class.
+ *
+ * Author:
+ * --------------------------------------------------------
+ * -------
+ *
+ * --------------------------------------------------------
+ * $Log$
+ *
+ * 10 22 2021 peter.chiang
+ * [MOLY00624048] [AT&T] CDR-FVG-3900 FirstNet-5G Device Radio Requirements - Phase 1b
+ *
+ * [SCSI] disable N5
+ *
+ * 09 28 2020 esko.oikarinen
+ * [MOLY00557246] [P200803-00845] [MTK][5G][A326B] AT+EPBSEH ?í??´í? ue capa info ?? nr41,79 ?¬ë¼ê°??? ?ì?
+ *
+ * 06 14 2019 harish.reddy
+ * [MOLY00413294] [CODE SYNC] ?TOP??NL-BD236??FT??T-Mobile??Free_test?Manual search and register KPN 4G?appear modemCrash?3/5?
+ *
+ * 05 22 2019 vinayak.bandagi
+ * [MOLY00400913] [CODE SYNC][MH4ATT_P][Protocol][10776] cannot find 348-300-3G(1900) during LTE-BTR-1-1150
+ *
+ * 03 07 2019 shreya.raizada
+ * [MOLY00367497] [CODE SYNC] [MT3967][Eiger][O1][MD Static Test][CMW Cards][China][Auto] Incorrect UTRAN FDD bands are filled in the utra UE-CapabilityRAT-Container
+ * .
+ *
+ * 11 29 2018 peter.chiang
+ * [MOLY00366835] [Gen97] Dedicated Priority and Deprioritization SCSI Interface Change
+ * SCSI interface changes for NR
+ *
+ * 10 31 2018 vend_mtb_aritha002
+ * [MOLY00361478] [Gen97] Gemini Compile Option Clean Up
+ *
+ * Compile Option change for __GEMINI_MONITOR_PAGE_DURING_TRANSFER__ , __GEMINI_PREEMPT_PEER_SERVICE__ , __REMOTE_SIM__ and __PLMN_LIST_IN_VIRTUAL_MODE__
+ *
+ * 08 29 2018 peter.chiang
+ * [MOLY00348756] [VMOLY]SCSI Patchback
+ * .
+ *
+ * 08 28 2018 peter.chiang
+ * [MOLY00348756] [VMOLY]SCSI Patchback
+ * [SCSI] patchback for NR supportband Bitmask
+ *
+ * 12 14 2017 vend_mtb_aritha001
+ * [MOLY00296081] [OPPO_FT][1151630] DUT fail to show own ( Vodafone 3G) RAT during MPLMN search for Vodafone operator.
+ * ALPS03622290 [[1155800]?17310-IN??FT-Free_Test? Observed DUT fails to show IDEA(3G) RAT while performing PLMN on Airtel operator when mode set as LWG(Auto).]
+ *
+ * 04 12 2017 rajasekhar.gade
+ * [MOLY00240270] [6293][Gemini][T+W] Phase 1: Common Interface Changes Check in
+ *
+ * .
+ *
+ * 01 06 2017 rajasekhar.gade
+ * [MOLY00215599] [B160916-164]?1??+?2????1?????????????1????2????,??2???2G
+ *
+ * .
+ *
+ * 10 24 2016 vend_mtb_mobiveil003
+ * [MOLY00209293] Band 66 support
+ * Band 66 support
+ *
+ * 07 09 2015 peter.chiang
+ * [MOLY00125851] SCSI compile warning remove and index bug fix
+ * remove compile warning and fix index error of SCSI
+ *
+ * 06 01 2015 henry.lai
+ * [MOLY00092508] [MT6291][LTE-C2K] AS Inter RAT feature
+ * .
+ *
+ * 05 20 2015 nicky.chou
+ * [MOLY00089131] [MT6291 Gemini] L+W+W+W code revision check in
+ * .
+ *
+ * 04 14 2015 nicky.chou
+ * [MOLY00106888] [USIME]FDD/TDD set band problem when init
+ * .
+ *
+ * 12 11 2014 nicky.chou
+ * [MOLY00084935] [SCSI][LCSCE] sync to UMOLY from MT6291_DEV
+ * .
+ *
+ * 11 19 2014 nicky.chou
+ * [MOLY00084935] [SCSI][LCSCE] sync to UMOLY from MT6291_DEV
+ * .
+ *
+ * 06 04 2014 nicky.chou
+ * [MOLY00067600] [CMCC][CSFB] 5.2.1 HZ FT workaournd - add scsi GSMLatestServingCell for 4G measurement
+ * .
+ *
+ * 12 20 2013 nicky.chou
+ * [MOLY00050587] [SCSI][Gemini] remove APIs without sim_index
+ * .
+ *
+ * 11 21 2013 nicky.chou
+ * [MOLY00045854] [PS1267 HG+WG] Check-in Gemini HG+WG modification
+ * .
+ *
+ * 04 09 2013 nicky.chou
+ * [MOLY00011685] [CSE][SCSI][USIME] UMTS Band Priority Search
+ * .
+ *
+ * 03 14 2013 nicky.chou
+ * [MOLY00009229] [CSE][SCSI] Merge Multimode modification back to MOLY
+ * .
+ *
+ * 01 23 2013 nicky.chou
+ * [MOLY00009229] [CSE][SCSI] Merge Multimode modification back to MOLY
+ * .
+ *
+ * 09 26 2012 ye.yuan
+ * [MOLY00004173] [3G TDD][CISE]R9 code merge back to MOLY
+ * CSCE CODE Interface part .
+ *
+ * 07 02 2012 nicky.chou
+ * [MOLY00000149] [SCSI][CSE][USIME][MEME] Performance optimization for Auto-Band & Stored Info Freq List
+ * .
+ *
+ * 04 16 2012 nicky.chou
+ * removed!
+ * .
+ *
+ * 01 15 2012 nicky.chou
+ * removed!
+ * .
+ *
+ * 11 08 2011 nicky.chou
+ * removed!
+ * .
+ *
+ * 05 31 2011 nicky.chou
+ * removed!
+ * .
+ *
+ * 12 14 2010 nicky.chou
+ * removed!
+ * .
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * UARFCN validation function refactor (from URR to SCSI)
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * add to source control recursely
+ *
+ * removed!
+ * removed!
+ * Add copyright header.
+ *
+ * removed!
+ * removed!
+ * add to source control recursely
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ *****************************************************************************/
+/**
+ * scsi.h
+ *
+ * # @COPYLEFT 2005 Jethro E. Lee
+ * ALL WRONGS RESERVED
+ *
+ * [Useage]
+ *
+ * [SYNOPSIS]
+ *
+ * [Example]
+ */
+
+#ifndef __SCSI_H__ /* _(!@$ `scsi.h' $@!)_ */
+#define __SCSI_H__
+
+/* Nicky 20101008: include header files for redundant header file removal */
+#include "kal_general_types.h"
+#include "scsi_asn.h"
+#include "csi_asn.h"
+#include "mcd_l3_inc_struct.h"
+#ifdef __GSM_RAT__
+#include "csi_gsm_asn.h"
+#endif
+#ifdef __UMTS_RAT__
+#include "csi_umts_asn.h"
+#endif
+#ifdef __LTE_RAT__
+#include "csi_lte_asn.h"
+#endif
+
+
+#define SCSI_SIM_EF_LOCI_LEN (11)
+#define SCSI_USIM_EF_LOCI_LEN (11)
+#define SCSI_USIM_EF_PSLOCI_LEN (14)
+
+/**
+ * UTRAN Absolute Radio Frequency Channel Number
+ *
+ * UTRAFDD is designed to operatein either of the
+ * following paired bands:
+ * 1920-1980 MHz Uplink
+ * 2110-2170 MHz Downlink
+ *
+ * UARFCN Uplink: 9612- 9888
+ * UARFCN Downlink: 10562-10838
+ */
+#ifdef __LTE_RAT__
+#define SCSI_MAX_EARFCN (262143)
+#endif /* __LTE_RAT__ */
+#define SCSI_MAX_UARFCN (16383)
+#define SCSI_PRIMARY_SCRAMBLING_CODE_MAX (511) //UMTS FDD
+#define SCSI_CELL_PARAMETERS_ID_MAX (127) //UMTS TDD
+
+/* Clause 2 of SPEC 05.05 */
+#define SCSI_MAX_GSM_ARFCN (1024)
+
+#define SCSI_GSM_CELL_INFORMATION_TAG (0xA0)
+#define SCSI_FDD_CELL_INFORMATION_TAG (0xA1)
+#define SCSI_TDD_CELL_INFORMATION_TAG (0xA2)
+#define SCSI_GSM_CAMPED_BCCH_FREQUENCY_TAG (0x80)
+#define SCSI_GSM_NEIGHBOUR_BCCH_FREQUENCY_TAG (0x81)
+#define SCSI_INTRA_FREQUENCY_INFORMATION_TAG (0x80)
+#define SCSI_INTER_FREQUENCY_INFORMATION_TAG (0x81)
+#define SCSI_UNITIALIZED_USIM_DATA (0xFF)
+
+typedef enum {
+ SCSI_SIM1 = 0,
+ SCSI_SIM2,
+ SCSI_SIM3,
+ SCSI_SIM4,
+ SCSI_SIM_INVALID
+}SCSI_SIM_INDEX;
+
+#ifdef __UMTS_RAT__
+
+/**
+ * Lucien Huang 20081218:
+ * Please be sure that the following definition shall be matched with
+ * those in rrc_utils.h (same definition could be seen there)
+ **/
+
+#define SCSI_TOTAL_NUMBER_OF_UMTS_FDD_BAND_DEFINED (26)
+#define SCSI_TOTAL_NUMBER_OF_UMTS_TDD_BAND_DEFINED (6)
+#define SCSI_TOTAL_NUMBER_OF_UMTS_BAND_DEFINED ((SCSI_TOTAL_NUMBER_OF_UMTS_FDD_BAND_DEFINED>SCSI_TOTAL_NUMBER_OF_UMTS_TDD_BAND_DEFINED)? SCSI_TOTAL_NUMBER_OF_UMTS_FDD_BAND_DEFINED: SCSI_TOTAL_NUMBER_OF_UMTS_TDD_BAND_DEFINED)
+
+#define SCSI_MAX_NUM_OF_UMTS_BAND_SUPPORTED (26)
+#define SCSI_MAX_NUM_OF_UMTS_BAND_ADDITION_INFO (11) /* For UMTS FDD BAND V(Num:6) and XXVI(Num:11) */
+
+enum SCSI_UMTS_BAND_UARFCN_IDENTIFIER_TAG
+{
+ SCSI_UMTS_FDD_UARFCN_BAND_I_Identifier = 0,
+ SCSI_UMTS_FDD_UARFCN_BAND_II_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_III_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_IV_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_V_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_VI_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_VII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_VIII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_IX_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_X_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XI_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XIII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XIV_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XV_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XVI_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XVII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XVIII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XIX_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XX_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XXI_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XXII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XXIII_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XXIV_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XXV_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_XXVI_Identifier,
+ SCSI_UMTS_FDD_UARFCN_BAND_INVALID,
+ SCSI_UMTS_TDD_UARFCN_BAND_A_Identifier = 0,
+ SCSI_UMTS_TDD_UARFCN_BAND_B_Identifier = 1,
+ SCSI_UMTS_TDD_UARFCN_BAND_C_Identifier = 2,
+ SCSI_UMTS_TDD_UARFCN_BAND_D_Identifier = 3,
+ SCSI_UMTS_TDD_UARFCN_BAND_E_Identifier = 4,
+ SCSI_UMTS_TDD_UARFCN_BAND_F_Identifier = 5,
+ SCSI_UMTS_TDD_UARFCN_BAND_INVALID = 6
+};
+
+typedef enum SCSI_UMTS_BAND_UARFCN_IDENTIFIER_TAG SCSI_UMTS_Band_UARFCN_Identifier;
+
+#define SCSI_MAX_OVERLAPPING_BANDS (4)
+
+typedef struct {
+ kal_uint8 numUarfcn;
+ CsiUarfcn overlappingUarfcn[SCSI_MAX_OVERLAPPING_BANDS];
+ SCSI_UMTS_Band_UARFCN_Identifier overlappingBand[SCSI_MAX_OVERLAPPING_BANDS];
+} SCSI_UMTS_overlapping_band_info_struct;
+
+typedef enum
+{
+ SCSI_RRC_UE_PowerClassExt_class1,
+ SCSI_RRC_UE_PowerClassExt_class2,
+ SCSI_RRC_UE_PowerClassExt_class3,
+ SCSI_RRC_UE_PowerClassExt_class4,
+ SCSI_RRC_UE_PowerClassExt_spare4,
+ SCSI_RRC_UE_PowerClassExt_spare3,
+ SCSI_RRC_UE_PowerClassExt_spare2,
+ SCSI_RRC_UE_PowerClassExt_spare1
+}
+SCSI_RRC_UE_PowerClassExt;
+
+typedef enum
+{
+ SCSI_UMTS_UARFCN_DL,
+ SCSI_UMTS_UARFCN_UL
+}SCSI_UMTS_UarfcnDirectionType;
+
+typedef struct SCSI_UMTS_BAND_UARFCN_ADDITION_SPECIAL_INFO_TAG SCSI_UMTS_Band_UARFCN_Addition_Special;
+
+struct SCSI_UMTS_BAND_UARFCN_ADDITION_SPECIAL_INFO_TAG
+{
+ kal_uint8 addition_number;
+ kal_uint16 uarfcn[SCSI_MAX_NUM_OF_UMTS_BAND_ADDITION_INFO];
+};
+
+typedef struct SCSI_UMTS_BAND_UARFCN_ADDITION_GENERAL_INFO_TAG SCSI_UMTS_Band_UARFCN_Addition_General;
+
+struct SCSI_UMTS_BAND_UARFCN_ADDITION_GENERAL_INFO_TAG
+{
+ kal_uint16 addition_start;
+ kal_uint8 addition_number;
+};
+
+enum SCSI_UMTS_BAND_UARFCN_ADDITION_TYPE_TAG
+{
+ SCSI_UMTS_BAND_UARFCN_ADDITION_None_Selector,
+ SCSI_UMTS_BAND_UARFCN_ADDITION_GENERAL_Selector,
+ SCSI_UMTS_BAND_UARFCN_ADDITION_SPECIAL_Selector
+};
+
+typedef enum SCSI_UMTS_BAND_UARFCN_ADDITION_TYPE_TAG SCSI_UMTS_Band_UARFCN_AdditionType;
+
+typedef struct SCSI_UMTS_BAND_UARFCN_CHECK_INFO_TAG SCSI_UMTS_BandCheckInfo;
+
+#if 0 /*__3GPP_25102_DEFINITION__*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+struct SCSI_UMTS_BAND_UARFCN_CHECK_INFO_TAG
+{
+#if 0 /*__3GPP_25102_DEFINITION__*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+ kal_uint16 low_bound;
+ kal_uint16 upper_bound;
+ SCSI_UMTS_Band_UARFCN_AdditionType selection;
+ union
+ {
+ kal_uint8 none;
+ SCSI_UMTS_Band_UARFCN_Addition_General general;
+ SCSI_UMTS_Band_UARFCN_Addition_Special special;
+ }choice;
+};
+
+struct SCSI_UMTS_BAND_INFO_TAG
+{
+ SCSI_UMTS_Band_UARFCN_Identifier radioFrequencyBand;
+ SCSI_RRC_UE_PowerClassExt ue_PowerClass;
+ kal_uint16 txRxFrequencySeparation; /* in UARFCN */
+ SCSI_UMTS_BandCheckInfo uarfcn_check_info;
+};
+
+typedef struct SCSI_UMTS_BAND_INFO_TAG SCSI_UMTS_BandInfo;
+
+typedef struct SCSI_UMTS_BAND_INFO_LIST_TAG SCSI_UMTS_BandInfoList;
+
+struct SCSI_UMTS_BAND_INFO_LIST_TAG
+{
+ kal_uint8 band_number; /* number of UMTS FDD working band */
+ SCSI_UMTS_Band_UARFCN_Identifier band_index[SCSI_TOTAL_NUMBER_OF_UMTS_BAND_DEFINED]; /* list of enum of UMTS FDD working band */
+};
+
+typedef struct SCSI_UMTS_BAND_INFO_DEFINED_TAG SCSI_UMTS_BandInfoDefinedList;
+
+struct SCSI_UMTS_BAND_INFO_DEFINED_TAG
+{
+ kal_uint8 band_number;
+ SCSI_UMTS_BandInfo band_info[SCSI_TOTAL_NUMBER_OF_UMTS_BAND_DEFINED];
+};
+
+
+/*
+ * Chi-Chung 20090715:
+ * Code revised for frequencyRepository. This is the structure for user to get the uarfcn in a MCC
+ */
+#define MAX_UARFCN_PER_MCC 32
+
+/* the uarfcn in a Mcc*/
+typedef struct SCSI_UMTS_UarfcnPerMcc
+{
+ ScsiMccValue mcc;
+ kal_uint8 count;
+ CsiUarfcn uarfcn[MAX_UARFCN_PER_MCC];
+}
+SCSI_UMTS_UarfcnPerMcc;
+
+#ifdef __NR_RAT__
+
+#define SCSI_GEMINI_STATUS_NUM 3
+
+typedef enum {
+ SCSI_GEMINI_STATUS_FULL_CAP = 0,
+ SCSI_GEMINI_STATUS_DATA_SIM,
+ SCSI_GEMINI_STATUS_NON_DATA_SIM,
+ SCSI_GEMINI_STATUS_INVALID
+} SCSI_GEMINI_STATUS;
+#endif /* __NR_RAT__ */
+
+extern void Scsi_ComposeUmtsBandDefinitionInfo(void);
+
+extern void Scsi_SE_retrieveUmtsBandListInfo(SCSI_SIM_INDEX sim_index, SCSI_UMTS_BandInfoList **ppScsi_StoredUmtsFddBandListInfo);
+
+extern void Scsi_SE_retrieveFddUmtsBandListInfo(SCSI_SIM_INDEX sim_index, SCSI_UMTS_BandInfoList **ppScsi_StoredUmtsFddBandListInfo);
+
+extern void Scsi_retrieveUmtsFddAndTddBandDefinedInfo(SCSI_UMTS_BandInfoDefinedList **ppScsi_StoreUmtsFddBandDefinedInfo, SCSI_UMTS_BandInfoDefinedList **ppScsi_StoreUmtsTddBandDefinedInfo);
+
+extern kal_bool Scsi_SE_ensureUarfcnValid(SCSI_SIM_INDEX sim_index, kal_uint16 uarfcn);
+
+/****************************************************************************
+ * Function: Scsi_UarfcnValidateInAllUmtsBand
+ *
+ * parameter:
+ * a. uarfcn - uarfcn which we want to check the validation
+ * b. type - indicate to perform DL or UL UARFCN validation
+ * c. band_id - store which band the input uarfcn locates if return KAL_TRUE
+ * meaningless if return KAL_FALSE or input band_id is NULL pointer
+ * Returns:
+ * a. return KAL_TRUE means input uarfcn is in valid range
+ * b. *band_id will store the band number which this uarfcn locates if band_id is not NULL pointer
+ *
+ * Description:
+ * Envoked for check whether the input uarfcn is in the valid value range which 3GPP defines for
+ * whole UMTS FDD bands. Currently it will check Band I - X.
+ *
+ *****************************************************************************/
+
+extern kal_bool Scsi_UarfcnValidateInAllUmtsBand(SCSI_SIM_INDEX sim_index, kal_uint16 uarfcn, SCSI_UMTS_UarfcnDirectionType type, SCSI_UMTS_Band_UARFCN_Identifier *band_id);
+
+extern kal_bool Scsi_SE_UarfcnValidateInAllSupportUmtsBand(SCSI_SIM_INDEX sim_index, kal_uint16 uarfcn, SCSI_UMTS_UarfcnDirectionType type, SCSI_UMTS_Band_UARFCN_Identifier *band_id);
+
+extern kal_bool Scsi_UarfcnValidateInOneSupportUmtsBand(SCSI_SIM_INDEX sim_index, kal_uint16 uarfcn, SCSI_UMTS_UarfcnDirectionType type, SCSI_UMTS_Band_UARFCN_Identifier band_id);
+
+extern kal_bool Scsi_SE_UarfcnValidateInAllSupportUmtsBandExt(SCSI_SIM_INDEX sim_index, kal_uint16 uarfcn, SCSI_UMTS_UarfcnDirectionType type, SCSI_UMTS_Band_UARFCN_Identifier *band_id, kal_uint8 *indexInBandFDDList);
+
+extern kal_uint8 Scsi_SE_GetNumOfUmtsSupportBand(SCSI_SIM_INDEX sim_index);
+
+extern void Scsi_SE_GetUmtsSupportBandInfo(SCSI_SIM_INDEX sim_index, SCSI_UMTS_BandInfoList const **workBandInfo);
+
+extern void Scsi_SE_GetUmtsFddAndTddSupportBandInfo(SCSI_SIM_INDEX sim_index, SCSI_UMTS_BandInfoList **fddWorkBandInfo, SCSI_UMTS_BandInfoList **tddWorkBandInfo);
+
+extern void Scsi_SE_RequiredUmtsBandListQuery(SCSI_SIM_INDEX sim_index, kal_uint8 *query_array);
+
+extern kal_bool Scsi_SE_IsUmtsSupportBand(SCSI_SIM_INDEX sim_index, SCSI_UMTS_Band_UARFCN_Identifier band_id);
+
+#endif /* __UMTS_RAT__ */
+
+#define SCSI_SET_BMP(_bitmap, _ofst, _type) ((_bitmap) |= (_type)((_type)1 << (_ofst)))
+#define SCSI_CLR_BMP(_bitmap, _ofst, _type) ((_bitmap) &= (_type)(~((_type)1 << (_ofst))))
+#define SCSI_CHK_BMP(_bitmap, _ofst, _type) ((_bitmap) & (_type)((_type)1 << (_ofst)))
+#define SCSI_BYTE_BITMASK 7
+/* Because LSB is for Band 1, so if we want to access Band x , we should access bitmask[x-1] */
+#define SCSI_BAND_BIT_MASK_GET_BYTE_OFFSET(_band) ((_band - (1)) >> (3))
+#define SCSI_BAND_BIT_MASK_GET_BIT_OFFSET(_band) ((_band - (1)) & (SCSI_BYTE_BITMASK))
+
+#ifdef __LTE_RAT__
+#define MAX_BYTE_LTE_BAND_BITMASK 8
+
+typedef struct SCSI_LTE_Band_Bitmask
+{
+ kal_uint8 oneByteBandBitmask[MAX_BYTE_LTE_BAND_BITMASK];
+}
+SCSI_LTE_Band_Bitmask;
+
+/* Extended supported LTE bitmask size in bits (256) / bits in one byte (8)
+ */
+#define MAX_BYTE_LTE_BAND_BITMASK_EXTENDED ( 256 / 8 )
+
+typedef struct SCSI_LTE_Band_Bitmask_Extended
+{
+ kal_uint8 oneByteBandBitmask[MAX_BYTE_LTE_BAND_BITMASK_EXTENDED];
+}
+SCSI_LTE_Band_Bitmask_Extended;
+
+#endif /* __LTE_RAT__ */
+
+#ifdef __NR_RAT__
+
+#define MAX_BYTE_NR_BAND_BITMASK 128
+
+typedef struct SCSI_NR_Band_Bitmask
+{
+ kal_uint8 oneByteBandBitmask[MAX_BYTE_NR_BAND_BITMASK];
+}
+SCSI_NR_Band_Bitmask;
+
+#endif /* __NR_RAT__ */
+
+#if (defined(__23G_PRI_RESEL_SUPPORT__) || defined(__3G_CSG_SUPPORT__) || defined(__LTE_RAT__) || defined(__CDMA2000_RAT__) || defined(__NR_RAT__))
+#define SCSI_MAX_TICKS 0xFFFFFFFF
+
+typedef enum {
+ SCSI_GSM_RAT,
+ SCSI_UMTSFDD_RAT,
+ SCSI_UMTSTDD_RAT,
+ SCSI_LTE_RAT,
+ SCSI_C2K_RAT,
+ SCSI_NR_RAT
+}SCSI_RAT_MODE_TYPE;
+#endif /* defined(__23G_PRI_RESEL_SUPPORT__) || defined(__3G_CSG_SUPPORT__) || defined(__LTE_RAT__) || defined(__CDMA2000_RAT__) || defined(__NR_RAT__) */
+
+#if (defined(__23G_PRI_RESEL_SUPPORT__) || defined(__LTE_RAT__) || defined(__CDMA2000_RAT__) || defined(__NR_RAT__))
+//Dedicated Priority Info
+#define SCSI_MAX_NUM_OF_PRIO_INFO 40
+#define SCSI_MAX_BYTE_OF_GSM_PRIO_ARFCN 128 // bitmask, total 128 bytes.
+#define SCSI_MAX_NUM_OF_UMTSFDD_PRIO_UARFCN 32 // 32 frequency.
+#define SCSI_MAX_NUM_OF_UMTSTDD_PRIO_UARFCN 32 // 32 frequency.
+#define SCSI_MAX_NUM_OF_LTE_PRIO_EARFCN 32 // 32 frequency
+#define SCSI_MAX_NUM_OF_C2K_PRIO_BAND 32 // 32 band
+#define SCSI_MAX_NUM_OF_NR_PRIO_NARFCN 8 //32 frequency
+
+typedef struct{
+ kal_int8 priority;
+ kal_int8 sub_priority; // please check this equal to 0, 2, 4, 6 or 8
+ SCSI_RAT_MODE_TYPE rat_choice;
+ kal_uint8 freq_count; // only used in 3G or LTE type, it keeps the frequency count
+ kal_uint8 gsm_band_indicator; //refer to te_gsm_band_indicator in uas_gas_enums.h
+ /**
+ * for GSM RAT, every bit represenet a ARFCN (from 0~1023); LSB of octet 1 represent arfcn = 0, MSB of octet 1 represent arfcn = 7
+ * for UMTSFDD, every U16 element represent an UARFCN.
+ * for LTE, every U32 element represent an EARFCN.
+ * for C2K, every U8 element represent an Band.
+ * for NR, every U32 element represent an NARFCN.
+ **/
+ union{
+ kal_uint8 *ARFCN_bitmap; // SCSI_MAX_BYTE_OF_GSM_PRIO_ARFCN
+ kal_uint16 *UARFCN_list; // SCSI_MAX_NUM_OF_UMTSFDD_PRIO_UARFCN <== each of them is two bytes.
+ kal_uint32 *EARFCN_list; // SCSI_MAX_NUM_OF_LTE_PRIO_EARFCN <== each of them is four bytes.
+ kal_uint8 *C2K_Band_list; // SCSI_MAX_NUM_OF_C2K_PRIO_BAND <== each of them is one byte
+ kal_uint32 *NARFCN_list; // SCSI_MAX_NUM_OF_NR_PRIO_NARFCN <== each of them is four bytes.
+ }choice;
+} SCSI_layer_prio_struct;
+
+typedef struct{
+ plmn_id_struct rplmn;
+ SCSI_RAT_MODE_TYPE dedi_prio_info_src;
+ kal_uint8 layer_prio_count;
+ SCSI_layer_prio_struct layer_prio_list[SCSI_MAX_NUM_OF_PRIO_INFO];
+
+ kal_uint32 tick_previous; // SCSI internal use
+ kal_uint32 tick_left; // SCSI internal use
+} SCSI_dedi_prio_info;
+
+#define SCSI_MAX_NUM_OF_DEPRIORITIZATION_INFO 8
+#define SCSI_MAX_DEPRIORITIZATION_PLMN_NUM 8
+
+typedef struct{
+ plmn_id_struct rplmn;
+ kal_uint8 earfcn_info_num;
+ kal_uint32 earfcn_info_list[SCSI_MAX_NUM_OF_DEPRIORITIZATION_INFO]; // frequency list, if earfcn == 0xffffffff => all LTE RAT
+
+ kal_uint8 narfcn_info_num;
+ kal_uint32 narfcn_info_list[SCSI_MAX_NUM_OF_DEPRIORITIZATION_INFO]; // frequency list, if narfcn == 0xffffffff => all NR RAT
+
+ kal_uint32 tick_previous; // SCSI internal use
+ kal_uint32 tick_left; // SCSI internal use
+} SCSI_deprioritization_info_struct;
+
+// for VzW request
+typedef struct{
+ kal_uint8 plmn_num;
+ SCSI_deprioritization_info_struct *deprioritization_info_list[SCSI_MAX_DEPRIORITIZATION_PLMN_NUM];
+} SCSI_deprioritization_info_tbl_struct;
+#endif /* __23G_PRI_RESEL_SUPPORT__ || __LTE_RAT__ || __CDMA2000_RAT__ || __NR_RAT__ */
+
+
+#if (defined(__3G_CSG_SUPPORT__) || defined(__LTE_RAT__))
+//CSG Split Info
+#define SCSI_MAX_NUM_OF_CSG_SPLIT_INFO 3 //the value cannot be equal to zero which 'wrap around' will happen in SCSI_newCSGSplitInfo().
+#define SCSI_MAX_BYTE_OF_PHY_CELL_ID 64 // bitmask, total 64 bytes.
+#define SCSI_MAX_NUM_OF_MULTI_PLMN 6
+
+#ifdef __3G_CSG_SUPPORT__
+typedef struct{
+ kal_uint8 plmn_count;
+ plmn_id_struct plmn[SCSI_MAX_NUM_OF_MULTI_PLMN];
+ CsiUarfcn uarfcn;
+ kal_uint8 phyCellId_bitmap[SCSI_MAX_BYTE_OF_PHY_CELL_ID]; //every bit represenet a PSC (from 0~512); LSB of octet 1 represent psc = 0, MSB of octet 1 represent psc = 7
+
+ kal_uint32 tick_previous; // SCSI internal use
+ kal_uint32 tick_left; // SCSI internal use
+} SCSI_umts_csg_split_info;
+#endif /* __3G_CSG_SUPPORT__ */
+
+#ifdef __LTE_RAT__
+typedef struct{
+ kal_uint8 plmn_count;
+ plmn_id_struct plmn[SCSI_MAX_NUM_OF_MULTI_PLMN];
+ CsiEarfcn earfcn;
+ kal_uint8 phyCellId_bitmap[SCSI_MAX_BYTE_OF_PHY_CELL_ID]; //every bit represenet a PSC (from 0~512); LSB of octet 1 represent psc = 0, MSB of octet 1 represent psc = 7
+
+ kal_uint32 tick_previous; // SCSI internal use
+ kal_uint32 tick_left; // SCSI internal use
+} SCSI_lte_csg_split_info;
+#endif /* __LTE_RAT__ */
+
+#ifdef __3G_CSG_SUPPORT__
+typedef struct{
+ kal_uint8 list_count;
+ SCSI_umts_csg_split_info split_info_list[SCSI_MAX_NUM_OF_CSG_SPLIT_INFO];
+}SCSI_umts_csg_split_info_list;
+#endif /* __3G_CSG_SUPPORT__ */
+
+#ifdef __LTE_RAT__
+typedef struct{
+ kal_uint8 list_count;
+ SCSI_lte_csg_split_info split_info_list[SCSI_MAX_NUM_OF_CSG_SPLIT_INFO];
+}SCSI_lte_csg_split_info_list;
+#endif /* __LTE_RAT__ */
+
+#endif /* __3G_CSG_SUPPORT__ || __LTE_RAT__ */
+
+
+// Constructor
+extern void Scsi_Scsi(void);
+extern void Scsi_reset(void);
+
+
+// Initializer
+extern void Scsi_initFromNVRAM(kal_uint8* nvramEfNetparBufPtr, kal_uint16 const nvramEfNetparBufLen);
+
+extern kal_bool Scsi_isNvramInitialized(void);
+
+#ifdef __GSM_RAT__
+/* Jethro: Suppose SIM is able to be handled in all cases, regardless the load is dual mode or single mode. */
+extern void Scsi_initFromSIM(plmn_id_struct const* const rPlmnId,
+ CsiGsmCellList const* const gsmCellList);
+#endif /* __GSM_RAT__ */
+
+#ifdef __UMTS_RAT__ /* 3G is to be built-in */
+extern void Scsi_initFromUSIM(SCSI_SIM_INDEX sim_index,
+ plmn_id_struct const* const rPlmnId,
+ CsiUmtsCellList* const umtsCellList
+#ifdef __GSM_RAT__
+ ,
+ CsiGsmCellList const* const gsmCellList
+#endif
+ );
+
+extern void Scsi_FreqRepositoryInitFromNVRAM(kal_uint8* nvramEfNetparBufPtr, kal_uint16 const nvramEfNetparBufLen);
+extern kal_uint16 Scsi_getNvramEFUmtsFreq(kal_uint8* const nvramEfNetparBufPtr, kal_uint16 const nvramEfNetparBufLen);
+extern void Scsi_freqPurge(void);
+extern void Scsi_freqPurge3GTDDOnly(void);
+#endif /* #ifdef __UMTS_RAT__ */
+
+extern void Scsi_purge(void);
+extern void Scsi_purge3GTDDOnly(void);
+
+// Destructor
+extern void Scsi_destruct(void);
+
+
+#ifdef __GSM_RAT__ /* 2G is to be built-in */
+// GSM
+// Setter
+extern void Scsi_newGsmFreqRange(plmn_id_struct const* const plmnID, CsiGsmBaRangeAndBand* const BARangeList);
+extern void Scsi_newGsmNeighborCells(plmn_id_struct const* const plmnID, CsiGsmCellList* const cellList);
+#ifdef __LTE_RAT__
+extern void Scsi_newGsmLatestServingCell(plmn_id_struct const* const plmnID, CsiGsmCell const* const cell);
+
+//Just for UT currently, not release publicly
+#ifdef UNIT_TEST
+extern void Scsi_delGsmLatestServingCell(plmn_id_struct const* const plmnID);
+#endif /* UNIT_TEST */
+#endif /* __LTE_RAT__ */
+
+// Getter
+extern void Scsi_getGsmFreqRange(plmn_id_struct const* const plmnID, CsiGsmBaRangeAndBand* const BARangeList);
+extern void Scsi_getGsmNeighborCells(plmn_id_struct const* const plmnID, CsiGsmCellList* const cellList);
+#ifdef __LTE_RAT__
+extern kal_bool Scsi_getGsmLatestServingCell(plmn_id_struct const* const plmnID, CsiGsmCell* const cell);
+#endif /* __LTE_RAT__ */
+#endif /* #ifdef __GSM_RAT__ */
+
+
+#ifdef __UMTS_RAT__ /* 3G is to be built-in */
+// UMTS
+/* David 20081107:
+ * Added for auto band mechanism.
+ */
+#ifdef __3G_AUTO_BAND_MECHANISM__
+extern void Scsi_newUmtsWorkingBand(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, SCSI_UMTS_Band_UARFCN_Identifier bandID);
+extern void Scsi_delUmtsWorkingBand(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, SCSI_UMTS_Band_UARFCN_Identifier bandID);
+#endif
+// Setter
+extern void Scsi_newUmtsFreqRange(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsFrequnecyList* const freqRange);
+
+extern void Scsi_newUmtsFreqList(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsFrequnecyList* const freqList, kal_bool correctOverlappingUarfcn);
+
+extern void Scsi_newUmtsNeighborCells(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsCellList* const cellList);
+#ifdef __LTE_RAT__
+extern void Scsi_newUmtsLatestServingCell(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsCellWithUarfcn const* const cell);
+
+//Just for UT currently, not release publicly
+#ifdef UNIT_TEST
+extern void Scsi_delUmtsLatestServingCell(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID);
+#endif /* UNIT_TEST */
+#endif /* __LTE_RAT__ */
+
+extern void Scsi_newUmtsUarfcnList(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID , CsiUmtsUarfcnList *uarfcnList);
+
+// Getter
+extern void Scsi_getUmtsFreqRange(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsFrequnecyList* const freqRange);
+extern void Scsi_getUmtsFreqList(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsFrequnecyList* const freqList);
+/* Nicky 20141007: Stored 3G Cell List is not used. Remove the get function. */
+#if 0
+/* under construction !*/
+#endif
+#ifdef __LTE_RAT__
+extern kal_bool Scsi_getUmtsLatestServingCell(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsCellWithUarfcn* const cell);
+#endif /* __LTE_RAT__ */
+extern void Scsi_getUmtsUarcnList(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmnID, CsiUmtsUarfcnList *uarfcnList);
+extern void Scsi_getUmtsUarfcnByMcc(SCSI_SIM_INDEX sim_index, kal_uint32 const countOfMccs , SCSI_UMTS_UarfcnPerMcc* uarfcnByMccs);
+extern kal_bool Scsi_isUarfcnSharedInCurrentPlmn(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const plmn_found ,kal_uint16 uarfn_to_be_checked );
+
+/* Nicky 20110103: Added for Gemini 2.0 */
+#ifdef __GEMINI__
+extern kal_uint16 Scsi_getUmtsUarfcnUpperBound(SCSI_SIM_INDEX sim_index, SCSI_UMTS_Band_UARFCN_Identifier bandID);
+extern kal_uint16 Scsi_getUmtsUarfcnLowerBound(SCSI_SIM_INDEX sim_index, SCSI_UMTS_Band_UARFCN_Identifier bandID);
+extern kal_uint8 Scsi_getUmtsAdditionalFreqList(SCSI_SIM_INDEX sim_index, SCSI_UMTS_Band_UARFCN_Identifier bandID, kal_uint8 const sizeOfList, kal_uint16 * const additionalFreqList);
+#endif /* #ifdef __GEMINI__ */
+
+/* Nicky 20111028: Added for UMTS Band Extension, which will be used by RRCE module. */
+extern kal_uint16 Scsi_getBandTxRxFreqSeparation(SCSI_SIM_INDEX sim_index, SCSI_UMTS_Band_UARFCN_Identifier bandID);
+
+extern kal_bool Scsi_convertUarfcnForOverlappedFreqBands(SCSI_SIM_INDEX sim_index, kal_uint16 uarfcn, SCSI_UMTS_Band_UARFCN_Identifier bandId, SCSI_UMTS_Band_UARFCN_Identifier otherBandId, kal_uint16 *convertedUarfcn);
+#endif /* #ifdef __UMTS_RAT__ */
+
+extern kal_uint8 Scsi_getPlmns(plmn_id_struct* plmns);
+
+// Retrieve encoded data for saving to non-volatile storages, i.e., NVRAM and USIM/SIM.
+extern kal_uint16 Scsi_getNvramEFNetpar(kal_uint8* const nvramEfNetparBufPtr, kal_uint16 const nvramEfNetparBufLen);
+
+#if (defined(__23G_PRI_RESEL_SUPPORT__) || defined(__LTE_RAT__))
+// SCSI need to provide the following functions:
+
+// Before use any API of DediPrioInfo, please call this function to acquire mutext.
+extern void SCSI_acquirePrioMutex(SCSI_SIM_INDEX sim_index);
+
+// return the pointer of pDediPrioInfo.
+// user can operate on SCSI_dedi_prio_info, but user shall not operate on tick_previous. tick_previous would be updated by SCSI.
+extern SCSI_dedi_prio_info *SCSI_getDediPrioInfo(SCSI_SIM_INDEX sim_index);
+
+// free the memory of pDediPrioInfo, after user call this function, please never use the previous-got memory...So please be careful.
+extern void SCSI_freeDediPrioInfo(SCSI_SIM_INDEX sim_index);
+
+// call SCSI_FreeDediPrioInfo to free previous-put memory in pDediPrioInfo, and then put the point address in pDediPrioInfo.
+// please never use the previous-got memory...So please careful.
+// Besides, update the tick_previous by SCSI. User would not update it.
+extern void SCSI_setDediPrioInfo(SCSI_SIM_INDEX sim_index, kal_uint32 tick_left, SCSI_dedi_prio_info *pDediPrio);
+
+// In this function, please check the left_tick and do correct computing. If expired, please free the pDediPrioInfo and set it NULL.
+extern void SCSI_releasePrioMutex(SCSI_SIM_INDEX sim_index);
+
+
+// Before use any API of DeprioritizationInfo, please call this function to acquire mutext.
+extern void SCSI_acquireDeprioritizationMutex(SCSI_SIM_INDEX sim_index);
+
+// return the pointer of pDeprioritizationInfo.
+// user can operate on SCSI_deprioritization_info_struct, but user shall not operate on tick_previous. tick_previous would be updated by SCSI.
+extern SCSI_deprioritization_info_struct *SCSI_getDeprioritizationInfo(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const rplmn);
+
+// free the memory of specific PLMN of pDeprioritizationInfo.
+extern void SCSI_freeDeprioritizationInfo(SCSI_SIM_INDEX sim_index, plmn_id_struct const* const rplmn);
+
+// call SCSI_freeDeprioritizationInfo to free previous-put memory of pDeprioritizationInfo, and then put the point address to pDeprioritizationInfo.
+// please never use the previous-got memory...So please careful.
+// Besides, update the tick_previous by SCSI. User would not update it.
+extern void SCSI_setDeprioritizationInfo(SCSI_SIM_INDEX sim_index, kal_uint32 tick_left, SCSI_deprioritization_info_struct *pDeprioritizationInfo);
+
+// In this function, please check the left_tick and do correct computing. If expired, please free the pDeprioritizationInfo and set it NULL.
+extern void SCSI_releaseDeprioritizationMutex(SCSI_SIM_INDEX sim_index);
+#endif /* __23G_PRI_RESEL_SUPPORT__ || __LTE_RAT__ */
+
+#if (defined(__3G_CSG_SUPPORT__) || defined(__LTE_RAT__))
+// put the pSlitInfo which contain this arfcn in pSplitInfo according to rat_type, if not found, set content of pSplitInfo all zero.
+// besides, according to tick_left tick_previous to delete the expired split info.
+#ifdef __3G_CSG_SUPPORT__
+extern void SCSI_getUmtsCSGSplitInfo(SCSI_SIM_INDEX sim_index, CsiUarfcn uarfcn, plmn_id_struct const* const plmnID, SCSI_umts_csg_split_info * const pSplitInfo);
+#endif /* __3G_CSG_SUPPORT__ */
+
+#ifdef __LTE_RAT__
+extern void SCSI_getLteCSGSplitInfo(SCSI_SIM_INDEX sim_index, CsiEarfcn earfcn, plmn_id_struct const* const plmnID, SCSI_lte_csg_split_info * const pSplitInfo);
+#endif /* __LTE_RAT__ */
+
+// put the content of pCSGSplitInfoList in SCSI to pSplitInfoList according to rat_type, if pCSGSplitInfoList is null, set content of pSplitInfoList all zero.
+// besides, according to tick_left tick_previous to delete the expired split info.
+#ifdef __3G_CSG_SUPPORT__
+extern void SCSI_getUmtsCSGSplitInfoList(SCSI_SIM_INDEX sim_index, SCSI_umts_csg_split_info_list * const pSplitInfoList);
+#endif /* __3G_CSG_SUPPORT__ */
+
+#ifdef __LTE_RAT__
+extern void SCSI_getLteCSGSplitInfoList(SCSI_SIM_INDEX sim_index, SCSI_lte_csg_split_info_list * const pSplitInfoList);
+#endif /* __LTE_RAT__ */
+
+// If found the same frequecny replace it, else allocate one memory and put the SCSI_csg_split_info in the CSGSplitInfo according to rat_type.
+// besides, according to tick_left tick_previous to delete the expired split info.
+#ifdef __3G_CSG_SUPPORT__
+extern void SCSI_newUmtsCSGSplitInfo(SCSI_SIM_INDEX sim_index, kal_uint32 tick_left, SCSI_umts_csg_split_info const * const pSplitInfo);
+#endif /* __3G_CSG_SUPPORT__ */
+
+#ifdef __LTE_RAT__
+extern void SCSI_newLteCSGSplitInfo(SCSI_SIM_INDEX sim_index, kal_uint32 tick_left, SCSI_lte_csg_split_info const * const pSplitInfo);
+#endif /* __LTE_RAT__ */
+
+#endif /* __3G_CSG_SUPPORT__ || __LTE_RAT__ */
+
+/*Multi-Mode******************************************************************/
+#ifdef __GSM_RAT__
+extern void Scsi_SE_ComposeGsmBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint8 GBandBitmask);
+
+extern void Scsi_SE_retrieveGsmBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint8 *pGBandBitmask);
+#endif /* __GSM_RAT__ */
+#ifdef __UMTS_RAT__
+extern void Scsi_SE_ComposeUmtsBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint32 UBandBitmask);
+
+extern void Scsi_SE_retrieveUmtsBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint32 *pUBandBitmask);
+
+extern void Scsi_SE_retrieveUmtsFddBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint32 *pUFddBandBitmask);
+
+extern void Scsi_SE_ComposeUmtsFddAndTddBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint32 UFddBandBitmask, kal_uint32 UTddBandBitmask);
+
+extern void Scsi_SE_retrieveUmtsFddAndTddBandBitmask(SCSI_SIM_INDEX sim_index, kal_uint32 *pUFddBandBitmask, kal_uint32 *pUTddBandBitmask);
+#endif /* __UTMS_RAT__ */
+#ifdef __LTE_RAT__
+extern void Scsi_SE_ComposeLteBandBitmask(SCSI_SIM_INDEX sim_index, SCSI_LTE_Band_Bitmask LBandBitmask);
+
+extern void Scsi_SE_retrieveLteBandBitmask(SCSI_SIM_INDEX sim_index, SCSI_LTE_Band_Bitmask *pLBandBitmask);
+
+extern void Scsi_SE_ComposeLteBandBitmask_extended( SCSI_SIM_INDEX sim_index, const SCSI_LTE_Band_Bitmask_Extended* LBandBitmask );
+
+extern void Scsi_SE_retrieveLteBandBitmask_extended( SCSI_SIM_INDEX sim_index, SCSI_LTE_Band_Bitmask_Extended* pLBandBitmask );
+#endif /* __LTE_RAT__ */
+
+#ifdef __NR_RAT__
+
+extern void Scsi_SE_ComposeNRBandBitmask(SCSI_SIM_INDEX sim_index, const SCSI_NR_Band_Bitmask* pNRBandBitmask);
+extern void Scsi_SE_retrieveNRBandBitmask(SCSI_SIM_INDEX sim_index, SCSI_NR_Band_Bitmask* pNRBandBitmask);
+extern void Scsi_SE_ComposeNR_ENDCBandBitmask(SCSI_SIM_INDEX sim_index,
+ SCSI_GEMINI_STATUS gemini_status,
+ const SCSI_NR_Band_Bitmask* pNR_ENDCBandBitmask);
+extern void Scsi_SE_retrieveNR_ENDCBandBitmask(SCSI_SIM_INDEX sim_index,
+ SCSI_GEMINI_STATUS gemini_status,
+ SCSI_NR_Band_Bitmask* pNR_ENDCBandBitmask);
+#endif /* __NR_RAT__ */
+
+#ifdef __LTE_RAT__
+extern void Scsi_newLteFreqList(plmn_id_struct const* const plmnID, CsiLteFrequencyList* const freqList);
+
+extern void Scsi_getLteFreqList(plmn_id_struct const* const plmnID, CsiLteFrequencyList* const freqList);
+#endif /* __LTE_RAT__ */
+
+#if (defined(__3G_CSG_SUPPORT__) || defined(__LTE_RAT__))
+extern void Scsi_prevVisitedCellInitFromNVRAM(kal_uint8* nvramEfPrevVisitedCellBufPtr, kal_uint16 const nvramEfPrevVisitedCellBufLen);
+
+extern kal_uint16 Scsi_getNvramEFPrevVisitedCell(kal_uint8* const nvramEfPrevVisitedCellBufPtr, kal_uint16 const nvramEfPrevVisitedCellBufLen);
+
+extern void Scsi_prevVisitedCellPurge(void);
+
+extern void Scsi_newPrevVisitedCell(SCSI_SIM_INDEX const simIdx, plmn_id_struct const* const plmnID, ScsiPrevVisitedCell * prevVisitedCell);
+
+extern void Scsi_delPrevVisitedCellGivenPlmnAndCsg(SCSI_SIM_INDEX const simIdx, plmn_id_struct const* const plmnID, CsiCsgId const csgID);
+
+extern void Scsi_getPrevVisitedCellListByPlmn(SCSI_SIM_INDEX const simIdx, plmn_id_struct const* const plmnID, ScsiPrevVisitedCellList * const prevVisitedCellList);
+
+extern kal_bool Scsi_isPrevVisitedCellExistedGivenPlmnAndCsg(SCSI_SIM_INDEX const simIdx, plmn_id_struct const* const plmnID, CsiCsgId const csgID);
+
+#endif /* __3G_CSG_SUPPORT__ || __LTE_RAT__ */
+/*Multi-Mode******************************************************************/
+
+#ifdef UNIT_TEST
+extern void Scsi_initFromNvramUnitTesting(SCSI_SIM_INDEX sim_index);
+extern void Scsi_initFromNvramUnitTesting1(SCSI_SIM_INDEX sim_index);
+extern void Scsi_initFromNvramUnitTesting2(SCSI_SIM_INDEX sim_index);
+extern void Scsi_initFromNvramUnitTesting3(SCSI_SIM_INDEX sim_index);
+extern void Scsi_initFromNvramUnitTesting4(SCSI_SIM_INDEX sim_index);
+extern void Scsi_initFromNvramUnitTestingForRplmnInfo(SCSI_SIM_INDEX sim_index);
+//#ifdef __BAND_PRIORITY_SEARCH__
+extern void Scsi_initFromNvramUnitTestingForBandPrioSearch(SCSI_SIM_INDEX sim_index);
+//#endif /* __BAND_PRIORITY_SEARCH__ */
+extern void Scsi_te(SCSI_SIM_INDEX sim_index);
+#endif
+
+
+#endif /* _(!@$ `scsi.h' $@!)_ */