[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/ddm/atp_ursp_struct.h b/mcu/protocol/interface/ddm/atp_ursp_struct.h
new file mode 100644
index 0000000..1fc10c1
--- /dev/null
+++ b/mcu/protocol/interface/ddm/atp_ursp_struct.h
@@ -0,0 +1,170 @@
+#ifndef _ATP_URSP_STRUCT_H
+#define _ATP_URSP_STRUCT_H
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "mcd_l3_inc_struct.h"
+#include "atcmd_struct.h"
+#include "ursp_public_defs.h"
+#include "ursp_struct.h"
+
+/*******************************************************************************/
+/* Caution!! */
+/* LOCAL_PARA_HDR and src_id MUST be the 1st and 2nd parameters, respectively. */
+/*******************************************************************************/
+#define ATP_URSP_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id; \
+ kal_uint32 cmd_mode;
+
+#define ATP_URSP_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id; \
+ kal_bool is_success; \
+ kal_uint16 err_cause;
+
+#define ATP_URSP_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+
+/*******************************************************************************
+ * URSP Internal *
+ *******************************************************************************/
+
+// => Internal data type for URSP
+typedef struct
+{
+ atcmd_SSC_mode_enum ssc_mode; // by default ATCMD_SSC_MODE_MAX
+ at_s_nssai_struct s_nssai; // by default is_sst_present, is_sd_present, is_mapped_configured_sst_present, is_mapped_configured_sd_present) = (KAL_FALSE, KAL_FALSE, KAL_FALSE, KAL_FALSE)
+ kal_char dnn[URSP_DNN_SIZE]; // by default a NULL string
+ pdp_addr_type_enum pdx_type; // by default NULL_PDP_ADDR_TYPE in ps_public_enum_public.h
+ atcmd_Access_type_enum access_type; // by default ATCMD_ACCESS_TYPE_MAX
+}ursp_at_ue_local_conf_struct;
+typedef ursp_at_ue_local_conf_struct ursp_at_est_req_param_struct;
+
+/******************************************************************************************************************************************************************************
+* AT+EGURSPRDP[=<cid>] *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGURSPRDP_REQ
+typedef struct
+{
+ ATP_URSP_REQ_LOCAL_PARA_HDR
+
+ kal_int32 cid;
+}atp_d2at_egursprdp_req_struct;
+
+// MSG_ID_ATP_D2AT_EGURSPRDP_IND
+typedef struct
+{
+ ATP_URSP_IND_LOCAL_PARA_HDR
+
+ kal_int32 cid;
+
+ int type;
+ union
+ {
+ ursp_est_req_param_struct est_req;
+ struct
+ {
+ ursp_traffic_desc_struct traffic_desc;
+ ursp_ue_local_conf_struct ue_local_conf;
+ kal_bool match_all_disallow;
+ }app_req;
+ }param;
+}atp_d2at_egursprdp_ind_struct;
+
+// MSG_ID_ATP_D2AT_EGURSPRDP_CNF
+typedef struct
+{
+ ATP_URSP_CNF_LOCAL_PARA_HDR
+
+ kal_int32 res;
+}atp_d2at_egursprdp_cnf_struct;
+
+
+/******************************************************************************************************************************************************************************
+* +EGURSPREEVALU: <cid>,<event> *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGURSPREEVAL_URC_IND
+typedef struct
+{
+ ATP_URSP_IND_LOCAL_PARA_HDR
+
+ kal_int32 cid;
+ kal_uint32 event;
+}atp_d2at_egurspreeval_urc_ind_struct;
+
+
+/******************************************************************************************************************************************************************************
+* AT+EGUEPOLICY=0,"<plmn_id>"[,"<ue_policy_part_content>"] *
+* AT+EGUEPOLICY=1,"<plmn_id>"[,<rule_precedence>,"<traffic_desc>",<num_of_route_sel_desc>[,<route_sel_desc_precedence>,"<route_sel_desc>"][...]][...]
] *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGUEPOLICY_REQ
+typedef struct
+{
+ ATP_URSP_REQ_LOCAL_PARA_HDR
+
+ plmn_id_struct plmn_id;
+ kal_uint8 num_of_rule;
+ ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE]; // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+}atp_d2at_eguepolicy_req_struct;
+
+// MSG_ID_ATP_D2AT_EGUEPOLICY_CNF
+typedef struct
+{
+ ATP_URSP_CNF_LOCAL_PARA_HDR
+
+ kal_int32 res;
+}atp_d2at_eguepolicy_cnf_struct;
+
+
+/******************************************************************************************************************************************************************************
+* +EGUEPOLICYU:<plmn_id> *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGUEPOLICY_URC_IND
+typedef struct
+{
+ ATP_URSP_IND_LOCAL_PARA_HDR
+
+ plmn_id_struct plmn_id;
+}atp_d2at_eguepolicy_urc_ind_struct;
+
+
+/******************************************************************************************************************************************************************************
+* AT+EGUEPOLICYRDP=<msg_type>[,"<plmn_id>"] *
+*******************************************************************************************************************************************************************************/
+
+// MSG_ID_ATP_D2AT_EGUEPOLICYRDP_REQ
+typedef struct
+{
+ ATP_URSP_REQ_LOCAL_PARA_HDR
+
+ kal_int8 msg_type;
+ plmn_id_struct plmn_id;
+}atp_d2at_eguepolicyrdp_req_struct;
+
+// MSG_ID_ATP_D2AT_EGUEPOLICYRDP_IND
+typedef struct
+{
+ ATP_URSP_IND_LOCAL_PARA_HDR
+
+ kal_int8 msg_type;
+ plmn_id_struct plmn_id;
+ kal_uint8 num_of_rule;
+ ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE]; // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+}atp_d2at_eguepolicyrdp_ind_struct;
+
+// MSG_ID_ATP_D2AT_EGUEPOLICYRDP_CNF
+typedef struct
+{
+ ATP_URSP_CNF_LOCAL_PARA_HDR
+
+ kal_int32 res;
+}atp_d2at_eguepolicyrdp_cnf_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_d2pm_struct.h b/mcu/protocol/interface/ddm/d2_d2pm_struct.h
new file mode 100644
index 0000000..e83a543
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_d2pm_struct.h
@@ -0,0 +1,350 @@
+#ifndef __D2_D2PM_STRUCT_H__
+#define __D2_D2PM_STRUCT_H__
+
+#include "kal_public_defs.h"
+#include "atcmd_enum.h"
+#include "netinfo_common_struct.h"
+#include "pdn_public_defs.h"
+#include "atp_d2at_struct.h"
+#include "d2pm_ddm_struct.h"
+#include "d2_public_defs.h"
+
+// Type definition
+typedef struct d2_d2pm_hdr d2_d2pm_hdr_t;
+typedef struct d2_d2pm_hdr* d2_d2pm_hdr_ptr_t;
+
+// Macros
+#define D2_D2PM_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_D2PM_NF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_D2PM_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_D2PM_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+// Functions
+// N/A
+
+// Implementation
+struct d2_d2pm_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint16 src_id;
+};
+
+/******************************************************************************
+* D2 to D2PM REQ *
+*******************************************************************************/
+
+// MSG_ID_D2_D2PM_ACT_DATA_CALL_REQ
+typedef struct
+{
+ D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_uint32 apn_type;
+ kal_uint32 suff_cond;
+ d2_ipv4v6_fb_enum ipv4v6_fb_pref;
+ kal_int32 cid;
+ kal_int32 p_cid;
+ kal_int32 fb_cid;
+
+ /* custom part, only for APN index D2PM_APN_IDX_CUSTOM_UNS */
+ kal_bool has_custom;
+ pdp_addr_type_enum pdx_type;
+ kal_char usrname[USERID_STRING_LEN];
+ kal_char passwd[PASSWORD_STRING_LEN];
+ kal_int8 auth_type;
+ kal_uint32 bearer_bitmask;
+ struct
+ {
+ struct
+ {
+ pdp_addr_type_enum pdx_type;
+ }roam;
+
+ struct
+ {
+ kal_char dnn[APN_STRING_LEN];
+ pdp_addr_type_enum pdx_type;
+ atcmd_SSC_mode_enum ssc_mode;
+ at_s_nssai_struct s_nssai;
+ atcmd_Access_type_enum access_type;
+ }vg;
+
+ struct
+ {
+ pdp_addr_type_enum pdx_type;
+ }vg_roam;
+
+ /* operator part */
+ struct
+ {
+ kal_uint32 wapn;
+ kal_uint32 apncl;
+ kal_uint32 apned;
+ kal_uint32 max_conn;
+ kal_uint32 max_conn_t;
+ kal_uint32 wait_time;
+ }vzw;
+
+ struct
+ {
+ kal_uint32 inact_time;
+ }sprint;
+ }cond;
+}d2_d2pm_act_data_call_req_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_REQ
+typedef struct
+{
+ D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ atcmd_deact_cause_enum reason;
+}d2_d2pm_deact_data_call_req_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_REQ
+typedef struct
+{
+ D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_uint32 apn_type;
+ kal_int32 cid;
+ atcmd_deact_cause_enum reason;
+}d2_d2pm_abort_data_call_req_struct;
+
+
+/******************************************************************************
+* D2 to User CNF *
+*******************************************************************************/
+
+#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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+/******************************************************************************
+* D2 to User IND *
+*******************************************************************************/
+
+#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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+/******************************************************************************
+* User to D2 RSP *
+*******************************************************************************/
+
+#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 !*/
+/* 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
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_data_call_public_defs.h b/mcu/protocol/interface/ddm/d2_data_call_public_defs.h
new file mode 100644
index 0000000..f20b0bc
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_data_call_public_defs.h
@@ -0,0 +1,43 @@
+#ifndef __D2_DATA_CALL_PUBLIC_DEFS_H__
+#define __D2_DATA_CALL_PUBLIC_DEFS_H__
+
+#include "d2pm_public_defs.h"
+
+// Type definitions
+typedef enum
+{
+ // a single CID or the final CID
+ D2_PDX_STATE_FAIL = -1,
+ D2_PDX_STATE_DEACT,
+ D2_PDX_STATE_ACT,
+ D2_PDX_STATE_UNUSABLE,
+ D2_PDX_STATE_MAX = 0x7FFFFFFF
+}d2_pdx_state_enum;
+
+typedef enum
+{
+ D2_SUFF_COND_NONE = 0x00000000,
+ D2_SUFF_COND_IPV4 = 0x00000001,
+ D2_SUFF_COND_IPV6 = 0x00000002,
+ D2_SUFF_COND_IPVX = 0x00000004,
+ D2_SUFF_COND_IF_UP = 0x00000010,
+ D2_SUFF_COND_MAX = 0x7FFFFFFF
+}d2_suff_cond_enum;
+
+typedef enum
+{
+ D2_IPV4V6_FB_DISABLE_IPV4_FIRST,
+ D2_IPV4V6_FB_DISABLE_IPV6_FIRST,
+ D2_IPV4V6_FB_ENABLE_IPV4_FIRST,
+ D2_IPV4V6_FB_ENABLE_IPV6_FIRST,
+ D2_IPV4V6_FB_MAX = 0x7FFFFFFF
+}d2_ipv4v6_fb_enum;
+
+// Macros
+// => CID
+#define D2_INVAL_CID (D2PM_INVAL_CID)
+#define D2_MIN_CID (D2PM_MIN_CID)
+#define D2_MAX_CID (D2PM_MAX_CID)
+#define D2_CID_BITMAP_SIZE (((D2_MAX_CID - D2_MIN_CID) >> 3) + 1)
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_data_call_struct.h b/mcu/protocol/interface/ddm/d2_data_call_struct.h
new file mode 100644
index 0000000..4040f2f
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_data_call_struct.h
@@ -0,0 +1,380 @@
+#ifndef __D2_DATA_CALL_STRUCT_H__
+#define __D2_DATA_CALL_STRUCT_H__
+
+#include <stdint.h>
+#include "kal_public_defs.h"
+#include "atcmd_enum.h"
+#include "netinfo_common_struct.h"
+#include "pdn_public_defs.h"
+#include "d2rm_public_defs.h"
+#include "atp_d2at_struct.h"
+#include "d2pm_ddm_struct.h"
+#include "d2_data_call_public_defs.h"
+
+// Type definition
+typedef struct d2_data_call_hdr d2_data_call_hdr_t;
+typedef struct d2_data_call_hdr* d2_data_call_hdr_ptr_t;
+typedef atcmd_request_type_enum d2_act_data_call_req_type_enum;
+typedef ip_info_struct d2_act_data_call_ip_info_struct;
+typedef net_info_struct d2_act_data_call_net_info_struct;
+typedef d2pm_ddm_ims_prv_data_t d2_act_data_call_ims_info_struct;
+typedef if_info_struct d2_act_data_call_if_info_struct;
+typedef retry_info_struct d2_act_data_call_retry_info_struct;
+
+// Macros
+#define D2_DATA_CALL_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_DATA_CALL_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_DATA_CALL_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_DATA_CALL_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2_data_call_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint16 src_id;
+};
+
+/******************************************************************************
+* User to D2 REQ *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_REQ
+typedef struct
+{
+ kal_bool cid_present;
+ kal_int32 cid;
+ kal_bool cgdcont_req_present;
+ at_cgdcont_req_struct cgdcont_req;
+ kal_uint32 tm_flag;
+ kal_bool if_id_present;
+ kal_int32 if_id;
+}d2at_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+ kal_int32 cid;
+ kal_int32 p_cid;
+ kal_int32 fb_cid;
+}d2am_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+ kal_bool pcscf_restore;
+}imsm_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+ kal_bool is_defined;
+ kal_char pdp_type[PDP_TYPE_STRING_LEN];
+ kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+ kal_char username[APN_STRING_LEN];
+ kal_char passwd[APN_STRING_LEN];
+ kal_int8 auth_type;
+}bip_d2_act_data_call_req_param_struct;
+
+typedef struct
+{
+ D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_char apn_type[APN_TYPE_STRING_LEN];
+ kal_uint32 suff_cond;
+ kal_uint32 flag;
+ d2_ipv4v6_fb_enum ipv4v6_fb_pref;
+
+ /* custom part */
+ /* Since AP fully controls APN settings in Gen93, this part can create a new APN setting, but cannot overwrite an existing one. */
+ kal_bool has_custom;
+ kal_char pdp_type[PDP_TYPE_STRING_LEN];
+ kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+ kal_char username[APN_STRING_LEN];
+ kal_char passwd[APN_STRING_LEN];
+ kal_int8 auth_type;
+
+ /* private part */
+ union
+ {
+ d2at_d2_act_data_call_req_param_struct d2at;
+ d2am_d2_act_data_call_req_param_struct d2am;
+ imsm_d2_act_data_call_req_param_struct imsm;
+ bip_d2_act_data_call_req_param_struct bip;
+ }param;
+}d2_act_data_call_req_struct;
+
+// MSG_ID_D2_DEACT_DATA_CALL_REQ
+typedef struct
+{
+ kal_uint32 tm_flag;
+}d2at_d2_deact_data_call_req_param_struct;
+
+typedef d2am_ddm_deact_data_call_req_prv_struct d2am_d2_deact_data_call_req_param_struct;
+
+typedef struct
+{
+ D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ atcmd_deact_cause_enum reason;
+
+ /* private part */
+ union
+ {
+ d2at_d2_deact_data_call_req_param_struct d2at;
+ d2am_d2_deact_data_call_req_param_struct d2am;
+ }param;
+}d2_deact_data_call_req_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_REQ
+typedef struct
+{
+ kal_uint8 unused;
+}imsm_d2_abort_data_call_req_param_struct;
+
+typedef struct
+{
+ D2_DATA_CALL_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_bool cid_present;
+ kal_int32 cid;
+ atcmd_deact_cause_enum reason;
+
+ /* private part */
+ union
+ {
+ imsm_d2_abort_data_call_req_param_struct imsm;
+ }param;
+}d2_abort_data_call_req_struct;
+
+
+/******************************************************************************
+* D2 to User CNF *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_CNF
+typedef struct
+{
+ d2_act_data_call_ims_info_struct ims_info; // IMS information for p_cid
+ d2_act_data_call_ims_info_struct fb_ims_info; // IMS information for fb_cid
+}imsm_d2_act_data_call_cnf_param_struct;
+
+typedef struct
+{
+ kal_int8 unused;
+}bip_d2_act_data_call_cnf_param_struct;
+
+typedef struct
+{
+ D2_DATA_CALL_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid, p_cid, fb_cid; // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+ kal_uint8 p_ded_cid[D2_CID_BITMAP_SIZE], fb_ded_cid[D2_CID_BITMAP_SIZE]; // a bitmap
+ d2_act_data_call_ip_info_struct ip_info; // IP address for p_cid
+ d2_act_data_call_net_info_struct net_info; // Internet information for p_cid
+ d2_act_data_call_if_info_struct if_info; // interface information for p_cid, including the info. of STK TCP/IP, and RAN type in a union
+ d2_act_data_call_ip_info_struct fb_ip_info; // IP address for fb_cid
+ d2_act_data_call_net_info_struct fb_net_info; // Internet information for fb_cid
+ d2_act_data_call_if_info_struct fb_if_info; // interface information for fb_cid, including the info. of STK TCP/IP, and RAN type in a union
+ d2_act_data_call_retry_info_struct retry_info; // retry timer for APN
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ imsm_d2_act_data_call_cnf_param_struct imsm;
+ bip_d2_act_data_call_cnf_param_struct bip;
+ }param;
+}d2_act_data_call_cnf_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_CNF
+typedef struct
+{
+ D2_DATA_CALL_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ int unused;
+ }param;
+}d2_deact_data_call_cnf_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_CNF
+typedef struct
+{
+ D2_DATA_CALL_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_bool cid_present;
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ int unused;
+ }param;
+}d2_abort_data_call_cnf_struct;
+
+
+/******************************************************************************
+* D2 to User IND *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_IND
+typedef struct
+{
+ d2_act_data_call_ims_info_struct ims_info; // IMS information for p_cid
+}imsm_d2_act_data_call_ind_param_struct;
+
+typedef bip_d2_act_data_call_cnf_param_struct bip_d2_act_data_call_ind_param_struct;
+
+typedef struct
+{
+ D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid, p_cid, fb_cid; // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+ kal_uint8 p_ded_cid[D2_CID_BITMAP_SIZE], fb_ded_cid[D2_CID_BITMAP_SIZE]; // a bitmap
+ d2_act_data_call_ip_info_struct ip_info; // for IP address
+ d2_act_data_call_net_info_struct net_info; // for Internet information
+ d2_act_data_call_if_info_struct if_info; // for interface information, including the info. of STK TCP/IP, and RAN type in a union
+ kal_uint32 res;
+
+ /* private part */
+ union
+ {
+ imsm_d2_act_data_call_ind_param_struct imsm;
+ bip_d2_act_data_call_ind_param_struct bip;
+ }param;
+}d2_act_data_call_ind_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_IND
+typedef struct
+{
+ D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_uint32 res;
+
+ /* private part */
+ union
+ {
+ int unused;
+ }param;
+}d2_deact_data_call_ind_struct;
+
+
+// MSG_ID_D2_ABORT_DATA_CALL_IND
+typedef struct
+{
+ D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_bool cid_present;
+ kal_int32 cid;
+ kal_uint32 res;
+
+ /* private part */
+ union
+ {
+ int unused;
+ }param;
+}d2_abort_data_call_ind_struct;
+
+
+// MSG_ID_D2_MOD_DATA_CALL_IND
+typedef struct
+{
+ d2_act_data_call_ims_info_struct ims_info; // IMS information for cid
+}imsm_d2_mod_data_call_ind_param_struct;
+
+typedef struct
+{
+ D2_DATA_CALL_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid, p_cid;
+ d2_act_data_call_ip_info_struct ip_info; // for IP address
+ d2_act_data_call_net_info_struct net_info; // for Internet information
+ d2_act_data_call_if_info_struct if_info; // for interface information, including the info. of STK TCP/IP, and RAN type in a union
+ kal_uint32 res;
+
+ /* private part */
+ union
+ {
+ imsm_d2_mod_data_call_ind_param_struct imsm;
+ }param;
+}d2_mod_data_call_ind_struct;
+
+
+/******************************************************************************
+* User to D2 RSP *
+*******************************************************************************/
+
+// MSG_ID_D2_ACT_DATA_CALL_RSP
+typedef struct
+{
+ D2_DATA_CALL_RSP_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_uint32 res;
+
+ /* private part */
+ union
+ {
+ int unused;
+ }param;
+}d2_act_data_call_rsp_struct;
+
+
+// MSG_ID_D2_DEACT_DATA_CALL_RSP
+typedef struct
+{
+ D2_DATA_CALL_RSP_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_uint32 res;
+
+ /* private part */
+ union
+ {
+ int unused;
+ }param;
+}d2_deact_data_call_rsp_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_netif_api_param.def b/mcu/protocol/interface/ddm/d2_netif_api_param.def
new file mode 100644
index 0000000..b58c438
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_netif_api_param.def
@@ -0,0 +1,4 @@
+D2_NETIF_API_PARAM(network_ip_info_struct)
+D2_NETIF_API_PARAM(ipstk_ip_info_struct)
+D2_NETIF_API_PARAM(new_ip_info_struct)
+D2_NETIF_API_PARAM(net_info_struct)
diff --git a/mcu/protocol/interface/ddm/d2_netif_public_defs.h b/mcu/protocol/interface/ddm/d2_netif_public_defs.h
new file mode 100644
index 0000000..d690459
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_netif_public_defs.h
@@ -0,0 +1,19 @@
+#ifndef __D2_NETIF_PUBLIC_DEFS_H__
+#define __D2_NETIF_PUBLIC_DEFS_H__
+
+// Type definition
+// N/A
+
+// Macro
+// N/A
+
+// Macros
+// N/A
+
+// Interface
+// N/A
+
+// Implementation
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_netif_struct.h b/mcu/protocol/interface/ddm/d2_netif_struct.h
new file mode 100644
index 0000000..1474046
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_netif_struct.h
@@ -0,0 +1,190 @@
+/*****************************************************************************
+* 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) 2012
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+#ifndef __D2_NETIF_STRUCT_H__
+#define __D2_NETIF_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+//#include "pdn_public_defs.h"
+#include "netinfo_common_struct.h"
+#include "iwlan_public_defs.h"
+
+typedef enum {
+ D2_NETIF_IF_CAUSE_NO_ERROR = 0,
+ D2_NETIF_IF_CAUSE_NET_IP_CHG = 11,
+ D2_NETIF_IF_CAUSE_MD_IP_CHG = 12,
+ D2_NETIF_IF_CAUSE_AP_IP_CHG = 13,
+ D2_NETIF_IF_CAUSE_NET_INFO_CHG = 14,
+ D2_NETIF_IF_CAUSE_RAN_CHG = 15,
+ D2_NETIF_IF_CAUSE_CHG = 20,
+ D2_NETIF_IF_CAUSE_NO_RA_I = 21,
+ D2_NETIF_IF_CAUSE_NO_RA_R = 22,
+ D2_NETIF_IF_CAUSE_AP_UP_SUCC = 31,
+ D2_NETIF_IF_CAUSE_AP_UP_FAIL = 32,
+ D2_NETIF_IF_CAUSE_AP_DOWN_SUCC = 33,
+ D2_NETIF_IF_CAUSE_AP_DOWN_FAIL = 34,
+ D2_NETIF_IF_CAUSE_MD_UP_SUCC = 41,
+ D2_NETIF_IF_CAUSE_MD_UP_FAIL = 41,
+//[TH 20191202] Workaround for STKBRG CNF Fail -> D2 do not have error handling for CNF_FAIL-> run out of interface_id
+//D2_NETIF_IF_CAUSE_MD_UP_FAIL = 42,
+ D2_NETIF_IF_CAUSE_MD_DOWN_SUCC = 43,
+ D2_NETIF_IF_CAUSE_MD_DOWN_FAIL = 43,
+//[TH 20191202] Workaround for STKBRG CNF Fail -> D2 do not have error handling for CNF_FAIL-> run out of interface_id
+//D2_NETIF_IF_CAUSE_MD_DOWN_FAIL = 44,
+ D2_NETIF_IF_CAUSE_sAP_UP_SUCC = 51,
+ D2_NETIF_IF_CAUSE_sAP_UP_FAIL = 52,
+ D2_NETIF_IF_CAUSE_sAP_DOWN_SUCC = 53,
+ D2_NETIF_IF_CAUSE_sAP_DOWN_FAIL = 54,
+} d2_netif_interface_cause_enum;
+
+typedef enum {
+ D2_NETIF_RA_ERROR = -1,
+ D2_NETIF_RA_DEFAULT = 0,
+ D2_NETIF_RA_SUCCESS = 1,
+ D2_NETIF_RA_INITIAL_FAIL = 2,
+ D2_NETIF_RA_REFRESH_FAIL = 3,
+ D2_NETIF_RA_OOXX = 0x7FFFFFFF
+} d2_netif_ra_state_enum;
+
+typedef enum {
+ D2_NETIF_IF_STATE_DOWN = 0,
+ D2_NETIF_IF_STATE_UP = 1,
+
+ D2_NETIF_IF_STATE_DOWNING = 10,
+ D2_NETIF_IF_STATE_UPING = 11,
+ D2_NETIF_IF_STATE_OOXX = 0x7FFFFFFF
+} d2_netif_interface_state_enum;
+
+typedef struct {
+ network_ip_info_struct cellular;
+ network_ip_info_struct epdg;
+ ipstk_ip_info_struct md_ipstk;
+ ipstk_ip_info_struct ap_ipstk;
+ //ipstk_ip_info_struct sap_ipstk;
+} d2_netif_ip_info_t;
+
+/*
+typedef struct {
+ d2_netif_interface_state_enum state;
+ kal_uint16 is_use;
+} d2_netif_interface_status;
+*/
+
+typedef struct {
+ net_info_struct net_info;
+} d2_netif_net_info_t;
+
+typedef struct {
+ d2_netif_interface_state_enum md_if;
+ d2_netif_interface_state_enum ap_if;
+ d2_netif_interface_state_enum sap_if;
+ d2_netif_ra_state_enum ra_state;
+ d2_netif_ip_info_t ip;
+ kal_bool net_present;
+ d2_netif_net_info_t net;
+ kal_bool ran_present;
+ iwlan_ran_e ran;
+ kal_bool is_no_ra;
+} d2_netif_interface_info_t;
+
+typedef struct {
+ kal_uint8 is_used;
+ kal_uint8 ps_id;
+ kal_uint16 transaction_id;
+ // kal_uint32 interface_id;
+ d2_netif_interface_info_t info;
+} d2_netif_interface_dump_item_t;
+
+#define D2_NETIF_MAX_INTERFACE_ID (20)
+#define D2_NETIF_MAX_DUMP_INTERFACE_ID (D2_NETIF_MAX_INTERFACE_ID) //(8)
+
+// MSG_ID_D2_NETIF_CONTEXT_DUMP_IND
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ kal_int32 interface_id;
+ kal_int32 num;
+ kal_char str[32];
+ d2_netif_interface_dump_item_t item[D2_NETIF_MAX_DUMP_INTERFACE_ID];
+}d2_netif_context_dump_ind_struct;
+
+typedef d2_netif_context_dump_ind_struct d2_netif_context_dump_end_ind_struct;
+typedef d2_netif_context_dump_ind_struct d2_netif_context_dump_start_ind_struct;
+
+
+#define D2_NETIF_API_PARAM_TYPE(name) netif_api_param_type_##name
+#define D2_NETIF_API_PARAM_VAR(name) netif_api_param_var_##name
+
+typedef enum {
+#define D2_NETIF_API_PARAM(name) D2_NETIF_API_PARAM_TYPE(name),
+#include "d2_netif_api_param.def"
+#undef D2_NETIF_API_PARAM
+} d2_netif_api_param_type_e;
+
+// MSG_ID_D2_NETIF_API_DUMP_IND
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ kal_bool is_sensitive;
+ kal_char func[32];
+ kal_uint32 line;
+ kal_int32 interface_id;
+ kal_int32 value[6];
+ d2_netif_api_param_type_e type;
+ union {
+ char buf[0];
+#define D2_NETIF_API_PARAM(name) name D2_NETIF_API_PARAM_VAR(name);
+#include "d2_netif_api_param.def"
+#undef D2_NETIF_API_PARAM
+ } param;
+} d2_netif_api_dump_ind_struct;
+
+
+/**
+ * @brief Callback function type "d2_netif_interface_cb"
+ *
+ * When any interface event occurs, NETIF will notify the interface owner through this callback
+ * * You can also through custom_d2_netif_event_notify_cb() know all interface event
+ * @param t_interface_id the id of the interface in which the event occurred
+ * @param cause the cause of the event. See @ref d2_netif_interface_cause_enum
+ * @param user_data user data returned in callback
+ */
+typedef void (*d2_netif_interface_cb)(kal_int32 t_interface_id, d2_netif_interface_cause_enum cause, void *user_data);
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_public_api.h b/mcu/protocol/interface/ddm/d2_public_api.h
new file mode 100644
index 0000000..ce0ca39
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_public_api.h
@@ -0,0 +1,33 @@
+#ifndef __D2_PUBLIC_API_H__
+#define __D2_PUBLIC_API_H__
+
+#include "kal_public_defs.h"
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+
+// Compiler flag, NEED_TO_BE_NOTICED, set by the compiler
+// N/A
+
+// Type definition
+// N/A
+typedef enum {
+ BUILT_IN_APN_STATUS_SUCCESS,
+ BUILT_IN_APN_STATUS_ONGOING
+} d2_built_in_apn_status;
+
+// Macro
+#define d2_get_owner_by_apn_idx(ps_id, apn_idx) (d2apn_get_owner_by_apn_idx((ps_id), (apn_idx)))
+#define d2_get_ipv6_mtu_by_apn(ps_id, apn_name) (ddm_get_ipv6_mtu_by_apn((ps_id), (apn_name)))
+
+// Interface
+// N/A
+/***********************************************************
+ BUILT_IN_APN_STATUS_SUCCESS: Built-in APN process success *
+ BUILT_IN_APN_STATUS_ONGOING: Built-in APN process ongoing *
+************************************************************/
+extern d2_built_in_apn_status d2_get_built_in_apn_status(kal_uint8 ps_id);
+
+// Implementation
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_public_defs.h b/mcu/protocol/interface/ddm/d2_public_defs.h
new file mode 100644
index 0000000..2358226
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_public_defs.h
@@ -0,0 +1,38 @@
+#ifndef __D2_PUBLIC_DEFS_H__
+#define __D2_PUBLIC_DEFS_H__
+
+// Type denifitions
+typedef enum
+{
+ D2_RES_FAIL = -1,
+ D2_RES_NONE,
+ D2_RES_SUCC,
+ D2_RES_RETRY,
+ // => DATA CALL
+ D2_RES_FAIL_CONT,
+ D2_RES_FAIL_ABORT,
+ D2_RES_SUCC_ABORT,
+ D2_RES_SUCC_CONT,
+ D2_RES_MAX = 0x7FFFFFFF
+}d2_res_enum;
+
+typedef enum
+{
+ D2_EVENT_NONE = 0x00000000,
+ D2_EVENT_PDX_PROFILE_CHG = 0x00000001,
+ // => DATA CALL
+ D2_EVENT_PRE_ACT_DATA_CALL = 0x00000100,
+ D2_EVENT_POST_ACT_DATA_CALL = 0x00000200,
+ D2_EVENT_PRE_DEACT_DATA_CALL = 0x00000400,
+ D2_EVENT_POST_DEACT_DATA_CALL = 0x00000800,
+ D2_EVENT_ON_MOD_DATA_CALL = 0x00001000,
+ // => NetIF
+ D2_EVENT_IPV6_RA_INIT_FAIL = 0x00010000,
+ D2_EVENT_IPV6_RA_REFRESH_FAIL = 0x00020000,
+ D2_EVENT_MAX = 0x7FFFFFFF
+}d2_event_enum;
+
+// Macros
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2_struct.h b/mcu/protocol/interface/ddm/d2_struct.h
new file mode 100644
index 0000000..df5a169
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2_struct.h
@@ -0,0 +1,56 @@
+#ifndef __D2_STRUCT_H__
+#define __D2_STRUCT_H__
+
+#include "kal_public_defs.h"
+
+// Type definition
+typedef struct d2_hdr d2_hdr_t;
+typedef struct d2_hdr* d2_hdr_ptr_t;
+
+// Macro
+#define D2_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint16 src_id;
+};
+
+/*******************************************************************************
+* User to D2 REQ *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User CNF *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User IND *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* User to D2 RSP *
+*******************************************************************************/
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apn_public_api.h b/mcu/protocol/interface/ddm/d2apn_public_api.h
new file mode 100644
index 0000000..162e311
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apn_public_api.h
@@ -0,0 +1,71 @@
+#ifndef __D2APN_PUBLIC_API_H__
+#define __D2APN_PUBLIC_API_H__
+
+#include "kal_public_defs.h"
+/*
+#include "ddm_utility.h"
+#include "custom_d2_config.h"
+#include "d2apn_public_defs.h"
+#include "d2apn_struct.h"
+*/
+
+// Compiler flag, NEED_TO_BE_NOTICED, set by the compiler
+// N/A
+
+// Type definition
+/*
+typedef enum
+{
+ D2APN_API_RES_FAIL = D2APN_RES_FAIL,
+ D2APN_API_RES_NONE = D2APN_RES_NONE,
+ D2APN_API_RES_SUCC = D2APN_RES_SUCC,
+}d2apn_api_res_enum;
+*/
+
+// Macros
+// N/A
+
+// Interface
+/*
+extern kal_uint32 d2apn_get_min_apn_idx_by_owner (kal_uint8 ps_id, module_type owner);
+extern kal_uint32 d2apn_get_max_apn_idx_by_owner (kal_uint8 ps_id, module_type owner);
+*/
+extern module_type d2apn_get_owner_by_apn_idx (kal_uint8 ps_id, kal_uint32 apn_idx);
+/*extern d2apn_api_res_enum d2apn_init_set_apns_info_req (kal_uint8 ps_id, module_type owner, d2apn_set_apns_info_req_struct *req_ptr);
+extern d2apn_api_res_enum d2apn_init_set_apns_req (kal_uint8 ps_id, module_type owner, d2apn_set_apns_req_struct *req_ptr);
+*/
+
+/*******************************************************************************
+ * ILM-equivalent API *
+ *******************************************************************************/
+/*
+// => SET request
+extern d2apn_api_res_enum d2apn_set_apns_info (kal_uint8 ps_id, module_type owner, d2apn_set_apns_info_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_set_apns (kal_uint8 ps_id, module_type owner, d2apn_set_apns_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => RESET request
+extern d2apn_api_res_enum d2apn_reset_apns_info (kal_uint8 ps_id, module_type owner, d2apn_reset_apns_info_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_reset_apns (kal_uint8 ps_id, module_type owner, d2apn_reset_apns_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => COPY request
+extern d2apn_api_res_enum d2apn_copy_apns_tbl (kal_uint8 ps_id, module_type owner, d2apn_copy_apns_tbl_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => GET request
+#define d2apn_get_apns_info(ps_id, subscriber, req_ptr, rsp_cb, rsp_cb_arg) ((req_ptr) == NULL ? D2APN_API_RES_FAIL : \
+ ((req_ptr)->type >= D2APN_GET_APNS_INFO_REQ_TYPE_CACHE ? d2apn_get_apns_info_owner((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg)) : \
+ d2apn_get_apns_info_subscriber((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg))))
+#define d2apn_get_apns(ps_id, subscriber, req_ptr, rsp_cb, rsp_cb_arg) ((req_ptr) == NULL ? D2APN_API_RES_FAIL : \
+ ((req_ptr)->type >= D2APN_GET_APNS_REQ_TYPE_CACHE ? d2apn_get_apns_owner((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg)) : \
+ d2apn_get_apns_subscriber((ps_id), (subscriber), (req_ptr), (rsp_cb), (rsp_cb_arg))))
+*/
+
+// Implementation
+/*
+// => Subscriber
+extern d2apn_api_res_enum d2apn_get_apns_info_subscriber (kal_uint8 ps_id, module_type subscriber, d2apn_get_apns_info_req_struct *req_ptr, d2apn_custom_subscriber_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_get_apns_subscriber (kal_uint8 ps_id, module_type subscriber, d2apn_get_apns_req_struct *req_ptr, d2apn_custom_subscriber_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => Owner
+extern d2apn_api_res_enum d2apn_get_apns_info_owner (kal_uint8 ps_id, module_type owner, d2apn_get_apns_info_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+extern d2apn_api_res_enum d2apn_get_apns_owner (kal_uint8 ps_id, module_type owner, d2apn_get_apns_req_struct *req_ptr, d2apn_d2_owner_msg_cb_t rsp_cb, void *rsp_cb_arg);
+// => Internal data type for D2APN
+// N/A
+*/
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apn_public_defs.h b/mcu/protocol/interface/ddm/d2apn_public_defs.h
new file mode 100644
index 0000000..8d2b8e0
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apn_public_defs.h
@@ -0,0 +1,104 @@
+#ifndef __D2APN_PUBLIC_DEFS_H__
+#define __D2APN_PUBLIC_DEFS_H__
+
+// Type denifitions
+typedef enum
+{
+ D2APN_RES_FAIL = -1,
+ D2APN_RES_NONE,
+ D2APN_RES_SUCC,
+ D2APN_RES_MAX = 0x7FFFFFFF
+}d2apn_res_enum;
+
+// => MSG_ID_D2APN_SET_APNS_INFO_REQ
+typedef enum
+{
+ D2APN_SET_APNS_INFO_REQ_TYPE_NONE = 0x00,
+ D2APN_SET_APNS_INFO_REQ_TYPE_WR_THRU,
+ D2APN_SET_APNS_INFO_REQ_TYPE_CACHE,
+ D2APN_SET_APNS_INFO_REQ_TYPE_WR_BACK,
+ D2APN_SET_APNS_INFO_REQ_TYPE_MAX = 0x7F
+}d2apn_set_apns_info_req_type_enum;
+
+// => MSG_ID_D2APN_SET_APNS_REQ
+typedef enum
+{
+ D2APN_SET_APNS_REQ_TYPE_NONE = 0x00,
+ D2APN_SET_APNS_REQ_TYPE_WR_THRU,
+ D2APN_SET_APNS_REQ_TYPE_CACHE,
+ D2APN_SET_APNS_REQ_TYPE_WR_BACK,
+ D2APN_SET_APNS_REQ_TYPE_MAX = 0x7F
+}d2apn_set_apns_req_type_enum;
+
+// => MSG_ID_D2APN_RESET_APNS_INFO_REQ
+typedef enum
+{
+ D2APN_RESET_APNS_INFO_REQ_TYPE_NONE = 0x00,
+ D2APN_RESET_APNS_INFO_REQ_TYPE_WR_THRU,
+ D2APN_RESET_APNS_INFO_REQ_TYPE_CACHE,
+ D2APN_RESET_APNS_INFO_REQ_TYPE_WR_BACK,
+ D2APN_RESET_APNS_INFO_REQ_TYPE_MAX = 0x7F
+}d2apn_reset_apns_info_req_type_enum;
+
+// => MSG_ID_D2APN_RESET_APNS_REQ
+typedef enum
+{
+ D2APN_RESET_APNS_REQ_TYPE_NONE = 0x00,
+ D2APN_RESET_APNS_REQ_TYPE_WR_THRU,
+ D2APN_RESET_APNS_REQ_TYPE_CACHE,
+ D2APN_RESET_APNS_REQ_TYPE_WR_BACK,
+ D2APN_RESET_APNS_REQ_TYPE_WR_THRU_ALL,
+ D2APN_RESET_APNS_REQ_TYPE_CACHE_ALL,
+ D2APN_RESET_APNS_REQ_TYPE_WR_BACK_ALL,
+ D2APN_RESET_APNS_REQ_TYPE_MAX = 0x7F
+}d2apn_reset_apns_req_type_enum;
+
+// => MSG_ID_D2APN_GET_APNS_INFO_REQ
+typedef enum
+{
+ D2APN_GET_APNS_INFO_REQ_TYPE_NONE = 0x00,
+ D2APN_GET_APNS_INFO_REQ_TYPE_CACHE,
+ D2APN_GET_APNS_INFO_REQ_TYPE_MAX = 0x7F
+}d2apn_get_apns_info_req_type_enum;
+
+// => MSG_ID_D2APN_GET_APNS_REQ
+typedef enum
+{
+ D2APN_GET_APNS_REQ_TYPE_NONE = 0x00,
+ D2APN_GET_APNS_REQ_TYPE_APN_IDX,
+ D2APN_GET_APNS_REQ_TYPE_OWNER,
+ D2APN_GET_APNS_REQ_TYPE_APN,
+ D2APN_GET_APNS_REQ_TYPE_CACHE,
+ D2APN_GET_APNS_REQ_TYPE_CACHE_APN_IDX = D2APN_GET_APNS_REQ_TYPE_CACHE,
+ D2APN_GET_APNS_REQ_TYPE_CACHE_OWNER,
+ D2APN_GET_APNS_REQ_TYPE_CACHE_APN,
+ D2APN_GET_APNS_REQ_TYPE_MAX = 0x7F
+}d2apn_get_apns_req_type_enum;
+
+// => MSG_ID_D2APN_APNS_CHG_IND
+typedef enum
+{
+ D2APN_APNS_CHG_IND_TYPE_NONE = 0x00,
+ D2APN_APNS_CHG_IND_TYPE_INFO, // when D2APN_SET_APNS_INFO_REQ_TYPE_WR_THRU and D2APN_RESET_APNS_INFO_REQ_TYPE_WR_THRU
+ D2APN_APNS_CHG_IND_TYPE_APN_IDX, // when D2APN_SET_APNS_REQ_TYPE_WR_THRU and D2APN_RESET_APNS_REQ_TYPE_WR_THRU
+ D2APN_APNS_CHG_IND_TYPE_OWNER, // when xxx_WR_BACK_xxx and D2APN_RESET_APNS_REQ_TYPE_WR_THRU_ALL
+ D2APN_APNS_CHG_IND_TYPE_MAX = 0x7F
+}d2apn_apns_chg_ind_type_enum;
+
+// Macro
+// => Attribute
+// => => Message
+#define D2APN_ATTR_MSG_MASK (0x0000000F)
+#define D2APN_ATTR_NO_MSG (0x00000000)
+#define D2APN_ATTR_ILM_MSG (0x00000001)
+#define D2APN_ATTR_CB_MSG (0x00000002)
+// => => Relationship
+#define D2APN_ATTR_RELP_MASK (0x000000F0)
+#define D2APN_ATTR_NO_RELP (0x00000000)
+#define D2APN_ATTR_ALIAS_RELP (0x00000010)
+
+// APIs
+// => Attribute
+#define D2APN_ATTR_IS_MSG(attr, msg_type) (((attr) & D2APN_ATTR_MSG_MASK) == (msg_type) ? 0 == 0 : 0 != 0)
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apn_struct.h b/mcu/protocol/interface/ddm/d2apn_struct.h
new file mode 100644
index 0000000..6a33b37
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apn_struct.h
@@ -0,0 +1,324 @@
+#ifndef __D2APN_STRUCT_H__
+#define __D2APN_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "atcmd_enum.h"
+#include "atcmd_struct.h"
+#include "mcd_l3_inc_struct.h"
+#include "ddm_enum.h"
+#include "d2apn_public_defs.h"
+
+// Type definition
+typedef struct d2apn_hdr d2apn_hdr_t;
+typedef struct d2apn_hdr* d2apn_hdr_ptr_t;
+
+// Macros
+#define D2APN_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+#define D2APN_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+#define D2APN_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+#define D2APN_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2apn_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint16 seq_num;
+};
+
+/*******************************************************************************
+* User to D2APN REQ *
+*******************************************************************************/
+
+// MSG_ID_D2APN_SET_APNS_INFO_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_set_apns_info_req_type_enum type;
+ plmn_id_struct plmn_id;
+ kal_uint8 imsi[D2_IMSI_STR_LEN];
+ kal_bool mia; // KAL_TRUE indicates no APN settings for the owner; otherwise, a default case that the owner may give APN settings
+}d2apn_set_apns_info_req_struct;
+
+// MSG_ID_D2APN_SET_APNS_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_set_apns_req_type_enum type;
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_uint32 apn_type;
+ pdp_addr_type_enum pdx_type;
+ kal_char usrname[USERID_STRING_LEN];
+ kal_char passwd[PASSWORD_STRING_LEN];
+ kal_int8 auth_type;
+ kal_uint32 bearer_bitmask;
+
+ /* conditional part */
+ struct
+ {
+ struct
+ {
+ pdp_addr_type_enum pdx_type; // by default NULL_PDP_ADDR_TYPE
+ }roam;
+
+ struct
+ {
+ kal_char dnn[APN_STRING_LEN]; // by default a NULL string
+ pdp_addr_type_enum pdx_type; // by default NULL_PDP_ADDR_TYPE
+ atcmd_SSC_mode_enum ssc_mode; // by default ATCMD_SSC_MODE_MAX
+ at_s_nssai_struct s_nssai; // by default is_sst_present, is_sd_present, is_mapped_configured_sst_present, is_mapped_configured_sd_present) = (KAL_FALSE, KAL_FALSE, KAL_FALSE, KAL_FALSE)
+ atcmd_Access_type_enum access_type; // by default ATCMD_ACCESS_TYPE_MAX
+ }vg;
+
+ struct
+ {
+ pdp_addr_type_enum pdx_type; // by default NULL_PDP_ADDR_TYPE
+ }vg_roam;
+
+ /* operator part */
+ struct
+ {
+ kal_uint32 wapn; // by default 0 to disable VzW
+ kal_uint32 apncl;
+ kal_uint32 apned;
+ kal_uint32 max_conn;
+ kal_uint32 max_conn_t;
+ kal_uint32 wait_time;
+ }vzw;
+
+ struct
+ {
+ kal_uint32 inact_time; // by default 0
+ }sprint;
+ }cond;
+}d2apn_set_apns_req_struct;
+
+// MSG_ID_D2APN_RESET_APNS_INFO_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_reset_apns_info_req_type_enum type;
+}d2apn_reset_apns_info_req_struct;
+
+// MSG_ID_D2APN_RESET_APNS_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_reset_apns_req_type_enum type;
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+}d2apn_reset_apns_req_struct;
+
+// MSG_ID_D2APN_COPY_APNS_TBL_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ // N/A
+}d2apn_copy_apns_tbl_req_struct;
+
+// MSG_ID_D2APN_GET_APNS_INFO_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_get_apns_info_req_type_enum type;
+ module_type owner;
+}d2apn_get_apns_info_req_struct;
+
+// MSG_ID_D2APN_GET_APNS_REQ
+typedef struct
+{
+ D2APN_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_get_apns_req_type_enum type;
+ union
+ {
+ // querying one by APN and APN index
+ struct
+ {
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ }apn_idx;
+
+ // querying a group of APN setting by owner
+ struct
+ {
+ module_type owner;
+ }owner;
+
+ // querying a group by APN
+ struct
+ {
+ kal_char apn[APN_STRING_LEN];
+ }apn;
+ }param;
+}d2apn_get_apns_req_struct;
+
+
+/*******************************************************************************
+* D2APN to User CNF *
+*******************************************************************************/
+
+// MSG_ID_D2APN_SET_APNS_INFO_CNF
+typedef struct
+{
+ D2APN_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_res_enum res;
+}d2apn_set_apns_info_cnf_struct;
+
+// MSG_ID_D2APN_SET_APNS_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_set_apns_cnf_struct;
+
+// MSG_ID_D2APN_RESET_APNS_INFO_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_reset_apns_info_cnf_struct;
+
+// MSG_ID_D2APN_RESET_APNS_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_reset_apns_cnf_struct;
+
+// MSG_ID_D2APN_COPY_APNS_TBL_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_copy_apns_tbl_cnf_struct;
+
+// MSG_ID_D2APN_GET_APNS_INFO_CNF
+typedef d2apn_set_apns_info_cnf_struct d2apn_get_apns_info_cnf_struct;
+
+// MSG_ID_D2APN_GET_APNS_CNF
+typedef d2apn_set_apns_cnf_struct d2apn_get_apns_cnf_struct;
+
+/*******************************************************************************
+* D2APN to User IND *
+*******************************************************************************/
+
+// MSG_ID_D2APN_GET_APNS_INFO_IND
+typedef struct
+{
+ D2APN_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ module_type owner;
+ plmn_id_struct plmn_id;
+ kal_uint8 imsi[D2_IMSI_STR_LEN];
+ kal_bool mia; // KAL_TRUE indicates no APN settings for the owner; otherwise, a default case that the owner may give APN settings
+}d2apn_get_apns_info_ind_struct;
+
+// MSG_ID_D2APN_GET_APNS_IND
+typedef struct
+{
+ D2APN_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ kal_uint32 apn_type;
+ pdp_addr_type_enum pdx_type;
+ kal_char usrname[USERID_STRING_LEN];
+ kal_char passwd[PASSWORD_STRING_LEN];
+ kal_int8 auth_type;
+ kal_uint32 bearer_bitmask;
+
+ /* conditional part */
+ struct
+ {
+ struct
+ {
+ pdp_addr_type_enum pdx_type;
+ }roam;
+
+ struct
+ {
+ kal_char dnn[APN_STRING_LEN];
+ pdp_addr_type_enum pdx_type;
+ atcmd_SSC_mode_enum ssc_mode;
+ at_s_nssai_struct s_nssai;
+ atcmd_Access_type_enum access_type;
+ }vg;
+
+ struct
+ {
+ pdp_addr_type_enum pdx_type;
+ }vg_roam;
+
+ /* operator part */
+ struct
+ {
+ kal_uint32 wapn;
+ kal_uint32 apncl;
+ kal_uint32 apned;
+ kal_uint32 max_conn;
+ kal_uint32 max_conn_t;
+ kal_uint32 wait_time;
+ }vzw;
+
+ struct
+ {
+ kal_uint32 inact_time;
+ }sprint;
+ }cond;
+}d2apn_get_apns_ind_struct;
+
+// MSG_ID_D2APN_APNS_CHG_IND
+typedef struct
+{
+ D2APN_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ d2apn_apns_chg_ind_type_enum type;
+ union
+ {
+ // APN-setting information based on a owner changed
+ struct
+ {
+ module_type owner;
+ }info;
+
+ // a single APN setting changed
+ struct
+ {
+ kal_char apn[APN_STRING_LEN];
+ kal_uint32 apn_idx;
+ }apn_idx;
+
+ // a group of APN settings based on a owner changed
+ struct
+ {
+ module_type owner;
+ }owner;
+ }param; // NEED_TO_BE_NOTICED. should be 'info'
+}d2apn_apns_chg_ind_struct;
+
+
+/*******************************************************************************
+* User to D2APN RSP *
+*******************************************************************************/
+
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2apnb_struct.h b/mcu/protocol/interface/ddm/d2apnb_struct.h
new file mode 100644
index 0000000..387e78e
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2apnb_struct.h
@@ -0,0 +1,50 @@
+#ifndef __D2APNB_STRUCT_H__
+#define __D2APNB_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "d2_nvram_def.h"
+
+#define D2APNB_LOCAL_PARA_HDR LOCAL_PARA_HDR
+
+typedef struct
+{
+ D2APNB_LOCAL_PARA_HDR
+ nvram_d2_vzw_apn_cfg_struct apn_list;
+} d2apnb_ddm_vzw_apn_ntf_struct;
+
+typedef struct
+{
+ kal_bool wapn_present;
+ kal_uint32 wapn;
+ kal_bool apncl_present;
+ kal_uint32 apncl;
+ kal_bool apnni_present;
+ kal_uint8 apnni[APNNI_STRING_LEN];
+ kal_bool apntype_present;
+ kal_uint8 apntype[APNTYPE_STRING_LEN];
+ kal_bool apnb_present;
+ kal_uint8 apnb[APNB_STRING_LEN];
+ kal_bool apned_present;
+ kal_uint8 apned[APNED_STRING_LEN];
+ kal_bool apntimer_present;
+ kal_uint32 apntimer;
+} d2apnb_vzwapne_struct;
+
+typedef struct
+{
+ kal_bool wapn_present;
+ kal_uint32 wapn;
+ kal_bool max_conn_present;
+ kal_uint32 max_conn;
+ kal_bool max_conn_t_present;
+ kal_uint32 max_conn_t;
+ kal_bool wait_time_present;
+ kal_uint32 wait_time;
+ kal_bool throttle_time_present;
+ kal_uint32 throttle_time;
+} d2apnb_vzwapnetmr_struct;
+
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2cm_public_defs.h b/mcu/protocol/interface/ddm/d2cm_public_defs.h
new file mode 100644
index 0000000..12e949f
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2cm_public_defs.h
@@ -0,0 +1,231 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * d2cm_public_defs.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2CM_PUBLIC_DEFS_H__
+#define __D2CM_PUBLIC_DEFS_H__
+
+#include "kal_public_defs.h"
+#include "atcmd_struct.h"
+#include "ddm_common_struct.h"
+#include "d2rm_public_defs.h"
+#include "d2pm_public_defs.h"
+#include "netinfo_common_struct.h"
+
+// Type denifitions
+typedef atcmd_request_type_enum d2cm_act_data_call_req_type_enum;
+typedef ip_info_struct d2cm_act_data_call_ip_info_struct;
+typedef net_info_struct d2cm_act_data_call_net_info_struct;
+typedef ran_info_struct d2cm_act_data_call_ran_info_struct;
+typedef if_info_struct d2cm_act_data_call_if_info_struct;
+typedef retry_info_struct d2cm_act_data_call_retry_info_struct;
+typedef ip_info_struct d2cm_ho_ip_info_struct;
+typedef net_info_struct d2cm_ho_net_info_struct;
+//typedef retry_info_struct d2cm_get_retry_tmr_retry_info_struct;
+typedef retry_info_struct d2cm_reset_retry_tmr_retry_info_struct;
+
+typedef enum
+{
+ // a single CID or the final CID
+ D2CM_PDN_STATUS_FAIL = -1,
+ D2CM_PDN_STATUS_DEACT,
+ D2CM_PDN_STATUS_ACT,
+ D2CM_PDN_STATUS_UNUSABLE,
+ D2CM_PDN_STATUS_MAX = 0x7FFFFFFF
+}d2cm_pdn_state_enum;
+
+typedef enum
+{
+ // a single CID or the final CID
+ D2CM_RES_NONE = D2PM_RES_NONE,
+ D2CM_RES_FAIL = D2PM_RES_FAIL,
+ D2CM_RES_SUCC = D2PM_RES_SUCC ,
+ // a subsequent CID
+ D2CM_RES_FAIL_ABORT = D2PM_RES_FAIL_ABORT,
+ D2CM_RES_SUCC_ABORT = D2PM_RES_SUCC_ABORT,
+ D2CM_RES_FAIL_CONT = D2PM_RES_FAIL_CONT,
+ D2CM_RES_SUCC_CONT = D2PM_RES_SUCC_CONT,
+ // otherwise
+ D2CM_RES_REJ = D2PM_RES_REJ,
+ D2CM_RES_RETRY = D2PM_RES_RETRY,
+ D2CM_RES_MAX = 0x7FFFFFFF
+}d2cm_res_enum;
+
+typedef enum
+{
+ D2CM_SUFF_COND_NONE = (0x00000000),
+ D2CM_SUFF_COND_IPV4 = (0x00000001),
+ D2CM_SUFF_COND_IPV6 = (0x00000002),
+ D2CM_SUFF_COND_IPVX = (0x00000004),
+ D2CM_SUFF_COND_IF_UP = (0x00000010),
+ D2CM_SUFF_COND_MAX = (0x7FFFFFFF)
+}d2cm_suff_cond_enum;
+
+typedef enum
+{
+ D2CM_IPV4V6_FB_PREF_DISABLE_IPV4_FIRST = 0,
+ D2CM_IPV4V6_FB_PREF_DISABLE_IPV6_FIRST,
+ D2CM_IPV4V6_FB_PREF_ENABLE_IPV4_FIRST,
+ D2CM_IPV4V6_FB_PREF_ENABLE_IPV6_FIRST,
+ D2CM_IPV4V6_FB_PREF_MAX = (0x7FFFFFFF)
+}d2cm_ipv4v6_fb_pref_enum;
+
+typedef enum
+{
+ D2CM_EVENT_NONE = (0x00000000),
+ D2CM_EVENT_PDN_PROFILE_CHG = (0x00000001),
+ D2CM_EVENT_PRE_ACT_DATA_CALL = (0x00000002),
+ D2CM_EVENT_POST_ACT_DATA_CALL = (0x00000004),
+ D2CM_EVENT_PRE_DEACT_DATA_CALL = (0x00000008),
+ D2CM_EVENT_POST_DEACT_DATA_CALL = (0x00000010),
+ D2CM_EVENT_IPV6_RA_INIT_FAIL = (0x00000020),
+ D2CM_EVENT_IPV6_RA_REFRESH_FAIL = (0x00000040),
+ D2CM_EVENT_MAX = (0x7FFFFFFF)
+}d2cm_event_enum;
+
+typedef enum
+{
+ D2CM_EVENT_ACTION_NONE = (0x00000000),
+ D2CM_EVENT_ACTION_REJ = (0x00000001),
+ D2CM_EVENT_ACTION_MAX = (0x7FFFFFFF)
+}d2cm_event_action_enum;
+
+typedef struct
+{
+ module_type mod_id;
+ sap_type sap_id;
+ int attr;
+}d2cm_custom_usr_profile_struct;
+
+// Macros
+#define D2CM_INVAL_UID (-1)
+#define D2CM_INVAL_CID (D2PM_INVAL_CID)
+#define D2CM_MIN_CID (D2PM_MIN_CID)
+#define D2CM_MAX_CID (D2PM_MAX_CID)
+#define D2CM_CID_BITMAP_SIZE (D2PM_CID_BITMAP_SIZE)
+#define D2CM_INVAL_APN_IDX (D2PM_INVAL_APN_IDX)
+#define D2CM_ENGAGED_APN_IDX (D2CM_INVAL_APN_IDX)
+#define D2CM_MAX_NUM_OF_USR (16)
+// => Flags
+// => => ACT_DATA_CALL_REQ
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_NONE (0x00000000)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_REQ_ONLY (0x00000001)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_RSP_ONLY (0x00000002)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_DANGLING (0x00000004)
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_REUSE (0x00000008) // only effective when the PDN is avticated
+#define D2CM_ACT_DATA_CALL_REQ_FLAG_NO_URSP (0x00000010) // only effective when the PDN is avticated
+// => => GET_PDN_PROFILE_REQ
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_NONE (0x00000000)
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_ALIAS (0x00000001)
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_APN_IDX (0x00000002)
+#define D2CM_GET_PDN_PROFILE_REQ_FLAG_INCL_ALL (0xFFFFFFFF) // NEED_TO_BE_NOTICED, maybe different from all flags set in the current definition
+// => => GET_PDN_PROFILE_IND
+#define D2CM_GET_PDN_PROFILE_IND_FLAG_NONE (0x00000000)
+#define D2CM_GET_PDN_PROFILE_IND_FLAG_UNUSABLE (0x00000001)
+// => Custom
+// => => User profile attributes
+// => => => Bitmap
+#define D2CM_ATTR_AUTH_MASK (0x0000000F)
+#define D2CM_ATTR_NO_AUTH (0x00000000)
+#define D2CM_ATTR_PDN_AUTH (0x00000001)
+#define D2CM_ATTR_EVENT_AUTH (0x00000002)
+#define D2CM_ATTR_ADMIN_AUTH (D2CM_ATTR_AUTH_MASK)
+// => => => Distinct value
+#define D2CM_ATTR_MSG_MASK (0x000000F0)
+#define D2CM_ATTR_NO_MSG (0x00000000)
+#define D2CM_ATTR_AT_MSG (0x00000010)
+#define D2CM_ATTR_ILM_MSG (0x00000020)
+#define D2CM_ATTR_CB_MSG (0x00000030)
+#define D2CM_ATTR_NETIF_MASK (0x00000F00)
+#define D2CM_ATTR_NO_NETIF (0x00000000)
+#define D2CM_ATTR_AP_NETIF (0x00000100)
+#define D2CM_ATTR_MD_NETIF (0x00000200)
+
+// => Utility
+#define D2CM_NORMAL_RES_SHIFT (0)
+#define D2CM_NORMAL_RES_MASK (0x000000FF)
+#define D2CM_NORMAL_RES_LEN (8)
+#define D2CM_NW_CAUSE_SHIFT (8)
+#define D2CM_NW_CAUSE_MASK (0x00FFFF00)
+#define D2CM_NW_CAUSE_LEN (16)
+// ---- WORKAROUND ----
+#define D2CM_ESM_CAUSE_SHIFT (D2CM_NW_CAUSE_SHIFT)
+#define D2CM_ESM_CAUSE_MASK (D2CM_NW_CAUSE_MASK)
+#define D2CM_ESM_CAUSE_LEN (D2CM_NW_CAUSE_LEN)
+// ++++ WORKAROUND ++++
+
+// APIs, NEED_TO_BE_NOTICED, uint32-based, just a quick solution, To-Do later
+#define d2cm_sign_ext(x, shift, mask, len) (((x) & (1 << ((len) - 1))) ? (x) | ~((mask) >> (shift)) : (x))
+#define d2cm_reset_normal_res(res) ((res) &= ~D2CM_NORMAL_RES_MASK)
+#define d2cm_set_normal_res(res, x) ((res) = ((res) & ~D2CM_NORMAL_RES_MASK) | (((x) << D2CM_NORMAL_RES_SHIFT) & D2CM_NORMAL_RES_MASK))
+#define d2cm_get_normal_res(res) (d2cm_sign_ext(((res) & D2CM_NORMAL_RES_MASK) >> D2CM_NORMAL_RES_SHIFT, D2CM_NORMAL_RES_SHIFT, D2CM_NORMAL_RES_MASK, D2CM_NORMAL_RES_LEN))
+#define d2cm_reset_nw_cause(res) ((res) &= ~D2CM_NW_CAUSE_MASK)
+#define d2cm_set_nw_cause(res, x) ((res) = ((res) & ~D2CM_NW_CAUSE_MASK) | (((x) << D2CM_NW_CAUSE_SHIFT) & D2CM_NW_CAUSE_MASK))
+#define d2cm_get_nw_cause(res) (((res) & D2CM_NW_CAUSE_MASK) >> D2CM_NW_CAUSE_SHIFT)
+// ---- WORKAROUND ----
+#define d2cm_reset_esm_cause(res) (d2cm_reset_nw_cause((res)))
+#define d2cm_set_esm_cause(res, x) (d2cm_set_nw_cause((res), (x)))
+#define d2cm_get_esm_cause(res) (d2cm_get_nw_cause((res)))
+// ++++ WORKAROUND ++++
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2cm_struct.h b/mcu/protocol/interface/ddm/d2cm_struct.h
new file mode 100644
index 0000000..cfae5c2
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2cm_struct.h
@@ -0,0 +1,1049 @@
+/*****************************************************************************
+* 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) 2012
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+#ifndef __D2CM_STRUCT_H__
+#define __D2CM_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "ps_public_enum.h"
+#include "pdn_public_defs.h"
+#include "custom_d2_config.h"
+#include "d2pm_ddm_struct.h" // NEED_TO_BE_NOTICED, to review it
+#include "d2pm_d2rm_struct.h" // NEED_TO_BE_NOTICED, to review it
+#include "ursp_public_defs.h"
+#include "d2rm_public_defs.h"
+#include "n3epc_public_defs.h"
+#include "iwlan_public_defs.h"
+
+// Type definition
+typedef struct d2cm_hdr d2cm_hdr_t;
+typedef struct d2cm_hdr* d2cm_hdr_ptr_t;
+typedef d2pm_ddm_ims_prv_data_t d2cm_act_data_call_ims_info_struct;
+
+// Macros
+#define D2CM_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+#define D2CM_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+#define D2CM_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+#define D2CM_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+// Functions
+// N/A
+
+// Implementation
+struct d2cm_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint32 src_id;
+};
+
+/*******************************************************************************
+* Internal *
+*******************************************************************************/
+
+typedef struct {
+ // Header path: //VMOLY/BRANCHES_NR15/NR15.R3.MP/mcu/interface/protocol/general/ps_public_enum.h
+ ps_cause_enum deact_cause, mod_cause;
+}ddm_deact_res_info_struct;
+
+typedef struct {
+ iwlan_ran_e ran;
+
+ union {
+ ddm_deact_res_info_struct ddm_res_info;
+// n3x_deact_res_info_struct data4_res_info;
+ }res;
+}ran_deact_res_info;
+
+typedef union {
+ ran_deact_res_info ran_deact_res[RPL_PRIO_CNT + 1];
+}deact_res_info_struct;
+
+
+/*******************************************************************************
+* User to D2CM REQ *
+*******************************************************************************/
+
+// MSG_ID_D2CM_GET_PDN_PROFILE_REQ
+typedef struct
+{
+ D2CM_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ // => unique key of APN
+ kal_bool apn_present;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ // => unique key of CID
+ kal_bool cid_present;
+ kal_int32 cid;
+ // => non-key values
+ kal_uint32 flag;
+
+ /* operater part */
+ kal_uint32 mcc_mnc;
+ union
+ {
+ struct
+ {
+ kal_uint32 apncl;
+ }vzw;
+ }op;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_get_pdn_profile_req_struct;
+
+
+// MSG_ID_D2CM_ACT_DATA_CALL_REQ
+typedef struct
+{
+ kal_bool cid_present;
+ kal_int32 cid;
+ kal_bool cgdcont_req_present;
+ at_cgdcont_req_struct cgdcont_req;
+ kal_uint32 tm_flag;
+ kal_bool if_id_present;
+ kal_int32 if_id;
+ kal_bool egpco_req_present;
+ at_egpco_req_struct egpco_req;
+}d2at_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+ kal_int32 cid;
+ kal_int32 p_cid;
+ kal_int32 fb_cid;
+}d2am_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+ kal_bool pcscf_restore;
+}imsm_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+ kal_bool is_defined;
+ kal_char pdp_type[PDP_TYPE_STRING_LEN];
+ kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+ kal_char username[APN_STRING_LEN];
+ kal_char passwd[APN_STRING_LEN];
+ kal_int8 auth_type;
+ ran_filter_struct ran_filter; // MUST give a value regardless of is_defined, by MTK14037
+ kal_bool qos_param_present;
+ kal_int32 qos_reliability;
+ kal_int32 qos_precedence_class;
+ kal_int32 qos_delay_class;
+ kal_int32 qos_peak_throughput_class;
+ kal_int32 qos_mean_throughput_class;
+}bip_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+ kal_int32 if_id;
+ kal_uint32 bearer_bitmask;
+ kal_bool egpco_req_present;
+ at_egpco_req_struct egpco_req;
+}l5updn_d2cm_act_data_call_req_prv_struct;
+
+typedef struct
+{
+ D2CM_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_char apn_type[APN_TYPE_STRING_LEN];
+ kal_uint32 suff_cond;
+ kal_uint32 flag;
+ d2cm_ipv4v6_fb_pref_enum ipv4v6_fb_pref;
+ ran_filter_struct ran_filter;
+
+ /* ursp part */
+ struct
+ {
+ kal_bool is_match_all;
+ kal_uint8 dnn_len;
+ kal_char dnn[URSP_TDC_LEN_DNN]; // APN in TS 23.003
+ kal_uint8 os_id[URSP_TDC_LEN_OS_ID]; // UUID in RFC 4122
+ kal_uint8 app_id_len;
+ kal_uint8 app_id[URSP_TDC_LEN_OS_APP_ID];
+ kal_uint8 ipv4_addr[URSP_TDC_LEN_IPV4_REMOTE_ADDR];
+ kal_uint8 ipv4_mask[URSP_TDC_LEN_IPV4_REMOTE_MASK];
+ kal_uint8 ipv6_addr[URSP_TDC_LEN_IPV6_REMOTE_ADDR];
+ kal_uint8 ipv6_prefix_len;
+ kal_uint8 prot_id_next_hdr;
+ kal_uint16 single_remote_port;
+ kal_uint16 min_remote_port;
+ kal_uint16 max_remote_port;
+ kal_uint8 dst_fqdn_len;
+ kal_uint8 dst_fqdn[URSP_TDC_LEN_DST_FQDN];
+ }traffic_desc;
+
+ struct
+ {
+ kal_uint8 ssc_mode;
+ kal_uint8 s_nssai_len;
+ kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+ kal_uint8 dnn_len;
+ kal_uint8 dnn[URSP_TDC_LEN_DNN]; // APN in TS 23.003
+ kal_uint8 pdu_session_type;
+ kal_uint8 pref_access_type;
+ }ue_local_conf;
+ kal_uint32 ursp_eval_flag;
+
+ /* custom part */
+ /* Since AP fully controls APN settings in Gen93, this part can create a new APN setting, but cannot overwrite an existing one. */
+ kal_bool has_custom;
+ kal_char pdp_type[PDP_TYPE_STRING_LEN];
+ kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+ kal_char username[APN_STRING_LEN];
+ kal_char passwd[APN_STRING_LEN];
+ kal_int8 auth_type;
+
+ /* private part */
+ union
+ {
+ d2at_d2cm_act_data_call_req_prv_struct d2at;
+ d2am_d2cm_act_data_call_req_prv_struct d2am;
+ imsm_d2cm_act_data_call_req_prv_struct imsm;
+ bip_d2cm_act_data_call_req_prv_struct bip;
+ l5updn_d2cm_act_data_call_req_prv_struct l5updn;
+ }prv;
+}d2cm_act_data_call_req_struct;
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_REQ
+typedef struct
+{
+ kal_uint32 tm_flag;
+}d2at_d2cm_deact_data_call_req_prv_struct;
+
+typedef d2am_ddm_deact_data_call_req_prv_struct d2am_d2cm_deact_data_call_req_prv_struct;
+
+typedef struct
+{
+ D2CM_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ atcmd_deact_cause_enum reason;
+
+ /* private part */
+ union
+ {
+ d2at_d2cm_deact_data_call_req_prv_struct d2at;
+ d2am_d2cm_deact_data_call_req_prv_struct d2am;
+ }prv;
+}d2cm_deact_data_call_req_struct;
+
+
+// MSG_ID_D2CM_ABORT_DATA_CALL_REQ
+typedef struct
+{
+ kal_uint8 unused;
+}imsm_d2cm_abort_data_call_req_prv_struct;
+
+typedef struct
+{
+ D2CM_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_bool cid_present;
+ kal_int32 cid;
+ atcmd_deact_cause_enum reason;
+
+ /* private part */
+ union
+ {
+ imsm_d2cm_abort_data_call_req_prv_struct imsm;
+ }prv;
+}d2cm_abort_data_call_req_struct;
+
+
+#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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+// MSG_ID_D2CM_RESET_RETRY_TMR_REQ
+typedef struct
+{
+ D2CM_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_uint32 reason;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_reset_retry_tmr_req_struct;
+
+
+/*******************************************************************************
+* D2CM to User CNF *
+*******************************************************************************/
+
+// MSG_ID_D2CM_GET_PDN_PROFILE_CNF
+typedef struct
+{
+ D2CM_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_get_pdn_profile_cnf_struct;
+
+
+// MSG_ID_D2CM_ACT_DATA_CALL_CNF
+typedef struct
+{
+ d2cm_act_data_call_ims_info_struct ims_info; // IMS information for p_cid
+ d2cm_act_data_call_ims_info_struct fb_ims_info; // IMS information for fb_cid
+}imsm_d2cm_act_data_call_cnf_prv_struct;
+
+typedef struct
+{
+ D2CM_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid, p_cid, fb_cid; // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+ kal_uint8 p_ded_cid[D2CM_CID_BITMAP_SIZE], fb_ded_cid[D2CM_CID_BITMAP_SIZE]; // a bitmap
+ d2cm_act_data_call_ip_info_struct ip_info; // IP address for p_cid
+ d2cm_act_data_call_net_info_struct net_info; // Internet information for p_cid
+ d2cm_act_data_call_if_info_struct if_info; // interface information for p_cid
+ d2cm_act_data_call_ran_info_struct ran_info; // RAN info of non-3GPP for p_cid
+ d2cm_act_data_call_ip_info_struct fb_ip_info; // IP address for fb_cid
+ d2cm_act_data_call_net_info_struct fb_net_info; // Internet information for fb_cid
+ d2cm_act_data_call_if_info_struct fb_if_info; // interface information for fb_cid
+ d2cm_act_data_call_ran_info_struct fb_ran_info; // RAN info of non-3GPP for fb_cid
+ d2cm_act_data_call_retry_info_struct retry_info; // retry timer for APN
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ imsm_d2cm_act_data_call_cnf_prv_struct imsm;
+ }prv;
+}d2cm_act_data_call_cnf_struct;
+/* IMSM_INTERMEDIATE_CNF share the same structure*/
+typedef d2cm_act_data_call_cnf_struct d2cm_netif_send_imsm_intermediate_cnf_struct;
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_CNF
+typedef struct
+{
+ D2CM_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_deact_data_call_cnf_struct;
+
+
+// MSG_ID_D2CM_ABORT_DATA_CALL_CNF
+typedef struct
+{
+ D2CM_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_bool cid_present;
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_abort_data_call_cnf_struct;
+
+
+#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 !*/
+/* 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 !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+// MSG_ID_D2CM_RESET_RETRY_TMR_CNF
+typedef struct
+{
+ D2CM_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_reset_retry_tmr_cnf_struct;
+
+
+/*******************************************************************************
+* D2CM to User IND *
+*******************************************************************************/
+
+// MSG_ID_D2CM_GET_PDN_PROFILE_IND
+// ---- TO_BE_REMOVED ----
+typedef struct
+{
+ ran_info_struct ran_info;
+}bip_d2cm_get_pdn_profile_ind_prv_struct;
+// ++++ TO_BE_REMOVED ++++
+
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* static part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_char apn_type[APN_TYPE_LIST_STRING_LEN];
+ kal_char pdp_type[PDP_TYPE_STRING_LEN];
+ kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+ kal_char username[APN_STRING_LEN];
+ kal_char passwd[APN_STRING_LEN];
+ kal_int8 auth_type;
+ kal_uint32 bearer_bitmask;
+
+ /* dynamic part */
+ d2cm_pdn_state_enum state;
+ kal_uint32 flag;
+ kal_int32 p_cid, fb_cid;
+ kal_uint8 p_ded_cid[D2CM_CID_BITMAP_SIZE], fb_ded_cid[D2CM_CID_BITMAP_SIZE]; // a bitmap
+ kal_char real_apn[APN_STRING_LEN];
+ kal_int32 engaged_apn_idx;
+ kal_char engaged_apn_type[APN_TYPE_STRING_LEN];
+ kal_char engaged_pdp_type[PDP_TYPE_STRING_LEN];
+ kal_uint32 num_of_p_cid_usr;
+ module_type p_cid_usr_list[D2CM_MAX_NUM_OF_USR];
+ kal_uint32 num_of_fb_cid_usr;
+ module_type fb_cid_usr_list[D2CM_MAX_NUM_OF_USR];
+
+ /* operater part */
+ struct
+ {
+ struct
+ {
+ kal_uint32 wapn;
+ kal_uint32 apncl;
+ kal_uint32 apned;
+ kal_uint32 max_conn;
+ kal_uint32 max_conn_t;
+ kal_uint32 wait_time;
+ }vzw;
+
+ struct
+ {
+ kal_uint32 inact_time;
+ }sprint;
+ }op;
+
+ /* private part */
+ struct
+ {
+ bip_d2cm_get_pdn_profile_ind_prv_struct bip; // ==== TO_BE_REMOVED ====
+ }prv;
+}d2cm_get_pdn_profile_ind_struct;
+
+
+// MSG_ID_D2CM_PDN_PROFILE_CHG_IND
+typedef d2cm_get_pdn_profile_ind_struct d2cm_pdn_profile_chg_ind_struct;
+
+
+// MSG_ID_D2CM_ACT_DATA_CALL_IND
+typedef struct
+{
+ cgev_event_enum cgev_event;
+ union
+ {
+ struct
+ {
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }nw_pdn_act;
+
+ struct
+ {
+ kal_bool reason_present;
+ atcmd_reason_enum reason;
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }me_pdn_act;
+
+ struct
+ {
+ kal_bool event_type_present;
+ atcmd_event_type_enum event_type;
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }nw_act;
+
+ struct
+ {
+ kal_bool event_type_present;
+ atcmd_event_type_enum event_type;
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }me_act;
+ }cgev_info;
+}d2at_d2cm_act_data_call_ind_prv_struct;
+
+typedef struct
+{
+ d2cm_act_data_call_ims_info_struct ims_info; // IMS information for p_cid
+}imsm_d2cm_act_data_call_ind_prv_struct;
+
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid, p_cid, fb_cid; // cid == fb_cid for fallback default bearer; cid == p_cid for default bearer; cid != p_cid for dedicated bearer
+ kal_uint8 p_ded_cid[D2CM_CID_BITMAP_SIZE], fb_ded_cid[D2CM_CID_BITMAP_SIZE]; // a bitmap
+ d2cm_act_data_call_ip_info_struct ip_info; // for IP address
+ d2cm_act_data_call_net_info_struct net_info; // for Internet information
+ d2cm_act_data_call_if_info_struct if_info; // for interface information
+ d2cm_act_data_call_ran_info_struct ran_info; // RAN info of non-3GPP
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ d2at_d2cm_act_data_call_ind_prv_struct d2at;
+ imsm_d2cm_act_data_call_ind_prv_struct imsm;
+ }prv;
+}d2cm_act_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_IND
+typedef struct
+{
+ cgev_event_enum cgev_event;
+ union
+ {
+ struct
+ {
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }nw_pdn_deact;
+
+ struct
+ {
+ int unused;
+ }me_pdn_deact;
+
+ struct
+ {
+ kal_bool event_type_present;
+ atcmd_event_type_enum event_type;
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }nw_deact;
+
+ struct
+ {
+ kal_bool event_type_present;
+ atcmd_event_type_enum event_type;
+ }me_deact;
+
+ struct
+ {
+ kal_bool PDP_type_present;
+ kal_uint8 PDP_type[PDP_TYPE_STRING_LEN];
+ kal_bool PDP_addr_present;
+ at_addr_struct PDP_addr;
+ }nw_react;
+ }cgev_info;
+}d2at_d2cm_deact_data_call_ind_prv_struct;
+
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_int32 res;
+
+ deact_res_info_struct res_info;
+
+ /* private part */
+ union
+ {
+ d2at_d2cm_deact_data_call_ind_prv_struct d2at;
+ }prv;
+}d2cm_deact_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_ABORT_DATA_CALL_IND
+typedef d2at_d2cm_deact_data_call_ind_prv_struct d2at_d2cm_abort_data_call_ind_prv_struct;
+
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_bool cid_present;
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ d2at_d2cm_abort_data_call_ind_prv_struct d2at;
+ }prv;
+}d2cm_abort_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_MOD_DATA_CALL_IND
+typedef struct
+{
+ cgev_event_enum cgev_event;
+ union
+ {
+ struct
+ {
+ kal_bool change_reason_present;
+ kal_uint32 change_reason;
+ kal_bool event_type_present;
+ atcmd_event_type_enum event_type;
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }nw_mod;
+
+ struct
+ {
+ kal_bool change_reason_present;
+ kal_uint32 change_reason;
+ kal_bool event_type_present;
+ atcmd_event_type_enum event_type;
+ kal_bool WLAN_Offload_present;
+ atcmd_WLAN_Offload_enum WLAN_Offload;
+ }me_mod;
+ }cgev_info;
+}d2at_d2cm_mod_data_call_ind_prv_struct;
+
+typedef struct
+{
+ d2cm_act_data_call_ims_info_struct ims_info; // IMS information for cid
+}imsm_d2cm_mod_data_call_ind_prv_struct;
+
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid, p_cid;
+ d2cm_act_data_call_ip_info_struct ip_info; // for IP address
+ d2cm_act_data_call_net_info_struct net_info; // for Internet information
+ d2cm_act_data_call_if_info_struct if_info; // for interface information
+ d2cm_act_data_call_ran_info_struct ran_info; // RAN info of non-3GPP
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ d2at_d2cm_mod_data_call_ind_prv_struct d2at;
+ imsm_d2cm_mod_data_call_ind_prv_struct imsm;
+ }prv;
+}d2cm_mod_data_call_ind_struct;
+
+
+// MSG_ID_D2CM_BYPASS_IND
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ // => unique key of APN
+ kal_bool apn_present;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ // => unique key of CID
+ kal_bool cid_present;
+ kal_int32 cid;
+ d2cm_bypass_event_enum event;
+ local_para_struct *local_para_ptr; /* local_para pointer */
+ peer_buff_struct *peer_buff_ptr; /* peer_buff pointer */
+
+ /* private part */
+ // N/A
+}d2cm_bypass_ind_struct;
+
+
+// MSG_ID_D2CM_HO_IND
+typedef d2pm_d2rm_pdn_ho_notify_ind_struct d2cm_ho_ind_struct;
+typedef d2pm_d2rm_pdn_ho_notify_ind_struct d2cm_ho_data_call_ind_struct;
+
+// MSG_ID_D2CM_DATA_CALL_INFO_IND
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 ps_id;
+ kal_char prefix[APN_STRING_LEN];
+ kal_char info[APN_STRING_LEN >> 1];
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_data_call_info_ind_struct;
+
+// MSG_ID_D2CM_RESET_RETRY_TMR_IND
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_bool apn_present;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ d2cm_reset_retry_tmr_retry_info_struct retry_info;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_reset_retry_tmr_ind_struct;
+
+// MSG_ID_D2CM_VOLTE_CFG_CHANGE_IND
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_bool apn_present;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ d2cm_reset_retry_tmr_retry_info_struct retry_info;
+
+}d2cm_volte_cfg_change_ind_struct;
+
+// MSG_ID_D2CM_EVENT_IND
+typedef struct
+{
+ D2CM_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ d2cm_event_enum event;
+ struct
+ {
+ // unique key of APN
+ kal_bool apn_present;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ // unique key of CID
+ kal_bool cid_present;
+ kal_int32 cid;
+ }info;
+}d2cm_event_ind_struct;
+
+
+/*******************************************************************************
+* User to D2CM RSP *
+*******************************************************************************/
+
+// MSG_ID_D2CM_ACT_DATA_CALL_RSP
+typedef struct
+{
+ D2CM_RSP_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_act_data_call_rsp_struct;
+
+
+// MSG_ID_D2CM_DEACT_DATA_CALL_RSP
+typedef struct
+{
+ D2CM_RSP_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ kal_int32 res;
+
+ /* private part */
+ union
+ {
+ kal_uint8 unused;
+ }prv;
+}d2cm_deact_data_call_rsp_struct;
+
+
+// MSG_ID_D2CM_BYPASS_RSP
+typedef struct
+{
+ D2CM_RSP_LOCAL_PARA_HDR
+
+ /* common part */
+ // => unique key of APN
+ kal_bool apn_present;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ // => unique key of CID
+ kal_bool cid_present;
+ kal_int32 cid;
+ d2cm_bypass_event_enum event;
+ local_para_struct *local_para_ptr; /* local_para pointer */
+ peer_buff_struct *peer_buff_ptr; /* peer_buff pointer */
+
+ /* private part */
+ // N/A
+}d2cm_bypass_rsp_struct;
+
+
+/*******************************************************************************
+* D2CM NetIF by Verit Chen: Debug Dump *
+*******************************************************************************/
+
+typedef enum {
+ D2CM_NETIF_RA_ERROR = -1,
+ D2CM_NETIF_RA_DEFAULT = 0,
+ D2CM_NETIF_RA_SUCCESS = 1,
+ D2CM_NETIF_RA_INITIAL_FAIL = 2,
+ D2CM_NETIF_RA_REFRESH_FAIL = 3,
+ D2CM_NETIF_RA_OOXX = 0x7FFFFFFF
+} d2cm_netif_ra_state_enum;
+
+typedef enum {
+ D2CM_NETIF_IF_STATE_DOWN = 0,
+ D2CM_NETIF_IF_STATE_UP = 1,
+
+ D2CM_NETIF_IF_STATE_DOWNING = 10,
+ D2CM_NETIF_IF_STATE_UPING = 11,
+ D2CM_NETIF_IF_STATE_OOXX = 0x7FFFFFFF
+} d2cm_netif_interface_state_enum;
+
+typedef struct {
+ kal_uint32 is_set;
+ kal_uint8 addr[4];
+} d2cm_netif_interface_ipv4_info_t;
+
+typedef struct {
+ kal_uint32 is_set;
+ kal_uint8 addr[16];
+ kal_int32 prefix;
+} d2cm_netif_interface_ipv6_info_t;
+
+typedef struct {
+ d2cm_netif_interface_state_enum state;
+ kal_uint16 is_use;
+ kal_uint8 is_set_v4_addr;
+ kal_uint8 is_set_v6_addr;
+} d2cm_netif_interface_status;
+
+typedef struct {
+ d2cm_netif_interface_status md_if_status;
+ d2cm_netif_interface_status ap_if_status;
+
+ kal_int32 ap_addr_type;
+ d2cm_netif_ra_state_enum ra_state;
+
+ kal_bool mtu_present;
+ kal_uint32 mtu;
+
+ d2cm_netif_interface_ipv4_info_t md_pco_v4;
+ d2cm_netif_interface_ipv6_info_t md_pco_v6;
+ d2cm_netif_interface_ipv6_info_t global_v6;
+} d2cm_netif_interface_info_t;
+
+typedef struct {
+ kal_uint8 is_used;
+ kal_uint8 ps_id;
+ kal_uint16 transaction_id;
+ kal_uint32 interface_id;
+ d2cm_netif_interface_info_t info;
+} d2cm_netif_interface_dump_item_t;
+
+#define D2CM_NETIF_MAX_INTERFACE_ID (20)
+#define D2CM_NETIF_MAX_DUMP_INTERFACE_ID (D2CM_NETIF_MAX_INTERFACE_ID) //(8)
+
+// MSG_ID_D2CM_NETIF_CONTEXT_DUMP_IND
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ kal_int32 interface_id;
+ kal_int32 num;
+ kal_char str[32];
+ d2cm_netif_interface_dump_item_t item[D2CM_NETIF_MAX_DUMP_INTERFACE_ID];
+}d2cm_netif_context_dump_ind_struct;
+
+typedef struct {
+ D2CM_IND_LOCAL_PARA_HDR
+
+ module_type mod_id; //send to which mod
+
+ kal_int32 cid;
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ ddm_apn_type_enum apn_type;
+
+ ip_info_struct ip_info;
+ net_info_struct net_info;
+ if_info_struct if_info;
+ kal_int32 res;
+} l5updn_dup_act_data_call_ind_struct;
+
+typedef struct {
+ D2CM_IND_LOCAL_PARA_HDR
+
+ module_type mod_id; //send to which mod
+
+ kal_int32 cid;
+ kal_int32 res;
+} l5updn_dup_deact_data_call_ind_struct;
+#endif
diff --git a/mcu/protocol/interface/ddm/d2pm_public_defs.h b/mcu/protocol/interface/ddm/d2pm_public_defs.h
new file mode 100644
index 0000000..e2eb52b
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2pm_public_defs.h
@@ -0,0 +1,122 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * d2pm_public_defs.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2PM_PUBLIC_DEFS_H__
+#define __D2PM_PUBLIC_DEFS_H__
+
+#include "atcmd_enum.h"
+#include "ps_public_enum.h"
+#include "ddm_enum.h"
+
+// Type definitions
+typedef enum
+{
+ // a single CID or the final CID
+ D2PM_RES_NONE = -2,
+ D2PM_RES_FAIL = -1,
+ D2PM_RES_SUCC = 0,
+ // a subsequent CID
+ D2PM_RES_FAIL_ABORT = 1,
+ D2PM_RES_SUCC_ABORT = 2,
+ D2PM_RES_FAIL_CONT = 3,
+ D2PM_RES_SUCC_CONT = 4,
+ // otherwise
+ D2PM_RES_REJ = 5,
+ D2PM_RES_RETRY = 6,
+ D2PM_RES_MAX = 0x7FFFFFFF
+}d2pm_res_enum;
+
+typedef enum
+{
+ D2PM_AUTH_TYPE_NONE = 0,
+ D2PM_AUTH_TYPE_PAP = 1,
+ D2PM_AUTH_TYPE_CHAP = 2,
+ D2PM_AUTH_TYPE_PAP_CHAP = 3,
+}d2pm_auth_type_enum;
+
+// Macro
+#define D2PM_UNSOLICITED (DDM_UNSOLICITED + 5566)
+#define D2PM_INVAL_CID (-1)
+#define D2PM_MIN_CID ((D2PM_INVAL_CID) + 1)
+#define D2PM_MAX_CID (PS_MAX_CID)
+#define D2PM_CID_BITMAP_SIZE (((D2PM_MAX_CID - D2PM_MIN_CID) >> 3) + 1)
+#define D2PM_INVAL_APN_IDX (-1)
+#define D2PM_NW_ASSIGNED_APN_IDX (0x0001FE00)
+
+// Functions
+// => Fundamental prototype
+#define vl_bitmap_set(bitmap_ptr, size, bit_num) ((size) < ((bit_num) >> 3) + 1 ? NULL : \
+ (*(((kal_uint8*)(bitmap_ptr)) + ((bit_num) >> 3)) |= (1 << ((bit_num) & 7)), (bitmap_ptr)))
+#define vl_bitmap_reset(bitmap_ptr, size, bit_num) ((size) < ((bit_num) >> 3) + 1 ? NULL : \
+ (*(((kal_uint8*)(bitmap_ptr)) + ((bit_num) >> 3)) &= ~(1 << ((bit_num) & 7)), (bitmap_ptr)))
+#define vl_bitmap_get(bitmap_ptr, size, bit_num) ((size) < ((bit_num) >> 3) + 1 ? 0 != 0 : \
+ ((*(((kal_uint8*)(bitmap_ptr)) + ((bit_num) >> 3)) & (1 << ((bit_num) & 7))) == 0 ? 0 != 0 : 0 == 0))
+#define cid_bitmap_set(bitmap_ptr, size, cid) ((cid) < D2PM_MIN_CID || (cid) > D2PM_MAX_CID || (size) < (((cid) - D2PM_MIN_CID) >> 3) + 1 ? NULL : \
+ (vl_bitmap_set((bitmap_ptr), (size), (cid) - D2PM_MIN_CID)))
+#define cid_bitmap_reset(bitmap_ptr, size, cid) ((cid) < D2PM_MIN_CID || (cid) > D2PM_MAX_CID || (size) < (((cid) - D2PM_MIN_CID) >> 3) + 1 ? NULL : \
+ (vl_bitmap_reset((bitmap_ptr), (size), (cid) - D2PM_MIN_CID)))
+#define cid_bitmap_get(bitmap_ptr, size, cid) ((cid) < D2PM_MIN_CID || (cid) > D2PM_MAX_CID || (size) < (((cid) - D2PM_MIN_CID) >> 3) + 1 ? 0 != 0 : \
+ (vl_bitmap_get((bitmap_ptr), (size), (cid) - D2PM_MIN_CID)))
+#endif
diff --git a/mcu/protocol/interface/ddm/d2pm_struct.h b/mcu/protocol/interface/ddm/d2pm_struct.h
new file mode 100644
index 0000000..09f193d
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2pm_struct.h
@@ -0,0 +1,85 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * d2pm_public_defs.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2PM_STRUCT_H__
+#define __D2PM_STRUCT_H__
+
+#include "atcmd_enum.h"
+#include "ddm_enum.h"
+
+typedef struct
+{
+ kal_char apn[APN_STRING_LEN];
+ kal_int32 apn_idx;
+ kal_char apn_type[APN_TYPE_LIST_STRING_LEN];
+ kal_char pdp_type[PDP_TYPE_STRING_LEN];
+ kal_char roam_prot[ROAMING_IP_TYPE_STRING_LEN];
+ kal_char username[APN_STRING_LEN];
+ kal_char passwd[APN_STRING_LEN];
+ kal_int8 auth_type;
+ kal_uint32 bearer_bitmask;
+}d2pm_custom_pdn_profile_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2rm_public_defs.h b/mcu/protocol/interface/ddm/d2rm_public_defs.h
new file mode 100644
index 0000000..63fc599
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2rm_public_defs.h
@@ -0,0 +1,73 @@
+/*****************************************************************************
+* 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).
+*
+*****************************************************************************/
+
+#ifndef __D2RM_PUBLIC_DEFS_H__
+#define __D2RM_PUBLIC_DEFS_H__
+
+#include "iwlan_public_defs.h"
+#include "atcmd_struct.h"
+
+typedef enum {
+ HO_STAT_START = 0,
+ HO_STAT_END,
+ HO_STAT_IP_READY,
+ HO_STAT_MAX = 0x7fffffff,
+} d2rm_ho_state_e;
+
+
+typedef struct {
+ iwlan_ran_e iwlan_ran;
+ atcmd_rat_enum atcmd_rat;
+} ran_info_struct;
+
+typedef enum
+{
+ D2_RAN_FILTER_UNSPEC = 0,
+ D2_RAN_FILTER_CELL = 1,
+ D2_RAN_FILTER_WLAN = (1 << 1),
+ D2_RAN_FILTER_DATA_1 = (1 << 2),
+ D2_RAN_FILTER_DATA_2 = (1 << 3),
+ D2_RAN_FILTER_DATA_3 = (1 << 4),
+ D2_RAN_FILTER_DATA_4 = (1 << 5),
+ D2_RAN_FILTER_ALL = 0x7FFFFFFF, // 0xFFFFFFFF may become int64
+} d2_ran_filter_enum;
+
+
+typedef struct {
+ atcmd_rat_enum atcmd_rat; // mcu/interface/protocol/l4_c2k/atcmd_enum.h
+ kal_uint32 iwlan_ran_filter; // Bitmap of d2_ran_filter_enum
+} ran_filter_struct;
+
+#endif //__D2RM_PUBLIC_DEFS_H__
diff --git a/mcu/protocol/interface/ddm/d2um_public_defs.h b/mcu/protocol/interface/ddm/d2um_public_defs.h
new file mode 100644
index 0000000..5f90470
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2um_public_defs.h
@@ -0,0 +1,41 @@
+#ifndef __D2UM_PUBLIC_DEFS_H__
+#define __D2UM_PUBLIC_DEFS_H__
+
+// Compiler flag, NEED_TO_BE_NOTICED, set by the compiler
+// N/A
+
+// Type definition
+typedef enum
+{
+ D2UM_RES_FAIL = -1,
+ D2UM_RES_NONE,
+ D2UM_RES_SUCC,
+ D2UM_RES_MAX = 0x7FFFFFFF
+}d2um_res_enum;
+
+// Macros
+// => Custom
+// => => => Bitmap
+#define D2UM_ATTR_AUTH_MASK (0x0000000F)
+#define D2UM_ATTR_NO_AUTH (0x00000000)
+#define D2UM_ATTR_PDN_AUTH (0x00000001)
+#define D2UM_ATTR_EVENT_AUTH (0x00000002)
+#define D2UM_ATTR_ADMIN_AUTH (D2UM_ATTR_AUTH_MASK)
+// => => => Distinct value
+#define D2UM_ATTR_MSG_MASK (0x000000F0)
+#define D2UM_ATTR_NO_MSG (0x00000000)
+#define D2UM_ATTR_AT_MSG (0x00000010)
+#define D2UM_ATTR_ILM_MSG (0x00000020)
+#define D2UM_ATTR_CB_MSG (0x00000030)
+#define D2UM_ATTR_NETIF_MASK (0x00000F00)
+#define D2UM_ATTR_NO_NETIF (0x00000000)
+#define D2UM_ATTR_AP_NETIF (0x00000100)
+#define D2UM_ATTR_MD_NETIF (0x00000200)
+
+// Interface
+// N/A
+
+//Implementation
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2um_struct.h b/mcu/protocol/interface/ddm/d2um_struct.h
new file mode 100644
index 0000000..ed127db
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2um_struct.h
@@ -0,0 +1,56 @@
+#ifndef __D2UM_STRUCT_H__
+#define __D2UM_STRUCT_H__
+
+#include "kal_public_defs.h"
+
+// Type definition
+typedef struct d2um_hdr d2um_hdr_t;
+typedef struct d2um_hdr* d2um_hdr_ptr_t;
+
+// Macro
+#define D2UM_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2UM_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2UM_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+#define D2UM_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 src_id;
+
+// Interface
+// N/A
+
+// Implementation
+struct d2um_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint16 src_id;
+};
+
+/*******************************************************************************
+* User to D2 REQ *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User CNF *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* D2 to User IND *
+*******************************************************************************/
+
+
+/*******************************************************************************
+* User to D2 RSP *
+*******************************************************************************/
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2ut_public_defs.h b/mcu/protocol/interface/ddm/d2ut_public_defs.h
new file mode 100644
index 0000000..28d8f09
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2ut_public_defs.h
@@ -0,0 +1,76 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * d2ut_public_defs.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ *
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __D2UT_PUBLIC_DEFS_H__
+#define __D2UT_PUBLIC_DEFS_H__
+
+// Type denifitions
+typedef enum
+{
+ D2UT_EVENT_NONE = (0x00000000),
+ D2UT_EVENT_ACT_DATA_CALL = (0x00000001),
+ D2UT_EVENT_MAX = (0x7FFFFFFF)
+}d2ut_event_enum;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/d2ut_struct.h b/mcu/protocol/interface/ddm/d2ut_struct.h
new file mode 100644
index 0000000..09bacd5
--- /dev/null
+++ b/mcu/protocol/interface/ddm/d2ut_struct.h
@@ -0,0 +1,82 @@
+/*****************************************************************************
+* 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) 2012
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+#ifndef __D2UT_STRUCT_H__
+#define __D2UT_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "d2ut_public_defs.h"
+
+// Type definition
+// N/A
+
+// Macros
+#define D2UT_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+#define D2UT_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+#define D2UT_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+#define D2UT_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint32 src_id;
+
+// Functions
+// N/A
+
+// Implementation
+// N/A
+
+/*******************************************************************************
+* User to D2UT REQ *
+*******************************************************************************/
+
+// MSG_ID_D2UT_TEST_REQ
+typedef struct
+{
+ D2UT_REQ_LOCAL_PARA_HDR
+
+ d2ut_event_enum event;
+
+}d2ut_test_req_struct;
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ddm_common_struct.h b/mcu/protocol/interface/ddm/ddm_common_struct.h
new file mode 100644
index 0000000..456c67d
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ddm_common_struct.h
@@ -0,0 +1,319 @@
+/*****************************************************************************
+* 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:
+ * ---------
+ * ddm_common_struct.h
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef _DDM_COMMON_STRUCT_H
+#define _DDM_COMMON_STRUCT_H
+
+#include "kal_public_defs.h"
+#include "d2pm_public_defs.h"
+#include "atcmd_struct.h"
+#include "netinfo_common_struct.h"
+#include "ps_public_enum.h"
+
+typedef struct
+{
+ at_token_parse_result_enum S_NSSAI_parse_result;
+ at_s_nssai_struct S_NSSAI; // string type
+ at_token_parse_result_enum SSC_mode_parse_result;
+ atcmd_SSC_mode_enum SSC_mode; // integer type
+ at_token_parse_result_enum Access_type_parse_result;
+ atcmd_Access_type_enum Access_type; // integer type
+} at_eapnset_UE_local_config_struct;
+
+#define MAX_PCSCF_NUMBER 6
+
+typedef enum {
+ DDM_APN_TYPE_UNKNOWN = 0x00000000,
+ DDM_APN_TYPE_DEFAULT = 0x00000001,
+ DDM_APN_TYPE_IMS = 0x00000002,
+ DDM_APN_TYPE_MMS = 0x00000004,
+ DDM_APN_TYPE_SUPL = 0x00000008,
+ DDM_APN_TYPE_DUN = 0x00000010,
+// DDM_APN_TYPE_HIPRI = 0x00000020,
+ DDM_APN_TYPE_FOTA = 0x00000040,
+// DDM_APN_TYPE_CBS = 0x00000080,
+ DDM_APN_TYPE_EMERGENCY = 0x00000100,
+ DDM_APN_TYPE_IA = 0x00000200,
+// DDM_APN_TYPE_DM = 0x00000400,
+// DDM_APN_TYPE_WAP = 0x00000800,
+// DDM_APN_TYPE_NET = 0x00001000,
+// DDM_APN_TYPE_CMMAIL = 0x00002000,
+// DDM_APN_TYPE_TETHERING = 0x00004000,
+// DDM_APN_TYPE_RCSE = 0x00008000,
+ DDM_APN_TYPE_XCAP = 0x00010000,
+// DDM_APN_TYPE_RCS = 0x00020000,
+ DDM_APN_TYPE_RCS_PCSCF = 0x00040000,
+ DDM_APN_TYPE_VSIM = 0x00080000,
+// DDM_APN_TYPE_BIP = 0x00100000,
+ DDM_APN_TYPE_PTT = 0x00200000,
+ DDM_APN_TYPE_NW_ASSIGNED = 0x80000000,
+} ddm_apn_type_enum;
+
+/* this is a bitmap */
+typedef enum {
+ PDX_ATTR_UNKNOWN = 0x00000000,
+ PDX_ATTR_NOT_NOTIFY = 0x00000001,
+ PDX_ATTR_IS_DANGLING = 0x00000002,
+ PDX_ATTR_IS_IA = 0x00000004,
+} pdx_attribute_enum;
+
+typedef enum {
+ DDM_PDP_TYPE_NONE = 0x0,
+ DDM_PDP_TYPE_V4 = 0x1,
+ DDM_PDP_TYPE_V6 = 0x2,
+ DDM_PDP_TYPE_V4V6 = 0x3, /* V4 | V6 */
+} ddm_pdp_type_enum;
+
+typedef struct {
+ LOCAL_PARA_HDR
+ kal_uint32 sbp_id;
+ kal_uint8 mcc[MAX_MCC_STR_LEN];
+ kal_uint8 mnc[MAX_MNC_STR_LEN];
+} ddm_dsbp_ready_ind_struct;
+
+typedef struct {
+ kal_uint32 apn_type_activate; /* ddm_apn_type */
+ kal_uint32 apn_type_all; /* ddm_apn_type */
+} apn_type_info_struct;
+
+typedef struct {
+ kal_int32 p_cid; // to activate a dedicated bearer
+ kal_int32 fb_cid; // to activate an IPv4v6 fallback bearer
+ kal_int32 old_cid; // for SSC mode 3
+} cid_info_struct;
+
+typedef struct {
+ kal_bool cgdcont_req_present;
+ at_cgdcont_req_struct cgdcont_req;
+ kal_bool egpco_req_present;
+ at_egpco_req_struct egpco_req;
+} d2_legacy_at_struct;
+
+typedef struct {
+ kal_uint32 network_interface_id;
+} network_interface_id_info_struct;
+
+typedef enum
+{
+ // DDM_RES_SUCC_RETRY, not exist
+ DDM_RES_NONE = D2PM_RES_NONE,
+ DDM_RES_FAIL = D2PM_RES_FAIL,
+ DDM_RES_SUCC = D2PM_RES_SUCC,
+ // a subsequent CID
+ DDM_RES_FAIL_ABORT = D2PM_RES_FAIL_ABORT,
+ DDM_RES_SUCC_ABORT = D2PM_RES_SUCC_ABORT,
+ DDM_RES_FAIL_CONT = D2PM_RES_FAIL_CONT,
+ DDM_RES_SUCC_CONT = D2PM_RES_SUCC_CONT,
+ // otherwise
+ DDM_RES_REJ = D2PM_RES_REJ,
+ DDM_RES_RETRY = D2PM_RES_RETRY,
+ DDM_RES_MAX = 0x7FFFFFFF
+}ddm_res_enum;
+
+// => Common strcuture
+typedef atcmd_request_type_enum ddm_req_type_enum;
+//typedef at_cgpaddr_ind_struct ddm_ip_info_struct; // [GT] NOT to use at_cmd format for Wi-Fi, etc.
+typedef network_ip_info_struct ddm_ip_info_struct;
+//typedef at_cgcontrdp_ind_struct ddm_net_info_struct; // [GT] NOT to use at_cmd format for Wi-Fi, etc.
+typedef net_info_struct ddm_net_info_struct;
+typedef retry_info_struct ddm_retry_info_struct;
+
+typedef ims_info_struct ddm_ims_info_struct;
+// => AT Command interface
+typedef at_cgact_req_struct ddm_get_data_call_list_req_struct;
+typedef at_cgact_ind_struct ddm_get_data_call_list_cnf_struct;
+typedef at_cgact_ind_struct ddm_get_data_call_list_ind_struct;
+typedef at_cgcontrdp_req_struct ddm_get_dynamic_param_req_struct;
+typedef at_cgcontrdp_ind_struct ddm_get_dynamic_param_cnf_struct;
+typedef at_cgcontrdp_ind_struct ddm_get_dynamic_param_ind_struct;
+typedef at_cgscontrdp_req_struct ddm_get_secondary_dynamic_param_req_struct;
+typedef at_cgscontrdp_ind_struct ddm_get_secondary_dynamic_param_cnf_struct;
+typedef at_cgscontrdp_ind_struct ddm_get_secondary_dynamic_param_ind_struct;
+typedef at_cgpaddr_req_struct ddm_get_pdp_address_req_struct;
+typedef at_cgpaddr_ind_struct ddm_get_pdp_address_cnf_struct;
+typedef at_cgpaddr_ind_struct ddm_get_pdp_address_ind_struct;
+typedef at_cgeqosrdp_req_struct ddm_get_qos_req_struct;
+typedef at_cgeqosrdp_ind_struct ddm_get_qos_cnf_struct;
+typedef at_cgeqosrdp_ind_struct ddm_get_qos_ind_struct;
+typedef at_c5gqosrdp_req_struct ddm_get_5gqos_req_struct;
+typedef at_c5gqosrdp_ind_struct ddm_get_5gqos_cnf_struct;
+typedef at_c5gqosrdp_ind_struct ddm_get_5gqos_ind_struct;
+typedef at_cgtftrdp_req_struct ddm_get_tft_req_struct;
+typedef at_cgtftrdp_ind_struct ddm_get_tft_cnf_struct;
+typedef at_cgtftrdp_ind_struct ddm_get_tft_ind_struct;
+typedef at_eglnkpf_req_struct ddm_set_packet_filter_req_struct;
+typedef at_cgtftrdp_ind_struct ddm_set_packet_filter_cnf_struct;
+typedef at_cgtftrdp_ind_struct ddm_set_packet_filter_ind_struct;
+typedef at_eglnkpf_req_struct ddm_get_packet_filter_req_struct;
+typedef at_eglnkpf_ind_struct ddm_get_packet_filter_cnf_struct;
+typedef at_eglnkpf_ind_struct ddm_get_packet_filter_ind_struct;
+typedef at_cgcmod_req_struct ddm_modify_data_call_req_struct;
+typedef at_cmd_cnf_struct ddm_modify_data_call_cnf_struct; // [GT] at_cgcmod_req_struct does NOT exist
+typedef at_cmd_cnf_struct ddm_modify_data_call_ind_struct; // [GT] at_cgcmod_req_struct does NOT exist
+
+#endif // _DDM_COMMON_STRUCT_H
+
+
diff --git a/mcu/protocol/interface/ddm/ddm_enum.h b/mcu/protocol/interface/ddm/ddm_enum.h
new file mode 100644
index 0000000..438caae
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ddm_enum.h
@@ -0,0 +1,114 @@
+#ifndef _DDM_ENUM_H
+#define _DDM_ENUM_H
+#include "../l4misc/l4c_common_enum.h"
+#include "sim_ps_enum.h"
+#include "module_id_range.h"
+
+#ifdef __CMUX_SUPPORT__
+#include "cmux_vp_num.h"
+#define CMUX_CHANNELS_NUM ((CMUX_VP_NUM_FOR_SINGLE_SIM * MAX_SIM_NUM) + CMUX_VPEX_TOTAL_NUM)
+#else
+#define CMUX_CHANNELS_NUM (1)
+#endif
+
+#define DDM_MAX_NUM_OF_APN (16)
+#define APN_TYPE_STRING_LEN (32)
+#define APN_TYPE_LIST_STRING_LEN (256)
+
+#define DDM_SRC_ID_ALL L4B_MAX_CHANNEL_NUMBER // L4B_MAX_CHANNEL_NUMBER is at least larger than 29
+#define DDM_RESERVE_SRC_NUM (30)
+#define DDM_SRC_ID_NUM (DDM_SRC_ID_ALL - DDM_RESERVE_SRC_NUM)
+
+#define D2_CHANNELS_NUM (8)
+#define DDM_CHANNELS_NUM (4)
+
+#define D2_ICCID_STR_LEN 21
+#define D2_IMSI_STR_LEN 16
+#define D2_GID1_LEN NUM_GID1
+#define D2_GID2_LEN NUM_GID2
+#define D2_FULL_PNN_LEN 50
+#define D2_GSM_SPN_LEN LEN_OF_SPN
+#define D2_C2K_SPN_LEN 35
+#define D2_MCF_MTU_CFG_ENTRY_NUM 10
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef enum
+{
+ DDM_SRC_CMUX_START = 0,
+ DDM_SRC_CMUX_END = DDM_SRC_CMUX_START + (CMUX_CHANNELS_NUM - 1),
+ DDM_SRC_D2_START,
+ DDM_SRC_D2AM_IA_REUSE = DDM_SRC_D2_START,
+ DDM_SRC_D2_IMSM,
+ DDM_SRC_D2_END = DDM_SRC_D2_START + (D2_CHANNELS_NUM - 1),
+ DDM_SRC_START,
+ DDM_SRC_FB_IPv4,
+ DDM_SRC_FB_IPv6,
+ DDM_SRC_END = DDM_SRC_START + (DDM_CHANNELS_NUM - 1),
+ DDM_ALL_NUM,
+} ddm_source_id_enum;
+
+typedef enum
+{
+ DDM_SRC_DDM_START = 0,
+ DDM_SRC_DDM_END = DDM_SRC_DDM_START + (DDM_SRC_ID_NUM - 1),
+ DDM_SRC_RESERVE_START,
+ DDM_SRC_IA_DEFINE = DDM_SRC_RESERVE_START,
+ DDM_SRC_IA_GET_NET_INFO,
+ DDM_SRC_CGEV_QUERY,
+ DDM_SRC_REDEACT_PDN,
+ DDM_SRC_DEACT_ONE_PDN,
+ DDM_SRC_PCO_UPDATE,
+ DDM_SRC_PCO_UPDATE_NW_MODIFY,
+ DDM_SRC_DEACT_AND_ACT_PDN,
+ DDM_SRC_IA_FALLBACK,
+ DDM_SRC_GRT_REQ,
+ DDM_SRC_QUERY_PS_DATA_OFF,
+ DDM_SRC_SET_CGCMOD,
+ DDM_SRC_FALLBACK_IPv4,
+ DDM_SRC_FALLBACK_IPv6,
+ DDM_SRC_FALLBACK_DEACT_PDN,
+ DDM_SRC_QOS_CHECK,
+ DDM_SRC_QOS_RELIABILITY,
+ DDM_SRC_QOS_CHECK_GET_APN,
+ DDM_SRC_ACT_AND_DEACT_PDN,
+ DDM_SRC_DEACT_INTERNET_AND_ACT_PDN,
+ DDM_SRC_EMM_DEACT_FOR_GARBAGE_PAGING,
+ DDM_SRC_VGMM_DEACT_FOR_GARBAGE_PAGING,
+ DDM_SRC_DEACT_DEFAULT_PDN,
+ DDM_SRC_ACTIVATE_DEFAULT_PDN,
+ DDM_SRC_DEACT_NO_IP_PDN,
+ DDM_SRC_VZWAPN_CMD,
+ DDM_SRC_RESERVE_END = DDM_SRC_RESERVE_START + (DDM_RESERVE_SRC_NUM - 1),
+ DDM_ALL = DDM_SRC_RESERVE_END,
+} ddm_src_id_enum;
+
+typedef enum {
+ D2AM_NW_NO_ACTION = 0,
+ D2AM_NW_EDALLOW_SET_0,
+ D2AM_NW_EDALLOW_SET_1,
+ D2AM_NW_ACTION_MAX = 0xFF,
+} d2am_nw_action_enum;
+
+#define DDM_SRC_ID_TOTAL_NUM DDM_ALL
+#define DDM_UNSOLICITED DDM_ALL
+// flag
+#define DDM_IS_STANDARD (0x00000001)
+#define DDM_IS_ACTTEST (0x00000010)
+
+#define EIF_SUPPORT_HO (1 << 0)
+#define EIF_SUPPORT_IPCHG (1 << 1)
+
+#define IGNORE_SRC_ID (0x7788)
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ddm_public_api.h b/mcu/protocol/interface/ddm/ddm_public_api.h
new file mode 100644
index 0000000..3ae66d1
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ddm_public_api.h
@@ -0,0 +1,10 @@
+#ifndef __DDM_PUBLIC_API_H__
+#define __DDM_PUBLIC_API_H__
+
+
+
+extern kal_uint32 ddm_get_ipv6_mtu_by_apn(kal_uint8 ps_id, kal_char *apn_name);
+
+
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ursp_public_defs.h b/mcu/protocol/interface/ddm/ursp_public_defs.h
new file mode 100644
index 0000000..ef63ef3
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ursp_public_defs.h
@@ -0,0 +1,173 @@
+#ifndef __URSP_PUBLIC_DEFS_H__
+#define __URSP_PUBLIC_DEFS_H__
+
+#include "d2pm_public_defs.h"
+
+// Type denifitions
+typedef enum
+{
+ URSP_RES_FAIL = -1,
+ URSP_RES_NONE,
+ URSP_RES_SUCC,
+ URSP_RES_MAX = 0x7FFFFFFF
+}ursp_res_enum;
+
+typedef enum
+{
+ URSP_ROUTE_SUPP_PROFILE_TYPE_NONE = 0,
+ URSP_ROUTE_SUPP_PROFILE_TYPE_REQ,
+ URSP_ROUTE_SUPP_PROFILE_TYPE_MAX = 0x7FFFFFFF
+}ursp_route_supp_profile_type_enum;
+
+typedef enum
+{
+ URSP_REEVAL_EVENT_NONE = 0,
+ URSP_REEVAL_EVENT_PERIODIC,
+ URSP_REEVAL_EVENT_PDU_REL,
+ URSP_REEVAL_EVENT_PCF_UPDATE,
+ URSP_REEVAL_EVENT_INTER_SYS,
+ URSP_REEVAL_EVENT_REG,
+ URSP_REEVAL_EVENT_WLAN_EST,
+ URSP_REEVAL_EVENT_WLAN_REL,
+ URSP_REEVAL_EVENT_ALLOWED_NSSAI,
+ URSP_REEVAL_EVENT_LADN,
+ URSP_REEVAL_EVENT_MAX = 0x7FFFFFFF
+}ursp_reeval_event_enum;
+
+// => Internal
+typedef enum {
+ TD_TYPE_MATACH_ALL = 0x00,
+ TD_TYPE_OS_APP_ID = 0x08,
+ TD_TYPE_IPV4_REMOTE_ADDR = 0x10,
+ TD_TYPE_IPV6_REMOTE_ADDR = 0x21,
+ TD_TYPE_PROTOCOL_ID = 0x30,
+ TD_TYPE_SINGLE_REMOTE_PORT = 0x50,
+ TD_TYPE_REMOTE_PORT_RANGE = 0x51,
+ TD_TYPE_SPI = 0x60,
+ TD_TYPE_TOS = 0x70,
+ TD_TYPE_FLOW_LABEL = 0x80,
+ TD_TYPE_DEST_MAC = 0x81,
+ TD_TYPE_C_TAG_VID = 0x83,
+ TD_TYPE_S_TAG_VID = 0x84,
+ TD_TYPE_C_TAG_PCP = 0x85,
+ TD_TYPE_S_TAG_PCP = 0x86,
+ TD_TYPE_ETHER_TYPE = 0x87,
+ TD_TYPE_DNN = 0x88,
+ TD_TYPE_CONN_CAPA = 0x90,
+ TD_TYPE_DEST_FQDN = 0x91,
+ TD_TYPE_APP_ID = 0xa0,
+} traffic_descriptor_component_type_enum;
+
+typedef enum {
+ RS_TYPE_SSC = 0x01,
+ RS_TYPE_SNSSAI = 0x02,
+ RS_TYPE_DNN = 0x04,
+ RS_TYPE_PDU_SESSION_TYPE = 0x08,
+ RS_TYPE_PREFER_ACCESS_TYPE = 0x10,
+ RS_TYPE_NON_SEAMLESS = 0x20,
+} route_selection_descriptor_component_type_enum;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+// Macro
+#define URSP_CID_BITMAP_SIZE (D2PM_CID_BITMAP_SIZE)
+#define URSP_UE_POLICY_MAX_RULE_LIST_SIZE (8) // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+#define URSP_RULE_MAX_ROUTE_SEL_DESC_LIST_SIZE (8) // 'eight' refers to the maximum size of allowed NSSAI, i.e. at most eight different slices
+// => LADN
+#define URSP_MAX_LADN_DNN_NUM (8)
+#define URSP_LADN_DNN_DELIM "\x1F"
+#define URSP_LDAN_DNN_BITMAP_SIZE (((URSP_MAX_LADN_DNN_NUM - 1) >> 3) + 1)
+// => Evaluation Flags
+#define URSP_EVAL_FLAG_NONE (0x00000000)
+#define URSP_EVAL_MATCH_ALL_DISALLOW (0x00000001)
+// => Route attributes
+#define URSP_ROUTE_ATTR_NONE (0x00000000)
+#define URSP_ROUTE_ATTR_MATCH_ALL (0x00000001)
+#define URSP_ROUTE_ATTR_UE_LOCAL_CONF (0x00000002)
+// => Internal
+#define URSP_DNN_SIZE (100) // APN in TS 23.003
+// => => Traffic descriptor component type identifier
+#define URSP_TDC_TYPE_MATCH_ALL (0x01)
+#define URSP_TDC_TYPE_OS_ID (0x08)
+#define URSP_TDC_TYPE_IPV4_REMOTE_ADDR (0x10)
+#define URSP_TDC_TYPE_IPV6_REMOTE_ADDR (0x21)
+#define URSP_TDC_TYPE_IPV4_PROT_ID (0x30)
+#define URSP_TDC_TYPE_IPV6_NEXT_HDR (0x30)
+#define URSP_TDC_TYPE_SINGLE_REMOTE_PORT (0x50)
+#define URSP_TDC_TYPE_REMOTE_PORT_RANGE (0x51)
+#define URSP_TDC_TYPE_IP_3_TUPLE (0x52) // max{(IPV4_REMOTE_ADDR, IPV4_REMOTE_MASK), (IPV6_REMOTE_ADDR, IPV6_PREFIX_LEN)} + IPV4_PROT_ID/IPV6_NEXT_HDR + max{SINGLE_REMOTE_PORT, (PORT_RANGE_LOW_LIMIT, PORT_RANGE_HIGH_LIMIT)}
+#define URSP_TDC_TYPE_SEC_PARAM_IDX (0x60)
+#define URSP_TDC_TYPE_TYPE_OF_SVC (0x70)
+#define URSP_TDC_TYPE_TFC_CLASS (0x70)
+#define URSP_TDC_TYPE_FLOW_LABEL (0x80)
+#define URSP_TDC_TYPE_DST_MAC_ADDR (0x81)
+#define URSP_TDC_TYPE_C_TAG_VID (0x83)
+#define URSP_TDC_TYPE_S_TAG_VID (0x84)
+#define URSP_TDC_TYPE_C_TAG_PCP_DEI (0x85)
+#define URSP_TDC_TYPE_S_TAG_PCP_DEI (0x86)
+#define URSP_TDC_TYPE_ETH_TYPE (0x87)
+#define URSP_TDC_TYPE_DNN (0x88)
+#define URSP_TDC_TYPE_CONN_CAP (0x90)
+#define URSP_TDC_TYPE_DST_FQDN (0x91)
+#define URSP_TDC_TYPE_OS_APP_ID (0xA0)
+// => => Length of traffic descriptor component value field
+#define URSP_TDC_LEN_MATCH_ALL (0)
+#define URSP_TDC_LEN_OS_ID (16) // UUID in RFC 4122
+#define URSP_TDC_LEN_IPV4_REMOTE_ADDR (4)
+#define URSP_TDC_LEN_IPV4_REMOTE_MASK (4)
+#define URSP_TDC_LEN_IPV6_REMOTE_ADDR (16)
+#define URSP_TDC_LEN_IPV6_PREFIX_LEN (1)
+#define URSP_TDC_LEN_IPV4_PROT_ID (1)
+#define URSP_TDC_LEN_IPV6_NEXT_HDR (1)
+#define URSP_TDC_LEN_SINGLE_REMOTE_PORT (2)
+#define URSP_TDC_LEN_PORT_RANGE_LOW_LIMIT (2)
+#define URSP_TDC_LEN_PORT_RANGE_HIGH_LIMIT (2)
+#define URSP_TDC_LEN_IP_3_TUPLE (22) // max{(IPV4_REMOTE_ADDR, IPV4_REMOTE_MASK), (IPV6_REMOTE_ADDR, IPV6_PREFIX_LEN)} + IPV4_PROT_ID/IPV6_NEXT_HDR + max{SINGLE_REMOTE_PORT, (PORT_RANGE_LOW_LIMIT, PORT_RANGE_HIGH_LIMIT)}
+#define URSP_TDC_LEN_SEC_PARAM_IDX (4)
+#define URSP_TDC_LEN_TYPE_OF_SVC (1)
+#define URSP_TDC_LEN_TFC_CLASS (1)
+#define URSP_TDC_LEN_TYPE_OF_SVC_MASK (1)
+#define URSP_TDC_LEN_TFC_CLASS_MASK (1)
+#define URSP_TDC_LEN_FLOW_LABEL (3)
+#define URSP_TDC_LEN_DST_MAC_ADDR (6)
+#define URSP_TDC_LEN_C_TAG_VID (2)
+#define URSP_TDC_LEN_S_TAG_VID (2)
+#define URSP_TDC_LEN_C_TAG_PCP_DEI (1)
+#define URSP_TDC_LEN_S_TAG_PCP_DEI (1)
+#define URSP_TDC_LEN_ETH_TYPE (2)
+#define URSP_TDC_LEN_DNN (URSP_DNN_SIZE)
+#define URSP_TDC_LEN_CONN_CAP (255)
+#define URSP_TDC_LEN_DST_FQDN (255)
+#define URSP_TDC_LEN_OS_APP_ID (255)
+// => => Route selection descriptor component type identifier
+#define URSP_RSDC_TYPE_SSC_MODE (0x01)
+#define URSP_RSDC_TYPE_S_NSSAI (0x02)
+#define URSP_RSDC_TYPE_DNN (0x04)
+#define URSP_RSDC_TYPE_PDU_SESSION_TYPE (0x08)
+#define URSP_RSDC_TYPE_PREF_ACCESS_TYPE (0x10)
+#define URSP_RSDC_TYPE_MULTI_ACCESS_PREF (0x11)
+#define URSP_RSDC_TYPE_NON_SEAMLESS_NON_3GPP_OFFLOAD_IND (0x20)
+#define URSP_RSDC_TYPE_LOC_CRITERIA (0x40)
+#define URSP_RSDC_TYPE_TIME_WIN (0x80)
+// => => Length of route selection descriptor component value field
+#define URSP_RSDC_LEN_SSC_MODE (1)
+#define URSP_RSDC_LEN_S_NSSAI (8) // S-NSSAI in TS 24.501
+#define URSP_RSDC_LEN_DNN (URSP_DNN_SIZE)
+#define URSP_RSDC_LEN_PDU_SESSION_TYPE (1)
+#define URSP_RSDC_LEN_PREF_ACCESS_TYPE (1)
+#define URSP_RSDC_LEN_NON_SEAMLESS_NON_3GPP_OFFLOAD_IND (0)
+
+// APIs
+// N/A
+
+#endif
diff --git a/mcu/protocol/interface/ddm/ursp_struct.h b/mcu/protocol/interface/ddm/ursp_struct.h
new file mode 100644
index 0000000..c97db98
--- /dev/null
+++ b/mcu/protocol/interface/ddm/ursp_struct.h
@@ -0,0 +1,424 @@
+#ifndef __URSP_STRUCT_H__
+#define __URSP_STRUCT_H__
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "mcd_l3_inc_struct.h"
+#include "atcmd_enum.h"
+#include "ursp_public_defs.h"
+
+// Type definition
+typedef struct ursp_hdr ursp_hdr_t;
+typedef struct ursp_hdr* ursp_hdr_ptr_t;
+
+// Macros
+#define URSP_REQ_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+#define URSP_CNF_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+#define URSP_IND_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+#define URSP_RSP_LOCAL_PARA_HDR \
+ LOCAL_PARA_HDR \
+ kal_uint16 seq_num;
+
+// Interface
+// N/A
+
+// Implementation
+struct ursp_hdr
+{
+ LOCAL_PARA_HDR
+ kal_uint16 seq_num;
+};
+
+
+/*******************************************************************************
+ * URSP Internal *
+ *******************************************************************************/
+
+// => Internal data type for URSP
+#pragma pack(push, 1)
+typedef struct
+{
+ kal_uint8 ipv4_addr[URSP_TDC_LEN_IPV4_REMOTE_ADDR];
+ kal_uint8 ipv4_mask[URSP_TDC_LEN_IPV4_REMOTE_MASK];
+}tdc_16_t;
+typedef struct
+{
+ kal_uint8 ipv6_addr[URSP_TDC_LEN_IPV6_REMOTE_ADDR];
+ kal_uint8 ipv6_prefix_len;
+}tdc_33_t;
+typedef union
+{
+ kal_uint8 ipv4_prot_id;
+ kal_uint8 ipv6_next_hdr;
+}tdc_48_t;
+typedef struct tdc_81
+{
+ kal_uint16 min_remote_port;
+ kal_uint16 max_remote_port;
+}tdc_81_t;
+typedef struct tdc_82
+{
+ union
+ {
+ tdc_16_t ipv4;
+ tdc_33_t ipv6;
+ }remote_addr;
+ tdc_48_t prot_id_next_hdr;
+ union
+ {
+ kal_uint16 single;
+ tdc_81_t range;
+ }remote_port;
+}tdc_82_t;
+typedef struct
+{
+ union
+ {
+ kal_uint8 ipv4_tos;
+ kal_uint8 ipv6_tc;
+ }val;
+ union
+ {
+ kal_uint8 ipv4_tos_mask;
+ kal_uint8 ipv6_tc_mask;
+ }mask;
+}tdc_112_t;
+typedef struct
+{
+ kal_uint8 s_tag_pcp;
+ kal_uint8 s_tag_dei;
+}tdc_134_t;
+#pragma pack(pop)
+
+typedef struct
+{
+ kal_bool is_match_all;
+ kal_uint8 dnn_len;
+ kal_char dnn[URSP_TDC_LEN_DNN]; // APN in TS 23.003
+ kal_uint8 os_id[URSP_TDC_LEN_OS_ID]; // UUID in RFC 4122
+ kal_uint8 app_id_len;
+ kal_uint8 app_id[URSP_TDC_LEN_OS_APP_ID];
+ kal_uint8 ipv4_addr[URSP_TDC_LEN_IPV4_REMOTE_ADDR];
+ kal_uint8 ipv4_mask[URSP_TDC_LEN_IPV4_REMOTE_MASK];
+ kal_uint8 ipv6_addr[URSP_TDC_LEN_IPV6_REMOTE_ADDR];
+ kal_uint8 ipv6_prefix_len;
+ kal_uint8 prot_id_next_hdr;
+ kal_uint16 single_remote_port;
+ kal_uint16 min_remote_port;
+ kal_uint16 max_remote_port;
+ kal_uint8 dst_fqdn_len;
+ kal_uint8 dst_fqdn[URSP_TDC_LEN_DST_FQDN];
+}ursp_traffic_desc_struct;
+
+typedef struct
+{
+ kal_uint8 p_val;
+ kal_uint8 ssc_mode;
+ kal_uint8 s_nssai_len;
+ kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+ kal_uint8 dnn_len;
+ kal_uint8 dnn[URSP_TDC_LEN_DNN]; // APN in TS 23.003
+ kal_uint8 pdu_session_type;
+ kal_uint8 pref_access_type;
+}ursp_route_sel_desc_struct;
+
+typedef struct
+{
+ kal_uint8 p_val;
+ ursp_traffic_desc_struct traffic_desc;
+ kal_uint8 num_of_rsd;
+ ursp_route_sel_desc_struct route_sel_desc_list[URSP_RULE_MAX_ROUTE_SEL_DESC_LIST_SIZE];
+}ursp_rule_struct;
+
+typedef struct
+{
+ kal_uint8 ssc_mode;
+ kal_uint8 s_nssai_len;
+ kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+ kal_uint8 dnn_len;
+ kal_uint8 dnn[URSP_TDC_LEN_DNN]; // APN in TS 23.003
+ kal_uint8 pdu_session_type;
+ kal_uint8 pref_access_type;
+}ursp_ue_local_conf_struct;
+typedef ursp_ue_local_conf_struct ursp_est_req_param_struct;
+
+
+/*******************************************************************************
+ * User to URSP REQ *
+ *******************************************************************************/
+
+// MSG_ID_URSP_GET_ROUTE_PROFILE_REQ
+typedef struct
+{
+ URSP_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+}ursp_get_route_profile_req_struct;
+
+// MSG_ID_URSP_REEVAL_REQ
+typedef struct
+{
+ URSP_REQ_LOCAL_PARA_HDR
+
+ /* common part */
+ ursp_reeval_event_enum event;
+ union
+ {
+ // Periodic
+ struct
+ {
+ int unused;
+ }periodic;
+
+ // PDU release
+ struct
+ {
+ int unused;
+ }pdu_rel;
+
+ // PCF Update
+ struct
+ {
+ int unused;
+ }pcf_update;
+
+ // Inter-system change from S1 to N1
+ struct
+ {
+ int unused;
+ }inter_sys;
+
+ // Registered in N1
+ struct
+ {
+ int unused;
+ }reg;
+
+ // Establishing a connection to a WLAN access
+ struct
+ {
+ int unused;
+ }wlan_est;
+
+ // Releasing a connection to a WLAN access
+ struct
+ {
+ int unused;
+ }wlan_rel;
+
+ // Allowed NSSAI change
+ struct
+ {
+ int unused;
+ }allowed_nssai;
+
+ // LADN information changed
+ struct
+ {
+ kal_char dnn_list[APN_STRING_LEN * URSP_MAX_LADN_DNN_NUM];
+ kal_uint8 in_out[URSP_LDAN_DNN_BITMAP_SIZE];
+ }ladn;
+ }param;
+}ursp_reeval_req_struct;
+
+// MSG_ID_URSP_SET_PRECONF_UE_POLICY_REQ
+typedef struct
+{
+ URSP_REQ_LOCAL_PARA_HDR
+
+ plmn_id_struct plmn_id;
+ kal_uint8 num_of_rule;
+ ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE];
+}ursp_set_preconf_ue_policy_req_struct;
+
+// MSG_ID_URSP_SET_USIM_UE_POLICY_REQ
+typedef struct
+{
+ URSP_REQ_LOCAL_PARA_HDR
+
+ int unused;
+}ursp_set_usim_ue_policy_req_struct;
+
+// MSG_ID_URSP_GET_UE_POLICY_REQ
+typedef struct
+{
+ URSP_REQ_LOCAL_PARA_HDR
+
+ plmn_id_struct plmn_id;
+}ursp_get_ue_policy_req_struct;
+
+
+/*******************************************************************************
+ * URSP to User CNF *
+ *******************************************************************************/
+
+// MSG_ID_URSP_GET_ROUTE_PROFILE_CNF
+typedef struct
+{
+ URSP_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ ursp_res_enum res;
+}ursp_get_route_profile_cnf_struct;
+
+// MSG_ID_URSP_REEVAL_CNF
+typedef struct
+{
+ URSP_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ ursp_res_enum res;
+}ursp_reeval_cnf_struct;
+
+// MSG_ID_URSP_SET_PRECONF_UE_POLICY_CNF
+typedef struct
+{
+ URSP_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ ursp_res_enum res;
+}ursp_set_preconf_ue_policy_cnf_struct;
+
+// MSG_ID_URSP_SET_USIM_UE_POLICY_CNF
+typedef struct
+{
+ URSP_CNF_LOCAL_PARA_HDR
+
+ int unused;
+}ursp_set_usim_ue_policy_cnf_struct;
+
+// MSG_ID_URSP_GET_UE_POLICY_CNF
+typedef struct
+{
+ URSP_CNF_LOCAL_PARA_HDR
+
+ /* common part */
+ ursp_res_enum res;
+}ursp_get_ue_policy_cnf_struct;
+
+
+/*******************************************************************************
+ * URSP to User IND *
+ *******************************************************************************/
+
+// MSG_ID_URSP_GET_ROUTE_PROFILE_IND
+typedef struct
+{
+ URSP_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ ursp_est_req_param_struct est_req_param;
+ kal_uint32 attr;
+}ursp_get_route_profile_ind_struct;
+
+// MSG_ID_URSP_GET_ROUTE_SUPP_PROFILE_IND
+typedef struct
+{
+ URSP_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_int32 cid;
+ ursp_route_supp_profile_type_enum type;
+ union
+ {
+ struct
+ {
+ ursp_traffic_desc_struct traffic_desc;
+ ursp_ue_local_conf_struct ue_local_conf;
+ kal_bool match_all_disallow;
+ }req;
+ }info;
+}ursp_get_route_supp_profile_ind_struct;
+
+// MSG_ID_URSP_REEVAL_IND
+typedef struct
+{
+ URSP_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ kal_uint8 cid[URSP_CID_BITMAP_SIZE]; // a bitmap
+ ursp_reeval_event_enum event;
+}ursp_reeval_ind_struct;
+
+// MSG_ID_URSP_GET_UE_POLICY_IND
+typedef struct
+{
+ URSP_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ plmn_id_struct plmn_id;
+ kal_uint8 num_of_rule;
+ ursp_rule_struct rule_list[URSP_UE_POLICY_MAX_RULE_LIST_SIZE];
+}ursp_get_ue_policy_ind_struct;
+
+// MSG_ID_URSP_UE_POLICY_CHG_IND
+typedef struct
+{
+ URSP_IND_LOCAL_PARA_HDR
+
+ /* common part */
+ plmn_id_struct plmn_id;
+}ursp_ue_policy_chg_ind_struct;
+
+// MSG_ID_URSP_RULE_TBL_DUMP_IND
+typedef struct
+{
+ URSP_IND_LOCAL_PARA_HDR
+
+ // UPSI
+ plmn_id_struct plmn_id;
+ kal_uint16 upsc;
+
+ // URSP rule
+ kal_uint8 rule_p_val;
+ kal_uint8 rsd_p_val;
+
+ // Traffic descriptor
+ kal_bool is_match_all;
+ kal_uint8 os_id[URSP_TDC_LEN_OS_ID];
+ tdc_16_t tdc_16;
+ tdc_16_t tdc_33;
+ tdc_16_t tdc_48;
+ kal_uint16 single_remote_port;
+ tdc_16_t tdc_81;
+ kal_uint32 ipsec_spi;
+ tdc_16_t tdc_112;
+ kal_uint8 flow_label[3];
+ kal_uint8 dst_mac_addr[6];
+ kal_uint8 c_tag_vid[2];
+ kal_uint8 s_tag_vid[2];
+ kal_uint8 c_tag_pcp_dei;
+ kal_uint8 s_tag_pcp_dei;
+ kal_uint16 eth_type;
+ kal_uint8 td_dnn[URSP_TDC_LEN_DNN];
+ kal_uint8 conn_cap[URSP_TDC_LEN_CONN_CAP];
+ kal_uint8 dst_fqdn[URSP_TDC_LEN_DST_FQDN];
+ kal_uint8 os_app_id[URSP_TDC_LEN_OS_APP_ID];
+
+ // Route selection descriptor
+ kal_uint8 ssc_mode;
+ kal_uint8 s_nssai[URSP_RSDC_LEN_S_NSSAI];
+ kal_uint8 rsd_dnn[URSP_RSDC_LEN_DNN];
+ kal_uint8 pdu_session_type;
+ kal_uint8 pref_access_type;
+ kal_bool is_nsn3_offload;
+}ursp_rule_tbl_dump_ind_struct;
+
+
+/*******************************************************************************
+ * User to URSP RSP *
+ *******************************************************************************/
+// N/A
+
+#endif