[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/protocol/interface/general/irat_common_struct.h b/mcu/protocol/interface/general/irat_common_struct.h
new file mode 100644
index 0000000..f79a1fd
--- /dev/null
+++ b/mcu/protocol/interface/general/irat_common_struct.h
@@ -0,0 +1,884 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *   irat_common_struct.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * 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!
+ *
+ ****************************************************************************/
+
+#ifndef _IRAT_COMMON_STRUCT_H
+#define _IRAT_COMMON_STRUCT_H
+
+#include "kal_general_types.h"
+#include "mmi_l3_enums.h"
+#include "mcd_l3_inc_gprs_struct.h"
+#include "ps_public_enum.h"
+#include "stack_config.h"
+#include "l3_inc_enums.h"
+#include "l3_inc_local.h"
+#include "irat_common_enums.h"
+#include "mcd_l3_inc_struct.h"
+#include "as_inter_core_struct.h"
+#include "global_type.h"
+#include "general_qos_struct.h"
+
+#define MAX_VAL(VAL_A, VAL_B)   (((VAL_A) > (VAL_B)) ? (VAL_A):(VAL_B))
+
+#if defined(GPRS_MAX_PDP_SUPPORT) && defined(LTE_MAX_EPSB_SUPPORT)
+    #define MAX_TRANSFERRED_BEARER_NUM MAX_VAL(GPRS_MAX_PDP_SUPPORT, LTE_MAX_EPSB_SUPPORT)
+#elif defined(LTE_MAX_EPSB_SUPPORT)
+    #define MAX_TRANSFERRED_BEARER_NUM LTE_MAX_EPSB_SUPPORT // fail safe, this line has no meaning. just prevent compile error
+#else
+    #define MAX_TRANSFERRED_BEARER_NUM GPRS_MAX_PDP_SUPPORT // fail safe, this line has no meaning. just prevent compile error
+#endif
+
+//#define MAX_BEARER_CTXT_NUM MAX_TRANSFERRED_BEARER_NUM
+
+#define MAX_BEARER_CTXT_NUM 11
+#define MAX_BEARER_ID       16
+
+typedef struct {
+    kal_uint8   ti_len;
+    kal_uint8   ti[UGSM_TI_IE_LEN];
+}irat_ti_struct;
+
+typedef struct {
+    kal_bool        cause_present;
+    ps_cause_enum   cause_value;
+}irat_addr_type_limitation_cause_struct;
+
+typedef struct
+{
+    kal_uint8                   qci;
+} simple_eps_qos_struct;
+
+typedef struct {
+    // if iRAT, source SM need to fill the following fields
+    irat_transfer_bearer_type_enum  bearer_type;
+    
+    // NSAPI / EBI (range is 5~15)
+    kal_uint8                       bearer_id;
+    
+    // NSAPI / EBI (range is 5~15)
+    kal_uint8                       linked_bearer_id;
+    
+	
+    // secondary bearer set ip_addr_type = NULL_TYPE
+    ip_addr_struct                  ip_addr;
+    
+    // secondary bearer doesn't need to set this field
+    apn_struct                      apn;
+    
+    // this parameter is critical to 23G. SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_ug_qos_present;
+    // negotiated qos parameter used in 23G
+    qos_struct                      ug_qos;
+    
+    kal_bool                        is_eps_qos_present;
+    // When ESM transfer more than GPRS_MAX_PDP_SUPPORT contexts to SM, 
+    // SM need to use eps_qos to decide which contexts need to be mapped failed and inform ESM to local release it.
+    eps_qos_struct           eps_qos;
+    
+    // this parameter is critical to 2G. if iRAT is 4G2, SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_llc_sapi_present;
+    kal_uint8                       llc_sapi; 
+    
+    // this parameter is critical to 2G. if iRAT is 4G2, SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_radio_priority_present;
+    kal_uint8                       radio_priority;
+    
+    // this parameter is critical to 2G. if iRAT is 4G2, SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_pfi_present;
+    kal_uint8                       pfi;
+    
+    // this parameter is critical to 23G. SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_ti_present;
+    irat_ti_struct                  ti;
+    
+    irat_addr_type_limitation_cause_struct addr_type_limitation_cause;
+    
+    bearer_service_type_enum				bearer_service_type;
+    
+    /* only used in 23G4 inter-RAT, when tcm_requested_deact==KAL_TRUE, this PDP must map fail, used to perform local deact */
+    kal_bool tcm_requested_deact;
+
+    //BCM and ETFT parameters to maintain sync between SM and ESM
+    bcm_enum    bcm_info;
+    etft_enum   etft_info;
+}bearer_ctxt_struct;
+
+
+typedef struct {
+    kal_uint8           total_number;                   // Total number of PDP context/EPS bearer which will transfer to target RAT
+    bearer_ctxt_struct  context[MAX_TRANSFERRED_BEARER_NUM]; // bearer context which will transfer to target RAT
+}bearer_ctxt_transfer_struct;
+
+typedef struct {
+    // NSAPI / EBI (range is 5~15)
+    kal_uint8                       bearer_id;
+    
+    // this parameter is critical to 23G. SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_ug_qos_present;
+    // negotiated qos parameter used in 23G
+    qos_struct                      ug_qos;
+    
+    // this parameter is critical to 2G. if iRAT is 4G2, SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_llc_sapi_present;
+    kal_uint8                       llc_sapi; 
+    
+    // this parameter is critical to 2G. if iRAT is 4G2, SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_radio_priority_present;
+    kal_uint8                       radio_priority;
+    
+    // this parameter is critical to 2G. if iRAT is 4G2, SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_pfi_present;
+    kal_uint8                       pfi;
+    
+    // this parameter is critical to 23G. SM can just send MAP FAIL to ESM when this parameter is not present
+    kal_bool                        is_ti_present;
+    irat_ti_struct                  ti;
+
+}bearer_legacy_rat_para_struct;
+
+
+typedef struct
+{
+    sec_ctxt_domain_id_enum domain_id;
+    kal_uint8               umts_ciphering_key[CK_LEN];
+    kal_uint8               umts_integrity_key[IK_LEN];
+    kal_uint8               gsm_ciphering_key[KC_LEN];
+    kal_uint8               gsm_ciphering_key128[KC128_LEN];
+}security_context_struct;
+
+
+/* Merged from GSM / UMTS Multimode development branch **********/
+/* Common structure */
+/* Measurement request/confirm related: GAS/UAS to EAS */
+
+typedef struct
+{
+   kal_uint16	physical_cell_id;
+   kal_int16	cpich_rscp;
+   kal_int16	cpich_ec_n0;
+} ir_reported_fdd_cells_csg_meas_info;
+
+typedef struct
+{
+   kal_uint16  uarfcn;
+   kal_int16   uarfcn_rssi;
+   kal_uint8   num_reported_cells;
+   ir_reported_fdd_cells_csg_meas_info  ir_reported_fdd_cells_csg_meas_info_list[MAX_NR_OF_CSG_CELLS_IN_CELL_LIST];
+} ir_umts_carrier_csg_meas_result_struct;
+
+typedef struct FDD_meas_UmtsCellList
+{
+   kal_uint8 numElements;
+
+   meas_UmtsCellListPerCarrier element[FDD_MAX_NUM_MEASURED_UMTS_CARRIERS];
+}
+FDD_meas_UmtsCellList;
+
+typedef struct TDD_meas_UmtsCellList
+{
+   kal_uint8 numElements;
+
+   meas_UmtsCellListPerCarrier element[TDD_MAX_NUM_MEASURED_UMTS_CARRIERS];
+}
+TDD_meas_UmtsCellList;
+
+typedef struct
+{
+   kal_bool    is_valid;
+   EARFCN      earfcn;
+   kal_uint16  pci;
+   kal_uint32  cell_id;
+   kal_bool    sib2_hs_flg;
+   kal_bool    el1_hst_md_flg;
+   kal_uint32  valid_duration;
+} ir_lte_scell_struct;
+
+/* This structure represents the redirection info from GSM or UMTS to LTE */
+typedef struct
+{
+   EARFCN      earfcn;
+   kal_bool    target_cell_valid_flag;
+   kal_uint16  target_cell;
+   kal_bool    not_allowed_exist_flag;
+   /* It is a LTE PCI bit map (0-503), least significant bit of not_allowed_cells [0] 
+    * represents PCI-0, and the most significant bit of not_allowed_cells [0] 
+    * represents PCI-7.
+    * The cell IDs (PCI) of not allowed cells are set to  "1" and the cell IDs 
+    * (PCI) of those other than not allowed cells are set to "0".
+    */
+   kal_uint8   not_allowed_cell[PCI_BITMAP_MAX_NUM];
+} lte_redirect_info;
+#ifdef __UMTS_FDD_MODE__
+typedef struct
+{
+   kal_uint16  uarfcn;
+   kal_uint16  scrambling_code;
+   kal_bool    tx_diversity;
+} ts_umts_fdd_cell;
+#endif
+
+#ifdef __UMTS_TDD128_MODE__
+typedef struct
+{
+   kal_uint16  uarfcn;
+   kal_uint16  cell_parameter;
+   kal_bool    tstd;
+   kal_bool    sctd;
+} ts_umts_tdd_cell;
+#endif
+
+typedef union
+{
+   ts_umts_fdd_cell  fdd_cell;
+#ifdef __UMTS_TDD128_MODE__
+   ts_umts_tdd_cell  tdd_cell;
+#endif
+} ts_umts_target_cell_union;
+
+typedef struct
+{
+   kal_bool	 is_best_cell_suitable_allowed_CSG;
+   kal_bool  is_best_cell_allowed_hybrid;
+   ir_umts_carrier_csg_meas_result_struct ir_umts_carrier_csg_meas_result;
+} ts_3G_csg_ucell_evluation_result;
+
+typedef struct
+{
+   kal_bool    bsic_present; /* if TRUE bsic is present */
+   kal_uint8   bsic;         /* Optional, present if bsic_present is TRUE */
+   te_gsm_band_indicator  gsm_band_indicator;
+   kal_uint16  bcch_arfcn;
+} GSM_TargetCellInfo;
+
+#if defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) // BJM
+typedef struct
+{
+   kal_uint8           numElements;
+   GSM_TargetCellInfo  target_gcell_info[MAX_TARGET_GSM_CELLS_NUM];
+} uas_gas_redirectInfo;
+#endif /* defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) */
+
+typedef struct
+{
+   te_gsm_band_indicator  gsm_band_indicator;
+   kal_uint8             *ARFCN_bitmap;
+} eas_gas_redirectInfo;
+
+#if defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) // BJM
+typedef union
+{
+   uas_gas_redirectInfo  uas_redirectInfo;
+   eas_gas_redirectInfo  eas_redirectInfo;
+} redirect_info_union;
+#endif /* defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) */
+
+#if (defined(__UMTS_R5__) && defined(__GERAN_R5__))
+typedef struct
+{
+   kal_uint8  numOctets;
+   kal_uint8  stringData[23]; /* Only the first numOctets elements are valid */
+} GERAN_SystemInfoBlock;
+
+typedef struct
+{
+   kal_uint8              numElements;
+   GERAN_SystemInfoBlock  element[MAX_GSM_SYS_INFO_BLOCKS_NUM]; /* Only the first numElements are valid */
+} GERAN_SystemInformation;
+#endif
+
+#if defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) // BJM
+typedef struct GSM_Redirect_Info
+{
+   te_ir_redirection_type  redirection_type;
+   redirect_info_union     redirection_info;
+} GSM_Redirect_Info;
+#endif /* defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) */
+
+#if (defined(__UMTS_R5__) && defined(__GERAN_R5__)) // BJM
+typedef struct
+{
+   GERAN_SysInfoType        sys_info_type;
+   GERAN_SystemInformation  sys_info;
+} te_ir_geran_sys_info;
+
+typedef struct
+{
+   kal_uint8              bsic;
+   te_gsm_band_indicator  gsm_band_indicator;
+   kal_uint16             bcch_arfcn;
+   te_ir_geran_sys_info   gsm_sys_info;
+} GSM_TargetCell_SI_Info;
+#endif /* (defined(__UMTS_R5__) && defined(__GERAN_R5__)) */
+
+#if defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) // BJM
+typedef union
+{
+   GSM_TargetCellInfo  target_gcell_reselect_info;
+   GSM_Redirect_Info   target_gcell_redirect_list;
+} GSM_TargetCell_Info_union;
+
+typedef struct
+{
+   kal_uint8               numElements;
+   GSM_TargetCell_SI_Info  target_gcell_SI_info[MAX_TARGET_GSM_CELLS_NUM];
+} GSM_TargetCell_SI_Info_List;
+
+typedef union
+{
+   te_ir_geran_sys_info         target_gcell_reselect_SI_info;
+   GSM_TargetCell_SI_Info_List  target_gcell_redirect_SI_list;
+} GSM_TargetCell_SI_Info_union;
+#endif /* defined(__UMTS_FDD_MODE__) || defined(__UMTS_TDD128_MODE__) */
+
+typedef struct 
+{
+   te_cn_domain_cipher_status  cipher_status;
+   /* The following flag is only used when 2G -> 3G HO and ciphering is on. 
+    * Normally, this flag should be set to KAL_FALSE. If GAS got a new 
+    * ciphering key, but this hasn't been activated yet (GAS hasn't received 
+    * CIPHER COMMAND), and then 2G -> 3G HO happens, 3G NW will use OLD key
+    * for the folllowing ciphering. Thus, at this case, GAS should set this 
+    * flag to TRUE. RRCE will use OLD key instead of NEW key for ciphering.
+    * Please refer to 25.331 CR 2567
+    */
+   kal_bool  is_new_cipher_key_received;
+} ts_ciphering_info;
+
+typedef struct
+{
+   kal_uint16 pci;
+   kal_int16  rsrp;
+   kal_int16  rsrq;
+} ecell_meas_result_struct;
+
+typedef struct
+{
+   EARFCN      earfcn;
+   kal_bool    is_best_cell_suitable_allowed_CSG;
+   kal_bool    is_best_cell_allowed_hybrid;
+   ecell_meas_result_struct  ecell_meas_result;
+} csg_freq_search_result_struct;
+
+// RAT change from 23G to 4G, NAS context transfer(MM->EMM)
+typedef struct
+{
+    // UAS -> EMM
+    kal_uint8                   nas_security_param[NAS_SECURITY_PARAM_LEN];
+
+    // MM -> EMM
+    kal_bool                    is_gmm_ready_connected;
+    tau_required_enum           tau_required;
+    kal_uint8                   cksn;
+    security_context_struct     security_context;
+    kal_bool                    is_ptmsi_valid;
+    kal_uint8                   ptmsi[PTMSI_LEN];
+    kal_bool                    is_ptmsi_sig_valid;
+    kal_uint8                   ptmsi_sig[PTMSI_SIG_LEN];
+    kal_bool                    is_rai_valid;
+    rai_struct                  rai;
+    kal_bool                    is_lai_valid;
+    lai_struct                  lai;
+    kal_bool                    is_tmsi_valid;
+    kal_uint8                   tmsi[TMSI_LEN];
+    gsm_update_status_enum      mm_update_status;
+    kal_bool                    is_ecc_list_valid;
+    plmn_id_struct              ecc_list_plmn;
+    gsm_state_enum              gsm_attach_state;
+    kal_bool                    is_ps_suspended;
+    kal_bool                    is_prev_rau_suspended; // [2->4 only] To notify EMM whether there is a suspended/unfinished RAU
+#ifdef __NG_ECALL_SUPPORT__
+    kal_bool                    is_t3242_running;
+    kal_uint32                  t3242_remaining_time;
+    kal_bool                    is_t3243_running;
+    kal_uint32                  t3243_remaining_time;
+#endif
+} mm2emm_irat_info_struct;
+
+// RAT change from 4G to 23G, NAS context transfer(EMM->MM)
+typedef struct
+{
+    // ERRC -> RATCM (GAS/UAS?)
+    ho_from_lte_type_enum       ir_ho_type;
+    kal_bool                    gsm_cipher_key_infoP;
+    kal_bool                    gsm_cipher_key128_infoP;
+    csfb_indicator_enum         csfb_indicator;
+    
+    // EMM -> RATCM
+    loopback_mode_status_enum   loopback_mode_status;
+
+    // EMM to MM
+    kal_bool                    rau_required;
+    kal_uint8                   nas_ksi;
+    security_context_struct     security_context[2];
+    kal_bool                    is_mapped_ptmsi_valid;
+    kal_uint8                   mapped_ptmsi[PTMSI_LEN];
+    kal_bool                    is_mapped_ptmsi_sig_valid;
+    kal_uint8                   mapped_ptmsi_sig[PTMSI_SIG_LEN];
+    kal_bool                    is_mapped_rai_valid;
+    rai_struct                  mapped_rai;
+    mt_csfb_type_enum           mt_csfb_type;
+    kal_bool                    is_ecc_list_valid;
+    plmn_id_struct              ecc_list_plmn;
+    kal_bool                    is_eia0_used;
+    conn_rel_ind_cause_enum     redir_cause;
+    kal_bool                    is_lte_rrc_conn_failure;
+#ifdef __NG_ECALL_SUPPORT__
+    kal_bool                    is_t3444_running;
+    kal_uint32                  t3444_remaining_time;
+    kal_bool                    is_t3445_running;
+    kal_uint32                  t3445_remaining_time;
+#endif
+} emm2mm_irat_info_struct;
+
+
+typedef struct
+{
+    // SM -> ESM
+    kal_bool                    sm_deactivate_isr;
+
+} sm2esm_irat_info_struct;
+
+typedef struct {
+    kal_uint8 total_number; // Total number of active EPS bearer on ESM
+    bearer_legacy_rat_para_struct parameters[MAX_TRANSFERRED_BEARER_NUM];
+}sm_esm_bearer_legacy_para_struct;
+
+typedef struct
+{
+    // ESM -> MM
+    kal_bool                    esm_deactivate_isr;
+
+    // ESM -> SM
+    kal_uint16                  nsapi_status;
+
+    // ESM -> SM
+    sm_esm_bearer_legacy_para_struct bearer_legacy_para;
+
+} esm2sm_irat_info_struct;
+
+/* __4G_BACKGROUND_SEARCH__ begin*/
+typedef struct
+{
+   EARFCN      earfcn;
+   kal_uint16  pci;
+   kal_int16   rsrp;
+   kal_int16   rsrq;
+   kal_int16   sinr;
+   kal_int16   rs_sinr;
+   kal_bool    rsrq_on_all_symbols;
+   kal_bool    rsrq_wideband;
+} eas_cell_info;
+
+/* 3G4 background search */
+typedef struct
+{
+   kal_uint16  uarfcn;
+   kal_uint16  pci;
+   kal_int16   rscp;
+/*FDD:in qdBm.Range:-480~-100 means (-120 ~-25)dBm in 0.25 dB Step.*/
+/*TDD:in qdBm.Range:-500~-100 means (-125 ~-25)dBm in 0.25 dB Step.*/
+//#ifdef __UMTS_FDD_MODE__
+   kal_int16   ec_n0; /*Ec/N0, in qdB. Range: -100~0 means -25~0 dB in 0.25 dB setp.*/
+//#endif //__UMTS_FDD_MODE__
+} uas_cell_info;
+
+
+/*2G4 background search */
+typedef struct
+{
+   kal_uint16  garfcn;
+   kal_uint16  bsic;
+   te_gsm_band_indicator gsm_band_ind;
+   kal_int32   rssi;   
+} gas_cell_info;
+/* __4G_BACKGROUND_SEARCH__ end*/
+
+
+typedef struct {
+  kal_uint8 epsbearer_id;
+  kal_uint8 rb_index;
+}enasas_epsbearer_mapping_struct;
+
+#define ENASAS_MAX_DRB 11
+
+typedef struct {
+  kal_uint8 num_of_bearer;
+  enasas_epsbearer_mapping_struct bearer[ENASAS_MAX_DRB];
+}enasas_add_epsbearer_list_struct;
+
+/* TS 24.501, 9.11.2.9 S1 mode to N1 mode NAS transparent container, the size of the value part */
+#define ENASAS_MAX_SIZE_IRAT_4G5_NAS_CONTAINER (10)
+
+typedef struct
+{
+    kal_uint16 data_len;
+    kal_uint8 data[ENASAS_MAX_SIZE_IRAT_4G5_NAS_CONTAINER];
+} irat_nas_container_octet_string_struct, errc_nrrc_nas_container_octet_string_struct;
+
+#define NRRC_NAS_SECURITY_PARAM_FROM_NR_LENGTH (1)
+
+/* 5G4 */ 
+typedef struct { 
+    kal_uint8 nas_security_param_from_nr[ 
+        NRRC_NAS_SECURITY_PARAM_FROM_NR_LENGTH]; 
+} irat_container_nrrc_to_vgmm_struct; 
+
+typedef struct { 
+    kal_bool is_kasme_valid; // is_kasme_valid shall be KAL_TRUE when in IRAT HO case 
+    kal_uint8 kasme[KASME_NUM]; 
+} irat_container_emm_info_struct, irat_container_emm_to_errc_struct; 
+
+/* 4G5 */ 
+typedef struct { 
+    kal_bool is_nas_container_valid; // is_nas_container_valid and is_nh_valid will be KAL_TRUE when in IRAT HO case 
+    irat_nas_container_octet_string_struct nas_container; 
+    kal_bool is_nh_valid; 
+    kal_uint8 NH[NH_NUM]; 
+} irat_container_errc_to_emm_struct; 
+
+typedef struct { 
+    nrrc_kamf_struct kamf; 
+    kal_uint32 ul_nas_count; 
+} irat_container_vgmm_to_nrrc_struct; 
+
+
+#endif /* _IRAT_COMMON_STRUCT_H */