[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/protocol/interface/ims/imc_iwlan_struct.h b/mcu/protocol/interface/ims/imc_iwlan_struct.h
new file mode 100644
index 0000000..329ec68
--- /dev/null
+++ b/mcu/protocol/interface/ims/imc_iwlan_struct.h
@@ -0,0 +1,236 @@
+#ifndef _IMC_IWLAN_STRUCT_H
+#define _IMC_IWLAN_STRUCT_H
+
+#include "ps_public_enum.h"
+#include "ims_common_def.h"
+#include "ims_interface_md.h"
+#include "atp_imc_struct.h"
+#include "codec_def.h"
+#include "custom_iwlan_config.h"
+
+typedef enum {
+    IMC_IWLAN_MEDIA_UNSPEC = 0,
+    IMC_IWLAN_MEDIA_NEW,
+    IMC_IWLAN_MEDIA_UPDATE,
+    IMC_IWLAN_MEDIA_DEL
+} imc_iwlan_media_state_enum;
+
+typedef enum {
+    IMC_IWLAN_IMS_CALL_STATUS_UNSPEC = 0,
+    IMC_IWLAN_IMS_CALL_STATUS_REQ,
+    IMC_IWLAN_IMS_CALL_STATUS_BEGIN,
+    IMC_IWLAN_IMS_CALL_STATUS_CONNECTED,
+    IMC_IWLAN_IMS_CALL_STATUS_END,
+} imc_iwlan_ims_call_status_enum;
+
+typedef enum
+{
+    IMS_STATE_IDLE = 0,
+    IMS_STATE_ONCELL,
+    IMS_STATE_ONWIFI,
+    IMS_STATE_CNT,
+    IMS_STATE_ONALL = 0xCC,
+}ims_state_enum;
+
+typedef enum {
+    IMS_ACTIVE_NOT_ALLOW = 0,
+    IMS_ACTIVE_ALLOW     = 1,
+    IMS_ACTIVE_MAINTAIN  = 2,
+} ims_active_status_enum;
+
+typedef enum {
+    IMS_NOT_ALLOW_UNSPEC      = 0,
+    IMS_RF_OFF                = BITMASK(1),
+    IMS_23G_RAU               = BITMASK(2),
+    IMS_AFR_DEREG             = BITMASK(3),
+    IMS_SIM_INVALID           = BITMASK(4),
+    IMS_NOT_ALLOW_CELL        = BITMASK(5),
+    IMS_WIFI_ONLY_OR_NA       = BITMASK(6),
+    IMS_RAT_NOT_SUPPORT       = BITMASK(7),
+    IMS_ROAM_BAR              = BITMASK(8),
+    IMS_VOPS_BAR              = BITMASK(9),
+    IMS_VOPS_BAR_WITH_CALL    = BITMASK(10),
+    IMS_C2K_DEREG             = BITMASK(11),
+    IMS_NOT_ALLOW_WIFI        = BITMASK(12),
+    IMS_CS_PREFER             = BITMASK(13),
+    IMS_POOR_WIFI             = BITMASK(14),
+    IMS_DEAD_ZONE             = BITMASK(15),
+    IMS_SIP403                = BITMASK(16),
+    IMS_CELL_ONLY_OR_NA       = BITMASK(17),
+} ims_not_allow_cause_enum;
+
+typedef enum {
+    IMS_ROAMING_DISABLE = 0,
+    IMS_ROAMING_ENABLE  = 1,
+} ims_roaming_status_enum;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    ims_roaming_status_enum allow_3gpp_roaming;
+} imc_iwlan_ims_roaming_status_ind_struct;
+
+/*
+ * @brief IMS diable by IWLAN
+ * @note MSG_ID_IMC_IWLAN_IMS_DEREG_IND/RSP
+ *       AT+EIMSDEREG=4
+ */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint32 dereg_cause; 
+} imc_iwlan_ims_dereg_ind_struct,
+  imc_iwlan_ims_dereg_rsp_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    imc_acct_type_enum              acct_type; //defined in ims_interface_md.h
+    kal_uint32                      call_id;
+    ims_call_mode_enum              call_mode; //defined in ims_interface_md.h
+    imc_iwlan_ims_call_status_enum  call_status;
+} imc_iwlan_ims_call_status_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    hvolte_call_domain_enum call_domain;
+    kal_bool                is_for_silent_redial;
+    hvolte_mode_change_cause_enum cause;
+} imc_iwlan_ims_cc_set_hvolte_call_domain_req_struct;
+
+typedef struct {
+    kal_uint8         domain;  // 3gpp domain
+    ims_rat_type_enum gsm_rat; // detail 3gpp rat
+    c2k_rat_type_enum c2k_rat; // detail c2k rat
+
+    /* 3GPP cell info */
+    nas_ps_reg_status_enum nas_ps_reg_status;
+    kal_bool               is_roaming;
+    kal_uint8              plmn[MAX_PLMN_LEN + 1]; /* in string format, from +EOPS */
+    kal_uint64             cell_id;
+    kal_uint32             area_code;              /* lac or tac */
+    cell_service_enum      service_state;          /* +EIMSINFO */
+    // TBD: kal_bool     is_emc_supported;
+
+    /* C2K cell info */
+    kal_uint16            sid;
+    kal_uint16            nid;
+    kal_uint8             pzid;
+    kal_uint16            base_id;
+    kal_uint32            sector_id[4];
+    kal_uint8             subnet_length;
+    kal_uint8             carrier_id[7];
+    domain_id_enum        c2k_domain;  //c2k domain
+    c2k_cell_service_enum c2k_service_state;     /* +EC2KREG */
+    /*ecall over IMS*/
+#ifdef __NG_ECALL_SUPPORT__
+    imcf_bool             support_ecl; /*network support ecall over ims or not*/
+#endif
+} ims_cell_info_t;
+
+typedef struct {
+    kal_bool sms;
+    kal_bool voice;
+    kal_bool video;
+} ims_ft_tag_onwifi_t;
+
+typedef struct {
+    kal_bool sms;
+    ims_cap_rat_enum voice;
+    ims_cap_rat_enum video;
+} ims_ft_tag_oncell_t;
+
+typedef struct {
+    ims_ft_tag_oncell_t oncell;
+    ims_ft_tag_onwifi_t onwifi;
+} ims_ft_tags_t;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                ims_enable;
+    ims_active_status_enum  allow_active;
+    kal_uint32              not_allow_cause; //bitmap, indicate the ims not allow cause 
+    ims_ft_tags_t           ft_tags;
+    ims_cell_info_t         ims_cell_info;
+} imc_iwlan_ims_cap_info_ind_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                  call_id;
+    voip_codec_enum            audio_codec;
+    imc_iwlan_media_state_enum media_state;
+} imc_iwlan_call_media_info_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8            hplmn_voice_capability;// 0:disable,1:enable,0xFF:not seted by NW
+    kal_uint8            hplmn_video_capability;// 0:disable,1:enable,0xFF:not seted by NW
+    kal_uint8            vplmn_voice_capability;// 0:disable,1:enable,0xFF:not seted by NW
+    kal_uint8            vplmn_video_capability;// 0:disable,1:enable,0xFF:not seted by NW
+} imc_iwlan_mo_config_ind_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+} imc_iwlan_wifi_service_fail_req_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    srvcc_status_enum srvcc_status;
+} imc_iwlan_srvcc_status_update_req_struct;
+
+typedef enum {
+    REG_CAUSE_NONE = 0,
+    REG_SIP_NO_RSP,
+    REG_SIP403_ROAMING,
+    REG_SIP403_3,
+    REG_PCSCF_ERR,
+    PRIO_CAUSE_CNT,
+} imc_iwlan_prio_cause_e;
+
+typedef enum {
+    IMC_IWLAN_RAN_PRIO_NONE = 0,
+    IMC_IWLAN_RAN_PRIO_LOW,
+    IMC_IWLAN_RAN_PRIO_BLOCK,
+    IMC_IWLAN_RAN_PRIO_OP_CNT,
+} imc_iwlan_ran_prio_e;
+
+typedef enum {
+    IMC_IWLAN_WIFI_RE_ASOC = (1),
+    IMC_IWLAN_VOWIFI_ON_OFF = (1<<1),
+    IMC_IWLAN_LOCAEN_ON_OFF = (1<<2),
+    IMC_IWLAN_CELL_REGHOME = (1<<3),
+} imc_iwlan_reset_event_e;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    ims_state_enum          ran;
+    imc_iwlan_prio_cause_e  cause;
+    imc_iwlan_ran_prio_e    prio;
+    kal_uint32              reset_event;
+} imc_iwlan_reg_ran_prio_update_req_struct;
+
+typedef enum
+{
+    IMC_IWLAN_HO_UNSPEC = 0,
+    IMC_IWLAN_HO_W2L,
+    IMC_IWLAN_HO_L2W,
+    IMC_IWLAN_HO_CNT,
+}imc_iwlan_ho_action_enum;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    imc_iwlan_ho_action_enum    ho_action;
+} imc_iwlan_ims_ecc_ho_req_struct;
+
+typedef enum
+{
+    IMC_IWLAN_HO_NONE = 0,
+    IMC_IWLAN_HO_TRIG,
+    IMC_IWLAN_HO_NO_DEST,
+    IMC_IWLAN_HO_END,
+}imc_iwlan_ho_result_enum;
+
+typedef struct {
+    LOCAL_PARA_HDR
+    imc_iwlan_ho_result_enum    result;
+} imc_iwlan_ims_ecc_ho_rsp_struct;
+
+#endif /* _IMC_IWLAN_STRUCT_H */