diff --git a/patch/17.02_17.09/code/17.02_17.09.diff b/patch/17.02_17.09/code/17.02_17.09.diff
new file mode 100755
index 0000000..48f0d7e
--- /dev/null
+++ b/patch/17.02_17.09/code/17.02_17.09.diff
@@ -0,0 +1,249 @@
+From fedbd6ef919755f1b12df8d3a094b8aada3c0ec6 Mon Sep 17 00:00:00 2001
+From: xf.li <xf.li@mobiletek.cn>
+Date: Mon, 02 Dec 2024 01:43:27 -0800
+Subject: [PATCH] [Feature][T106_eSDK]update from T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02 to T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01 -- code
+
+Only Configure: No
+Affected branch: master
+Affected module: unknow
+Is it affected on both ZXIC and MTK: only ZXIC
+Self-test: Yes
+Doc Update: No
+
+Change-Id: I68b16bb5bc66b9961235b3451b288c56bbde5cb6
+---
+
+diff --git a/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf b/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
+index e90d0da..50c2f6e 100755
+--- a/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
++++ b/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
+@@ -468,5 +468,5 @@
+ MOBILETEK_LOG_ENCRYPT = "disable"
+ 
+ LYNQ_CONFIG_COMMITID = "e2a3410390ff0ad762462ccb6af8faa5e16dcd61"
+-LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02"
+-LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02"
++LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
++LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
+diff --git a/esdk/layers/meta-zxic-custom/conf/lynq_base.conf b/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
+index e391546..8126a9e 100755
+--- a/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
++++ b/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
+@@ -67,6 +67,6 @@
+ #OEMAPP_CFG value:"PLATFORM","GSW"
+ MOBILETEK_OEMAPP_CFG = "PLATFORM"
+ 
+-LYNQ_CONFIG_COMMITID = "9aea88bb79cfb2fae9ddab87f8307126d618aec2"
+-LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02"
+-LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02"
++LYNQ_CONFIG_COMMITID = "db2a7e1b3aa519b00153f78dcb223c2eb539f891"
++LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
++LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
+diff --git a/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb b/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
+index dd600c2..287b0ba 100755
+--- a/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
++++ b/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
+@@ -46,7 +46,7 @@
+ 
+     if [ -d "${WORKONSRC}" ] ; then
+         install -d ${D}${includedir}/
+-        cp -raf ${SRC-DIR}/include/ ${D}${includedir}/
++        cp -raf ${SRC-DIR}/include/lynq_qser_gnss.h ${D}${includedir}/
+     fi
+     if [ "${MOBILETEK_GNSS_UPDATE_ENABLE}" = "yes" ]; then
+         install -d ${D}/data/gnss_update
+diff --git a/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp b/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
+index ad38820..2d45d7d 100755
+--- a/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
++++ b/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
+@@ -17,6 +17,7 @@
+ int (*qser_nw_client_init_p)(nw_client_handle_type  * ph_nw);
+ int (*qser_nw_client_deinit_p)(nw_client_handle_type h_nw);
+ int (*qser_nw_set_config_p)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info);
++int (*qser_nw_get_config_p)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info);
+ int (*qser_nw_get_operator_name_p)(nw_client_handle_type    h_nw, QSER_NW_OPERATOR_NAME_INFO_T    *pt_info );
+ int (*qser_nw_get_reg_status_p)(nw_client_handle_type  h_nw, QSER_NW_REG_STATUS_INFO_T *pt_info);
+ int (*qser_nw_add_rx_msg_handler_p)(nw_client_handle_type  h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr,void* contextPtr);
+@@ -44,6 +45,7 @@
+     qser_nw_client_init_p = (int (*)(nw_client_handle_type  * ph_nw))dlsym(handle_network,"qser_nw_client_init");    
+     qser_nw_client_deinit_p = (int (*)(nw_client_handle_type h_nw))dlsym(handle_network,"qser_nw_client_deinit");
+     qser_nw_set_config_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_set_config");
++    qser_nw_get_config_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_config");
+     qser_nw_get_operator_name_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_OPERATOR_NAME_INFO_T  *pt_info ))dlsym(handle_network,"qser_nw_get_operator_name");
+     qser_nw_get_reg_status_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_REG_STATUS_INFO_T  *pt_info))dlsym(handle_network,"qser_nw_get_reg_status");
+     qser_nw_get_signal_strength_p = (int (*)(nw_client_handle_type h_nw, QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_signal_strength");
+@@ -55,7 +57,7 @@
+     qser_nw_set_ims_enable_p = (int (*)(nw_client_handle_type  h_nw, E_QSER_NW_IMS_MODE_TYPE_T ims_mode))dlsym(handle_network,"qser_nw_set_ims_enable");
+     qser_nw_get_ims_reg_status_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_IMS_REG_STATUS_INFO_T  *pt_info))dlsym(handle_network,"qser_nw_get_ims_reg_status");
+         
+-    if(qser_nw_client_deinit_p==NULL || qser_nw_client_init_p==NULL || qser_nw_set_config_p ==NULL ||
++    if(qser_nw_client_deinit_p==NULL || qser_nw_client_init_p==NULL || qser_nw_set_config_p ==NULL || qser_nw_get_config_p ==NULL ||
+        qser_nw_get_operator_name_p == NULL || qser_nw_get_reg_status_p ==NULL || qser_nw_add_rx_msg_handler_p==NULL ||
+        qser_nw_set_rf_mode_p == NULL || qser_nw_get_rf_mode_p == NULL || qser_nw_get_oos_config_p == NULL || qser_nw_set_oos_config_p == NULL || 
+        qser_nw_set_ims_enable_p == NULL || qser_nw_get_ims_reg_status_p == NULL)
+@@ -100,7 +102,8 @@
+     {9,     "qser_nw_get_rf_mode"},
+     {10,     "qser_nw_set_ims_enable"},
+     {11,     "qser_nw_get_ims_reg_status"},
+-    {12,     "qser_nw_client_deinit"},      
++    {12,     "qser_nw_get_config"}, 
++    {13,     "qser_nw_client_deinit"},      
+     {-1,    "quit"}
+ };
+ 
+@@ -452,7 +455,7 @@
+                              
+                  break;
+              }                 
+-             case 12://"qser_nw_client_deinit"
++             case 13://"qser_nw_client_deinit"
+              {
+                  ret = qser_nw_client_deinit_p(h_nw);
+                  printf("qser_nw_client_deinit ret = %d\n", ret);
+@@ -610,7 +613,14 @@
+                          t_info.registration_state);
+                  }                
+                  break;
+-             }                 
++             }          
++             case 12://"qser_nw_get_config"
++             {
++                 QSER_NW_CONFIG_INFO_T     t_info = {0};              
++                 ret = qser_nw_get_config_p(h_nw, &t_info);
++                 printf("qser_nw_get_config ret = %d\n, nw_mode is %llu", ret,t_info.preferred_nw_mode);
++                 break;
++             }            
+              default:
+              {
+                  show_group_help(&t_nw_test);
+diff --git a/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h b/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
+index 56e2ce0..aee4285 100755
+--- a/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
++++ b/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
+@@ -401,6 +401,12 @@
+     QSER_NW_CONFIG_INFO_T     *pt_info 
+ );
+ 
++int qser_nw_get_config
++(
++    nw_client_handle_type       h_nw,
++    QSER_NW_CONFIG_INFO_T     *pt_info 
++);
++
+ int qser_nw_set_ims_enable
+ (
+     nw_client_handle_type h_nw,
+diff --git a/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te b/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
+index fe01295..3eabb0a 100755
+--- a/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
++++ b/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
+@@ -5,6 +5,7 @@
+ # Declarations
+ #
+ 
++
+ attribute logfile;
+ 
+ type auditctl_t;
+@@ -323,6 +324,8 @@
+ allow klogd_t self:capability sys_admin;
+ dontaudit klogd_t self:capability { sys_resource sys_tty_config };
+ allow klogd_t self:process signal_perms;
++allow klogd_t kernel_t:fd { use };
++allow klogd_t root_t:chr_file { read write };
+ 
+ manage_dirs_pattern(klogd_t, klogd_tmp_t, klogd_tmp_t)
+ manage_files_pattern(klogd_t, klogd_tmp_t, klogd_tmp_t)
+@@ -620,7 +623,8 @@
+ 	xserver_rw_console(syslogd_t)
+ ')
+ gen_require(`
+-    type default_t;
++        type root_t;
++        type default_t;
+ 	type nvserver_t;
+ 	type mnt_t;
+ 	type tmpfs_t;
+@@ -670,7 +674,8 @@
+ allow syslogd_t default_t:lnk_file { read  };
+ allow syslogd_t mnt_t:dir { search };
+ allow syslogd_t tmpfs_t:dir { write add_name remove_name search };
+-
++allow syslogd_t root_t:chr_file { read write };
++allow syslogd_t mnt_t:file { getattr open append };
+ allow syslogd_t self:capability { sys_rawio };
+ 
+ 
+diff --git a/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-lynq-spidev.h.patch b/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-lynq-spidev.h.patch
+new file mode 100755
+index 0000000..289bf13
+--- /dev/null
++++ b/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-lynq-spidev.h.patch
+@@ -0,0 +1,30 @@
++diff --git a/include/uapi/linux/spi/spidev.h b/include/uapi/linux/spi/spidev.h
++old mode 100644
++new mode 100755
++index d56427c..d69bab6
++--- a/include/uapi/linux/spi/spidev.h
+++++ b/include/uapi/linux/spi/spidev.h
++@@ -146,6 +146,22 @@ struct spi_ioc_transfer {
++ #define SPI_IOC_RD_MODE32		_IOR(SPI_IOC_MAGIC, 5, __u32)
++ #define SPI_IOC_WR_MODE32		_IOW(SPI_IOC_MAGIC, 5, __u32)
++ 
++-
+++/* Read data from buffer or device */
+++#define SPI_IOC_RD_RD_DATA_FROM	_IOR(SPI_IOC_MAGIC, 6, __u8)
+++#define SPI_IOC_WR_RD_DATA_FROM	_IOW(SPI_IOC_MAGIC, 6, __u8)
+++
+++/* Set signal pid */
+++#define SPI_IOC_RD_SIG_PID		_IOR(SPI_IOC_MAGIC, 7, __u32)
+++#define SPI_IOC_WR_SIG_PID	    _IOW(SPI_IOC_MAGIC, 7, __u32)
+++
+++/* get int status */
+++#define SPI_IOC_RD_INT_ST		_IOR(SPI_IOC_MAGIC, 8, __u32)
+++#define SPI_IOC_WR_INT_ST	    _IOW(SPI_IOC_MAGIC, 8, __u32)
+++
+++/* yu.dong@20240617 [T106BUG-641] SPI packet loss problem, add kernel buffer scheme start*/
+++/* release from rd/wr block */
+++#define SPI_IOC_RD_BLOCK_RELEASE	_IOR(SPI_IOC_MAGIC, 9, __u32)
+++//#define SPI_IOC_WR_INT_ST	    _IOW(SPI_IOC_MAGIC, 9, __u32)
+++/* yu.dong@20240617 [T106BUG-641] SPI packet loss problem, add kernel buffer scheme end*/
++ 
++ #endif /* SPIDEV_H */
+diff --git a/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb b/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
+index 98ea747..d528304 100755
+--- a/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
++++ b/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
+@@ -6,7 +6,7 @@
+     file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
+     file://0001-include-linux-stddef.h-in-swab.h-uapi-header.patch \
+    "
+-
++#xf.li@20241023 modify for libc-headers start
+ SRC_URI_append = "\
+     file://0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch \
+     file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
+@@ -14,8 +14,9 @@
+     file://0002-add-zxic-rpmsg_zx29.h.patch \
+     file://0003-add-zxic-bsp_api_h.patch \
+     file://0001-mtd-abi.h.patch \
++    file://0001-lynq-spidev.h.patch \
+ "
+-
++#xf.li@20241023 modify for libc-headers end
+ LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+ 
+ SRC_URI[md5sum] = "753adc474bf799d569dec4f165ed92c3"
+diff --git a/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c b/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
+index f9b23d7..e8d8e88 100755
+--- a/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
++++ b/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
+@@ -729,7 +729,7 @@
+ 	switch (action) {
+ 
+ 	case PM_POST_SUSPEND:
+-		__pm_wakeup_event(zx_main_ws, 1000);		
++		__pm_wakeup_event(zx_main_ws, 500);//LYNQ_AUTOSUSPEND add for bug-view-372 by jb.qi on 20241114	
+ 		break;
+ 
+ 	default:
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
new file mode 100755
index 0000000..50c2f6e
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
@@ -0,0 +1,472 @@
+require conf/distro/include/cpe-base.inc
+
+DISTRO          = "vehicle_dc_ref"
+DISTRO_NAME     = "zxic Distro vehicle_dc_ref"
+DISTRO_VERSION  = "1.0"
+SDK_VENDOR      = "-zxic"
+MAINTAINER      = "Sanechips Co.，Ltd."
+TARGET_VENDOR   = "-zxic"
+
+## OPTEE
+DISTRO_FEATURES += "OPTEE"
+meta_optee += " ${@bb.utils.contains("DISTRO_FEATURES", "OPTEE", " optee-client optee-example  ", "", d)} "
+
+PREFERRED_PROVIDER_virtual/kernel  = "linux-zxic"
+PREFERRED_VERSION_linux-zxic      = "5.10.156"
+PREFERRED_VERSION_busybox      = "1.33.1"
+#PREFERRED_VERSION_openssl      = "1.1.1l"
+
+TCLIBC = "glibc"
+VIRTUAL-RUNTIME_dev_manager   = "busybox-mdev"
+VIRTUAL-RUNTIME_login_manager = "busybox"
+VIRTUAL-RUNTIME_init_manager  = "busybox"
+VIRTUAL-RUNTIME_initscripts   = "initscripts"
+
+# #
+# # Use systemd for system initialization
+# #
+# VIRTUAL-RUNTIME_init_manager        = "systemd"
+# PREFERRED_PROVIDER_udev             = "systemd"
+# PREFERRED_PROVIDER_udev-utils       = "systemd"
+# DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
+# VIRTUAL-RUNTIME_initscripts         = ""
+# DEFAULT_DISTRO_FEATURES           += "systemd"
+# DISTRO_FEATURES_append              = " systemd"
+# DISTRO_FEATURES_remove              = "sysvinit"
+
+KERNEL_DEVICETREE = " \
+	zx297520v3-vehicle_dc_ref.dtb     \
+"
+# selinux 配置
+DISTRO_FEATURES_append=" selinux "
+
+# 默认是强制模式 enforcing ，调试建议采用宽容模式 permissive
+DEFAULT_ENFORCING = "permissive"
+
+# selinux 策略
+PREFERRED_PROVIDER_virtual/refpolicy ?= "refpolicy-mls"
+
+## adb login
+DISTRO_FEATURES += "adb_login"
+
+# storage type: nand or emmc
+STRORAGE_TYPE = "nand"
+STRORAGE_CONF = "nand-config-4k"
+require conf/distro/include/${STRORAGE_CONF}.inc
+
+#rootfs文件系统类型
+IMAGE_FSTYPES  = "squashfs"
+#IMAGE_FSTYPES  = "cpio.gz"
+
+
+#rootfs文件系统squashfs参数配置，压缩方式和块大小可以更改
+#squashfs_xz squashfs_zstd
+DISTRO_FEATURES_append = " squashfs_zstd "
+ROOTFS_SQUASHFS_ARGS = "-nopad -noappend -root-owned -b 256k -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -processors 1"
+ROOTFS_SQUASHFS_ARGS += " ${@bb.utils.contains("DISTRO_FEATURES", "selinux", "-xattrs", "", d)} "
+ROOTFS_SQUASHFS_ARGS += "${@bb.utils.contains("DISTRO_FEATURES", "squashfs_zstd", " -comp zstd ","", d)}"
+ROOTFS_SQUASHFS_ARGS += "${@bb.utils.contains("DISTRO_FEATURES", "squashfs_xz", " -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 ","", d)}"
+
+#userdata文件系统类型
+USERDATA_FSTYPE       = "ubi"
+USERDATA_UBINIZE_CFG  = "userdata-ubi-default.cfg"
+OEMDATA_UBINIZE_CFG   = "oemdata-ubi-default.cfg"
+
+#userdata ext4 文件系统大小
+USERDATA_EXT4SIZE = "194018"
+
+#
+# system initialization
+#
+DISTRO_FEATURES_append = " sysvinit "
+
+
+#是否支持MMI LCD功能
+#DISTRO_FEATURES += "MMI_LCD"
+#语音控制
+DISTRO_FEATURES += "voice_alsa"
+DISTRO_FEATURES += "use_voice_buffer"
+#DISTRO_FEATURES += "voice_at"
+
+#cap_oem.img
+DISTRO_FEATURES += " oemfs "
+
+#dm-verity for squashfs
+DISTRO_FEATURES += " dm-verity "
+
+
+#CUSTOM_MACRO在各个产品不变的宏放到cpe-base.inc文件，变化的宏放在产品发布文件。
+CUSTOM_MACRO  += " -D_GNU_SOURCE "
+
+#产品linux kernel配置，主要区分cpe、v2x、mdl,fpga文件在./meta-zxic/recipes-kernel/linux/files目录下
+#BOOT_CTL:版本的启动方式，normal/recovery，如：linux-5_4-fpga-normal.defconfig
+LINUX_BASE_CONFIG = "linux-5_10-${DISTRO}-${BOOT_CTL}-defconfig"
+
+#型号机linux kernel配置，主要区分mdlxx、mdlyy等型号机,文件在./meta-zxic-custom/recipes-kernel/linux/files目录下
+#BOOT_CTL:版本的启动方式，normal/recovery，如：linux-5_4-mdl-normal.cfg
+LINUX_CONFIG = "linux-5_10-${DISTRO}-${BOOT_CTL}.cfg"
+
+#busybox 配置 文件在./meta-zxic/recipes-core/busybox/files目录下
+BUSYBOX_CONFIG = "${DISTRO}-${BOOT_CTL}-busybox.cfg"
+
+##############################################################################
+# custom macro for lib and app
+CUSTOM_MACRO  		+= " -DAPP_OS_LINUX=1 "
+CUSTOM_MACRO	 	+= " -DAPP_OS_TYPE=APP_OS_LINUX "
+
+ENABLE_TESTBENCH_TTY  =  "no"
+##testbench macro for mode,notty=0 single=1 uchm=2
+CUSTOM_MACRO += " -DTTY_MODE_NO=0 "
+CUSTOM_MACRO += " -DTTY_MODE_SINGLE=1 "
+CUSTOM_MACRO += " -DTTY_MODE_MUX=2 "
+CUSTOM_MACRO += " -DUSE_UBIFS "
+CUSTOM_MACRO += " -DUSE_CAP_SUPPORT "
+CUSTOM_MACRO += " -DFOTA_AB "
+CUSTOM_MACRO += "${@bb.utils.contains('ENABLE_TESTBENCH_TTY', 'yes', '-DTESTBENCH_TTY_MODE=TTY_MODE_SINGLE', '-DTESTBENCH_TTY_MODE=TTY_MODE_NO', d)}"
+CONFIG_MMI_LCD = "${@bb.utils.contains("DISTRO_FEATURES", "MMI_LCD", "yes","no", d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('CONFIG_MMI_LCD', 'yes', '', '-DDISABLE_LCD', d)}"
+USE_ZXIC_WEBUI = "no"
+CONFIG_USE_WEBUI_SSL="yes"
+CONFIG_USE_WEBUI_SECURITY="yes"
+#security compile options
+CFLAGS_append  = " -Wl,-z,noexecstack"
+SECURITY_PIE_CFLAGS = " -pie -fPIE"
+SECURITY_STACK_PROTECTOR = " -fstack-protector-all"
+#CUSTOM_MACRO += " -D_USE_CODEC_TI3100 "
+#CUSTOM_MACRO += " -D_USE_CODEC_NAU8810 "
+#CUSTOM_MACRO += " -D_USE_CODEC_TI3104 "
+#CUSTOM_MACRO += " -D_USE_CODEC_MAX9867 "
+CUSTOM_MACRO += " -D_USE_CODEC_ES8311 "
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'voice_alsa', '-D_USE_VOICE_ALSA', '', d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'use_voice_buffer', '-D_USE_VOICE_BUFFER', '', d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'voice_at', '-D_USE_VOICE_AT', '', d)}"
+#CONFIG_VB_TRANSMIT_INTF = "RTP"
+#CONFIG_VB_TRANSMIT_INTF = "USB"
+CONFIG_VB_TRANSMIT_INTF = "NULL"
+CUSTOM_MACRO += "${@bb.utils.contains('CONFIG_VB_TRANSMIT_INTF', 'RTP', '-D_VB_TRANSMIT_INTF_RTP', '', d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('CONFIG_VB_TRANSMIT_INTF', 'USB', '-D_VB_TRANSMIT_INTF_USB', '', d)}"
+#wifi 配置
+#"mt7916" "" "" ""
+CONFIG_WIFI_MODULE = "mt7916"
+#"apsta" "sta" "ap"
+CONFIG_WIFI_FUNCTION = "ap"
+#wificfg       = "${@bb.utils.contains('CONFIG_WIFI_FUNCTION', 'ap', bb.utils.contains('CONFIG_WIFI_MODULE', 'esp8089', 'lib32-hostapd-2.6', '', d), '', d)}"
+
+#BL接口支持("BL")，RIL接口支持("RIL")
+CONFIG_TEL_API_SUPPORT = "RIL"
+
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'BL', '-D_USE_BL', '', d)}"
+
+#RIL AT通道支持RPMSG模式
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', '-DZXIC_ATCHN_RPMSG_MODE', '', d)}"
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', '-DUSE_CUSTOM_YK', '', d)}"
+
+DISTRO_FEATURES += " vehicle_dc_ref "
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'vehicle_dc_ref', '-D_USE_VEHICLE_DC_REF', '', d)}"
+
+#多媒体编解码库支持类型"FFMPEG"，"NONE"
+CONFIG_MSMSVR_CODEC_TYPE = "NONE"
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_MSMSVR_CODEC_TYPE', 'FFMPEG', '-D_USE_FFMPEG', '', d)}"
+
+#是否使用新的信号强度命令
+CONFIG_USE_NEW_SIGNAL_STRENGTH = "yes"
+
+# app and libs 配置
+#normal的版本应用及库
+zxic_lib += "\
+	libnvram \
+	libatchn \
+	libsofttimer \
+	libzxic-pbm \
+	libsoftap \
+	libatutils \
+	libsqlite \
+	libscipc \
+	libsctel \
+	libbsp \
+	libtinyalsa\
+	libvoice \
+	libmedia \
+	libdebug-info \	
+	libmtd \
+	libsclog \
+	libupi-ab \
+	libbinder \
+	libflags \
+	libmsmsvr \
+	libscrtc \
+        liblynq-uci \
+        liblynq-shm \
+        liblynq-log \
+        libapn \
+        libpal \
+        libvendor-ril \
+        liblynq-call \
+        liblynq-sim \
+        liblynq-network \
+        liblynq-sms \
+        liblynq-data \
+        liblynq-qser-voice \
+        liblynq-qser-sim \
+        liblynq-qser-sms \
+        liblynq-qser-thermal \
+        liblynq-qser-data \
+        liblynq-qser-network \
+        liblynq-qser-gnss \
+        liblynq-qser-fota \
+        liblynq-qser-audio \
+        liblynq-qser-usb \
+        liblynq-qser-wifi \
+        libpoweralarm \
+        liblynq-systime \
+        liblynq-autosuspend \
+        liblynq-qser-autosuspend \
+        liblynq-at-factory \
+        liblynq-gpio \
+        liblynq-irq \
+        liblynq-at-common \
+        liblynq-led \
+        liblynq-adc \
+        liblynq-monitor \
+	"
+
+zxic_lib += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'libril', 'libtelsvr', d)}"
+zxic_lib += "${@bb.utils.contains('CONFIG_VB_TRANSMIT_INTF', 'RTP', 'librtp', '', d)}"
+#zxic自研应用	
+zxic_app_open += "\
+	nvserver cfg-tool adb ab-bootinfo \
+	at-ctl \
+	atchn-test \
+	zxic-mainctrl \
+	zxic-mmi \
+	zxic-script \
+	zxic-hotplug \
+	zxic-ramdump \
+	sntp \
+	zxic-ipv6-slaac \
+	zxic-ipv6-addr-conver \
+	zxic-ndp \
+	rtc-service \
+	dhcp6 \
+	fscheck \
+	nv-rpc-daemon \
+	zlog-agent \
+	cc-demo \
+	sim-demo \
+	sms-demo \
+	socket-demo \
+	i2ctest \
+	spitest \
+	uarttest \
+	bsp-test \
+	zxic-debug \
+	crc \
+	crc-api \
+	voiceipc-mainctrl \
+	voice-demo \
+	fsmonitor \
+	ethtest \
+	sc-at-test \
+	dialtest \
+	sc-nw-mgr-test \
+	sc-cfg-test \
+	sc-softtimer-test \
+	sc-log-test \
+	sc-shm-test \
+	sc-msg-test \
+	adctest \
+	rtc-timer-demo \
+	tsctest \
+	fota-upi-ab \
+	sc-net-test \	
+	usbtest \
+  	zxic-amt \
+	wlan-proxy \
+	wifi-demo \
+	mnet-whitelist \
+	mnet-whitelist-proxy \
+	flags-tool \
+	msm-svr \
+	phymiitest \
+	player-demo \
+	servicemanager \
+	service \
+	service-test \
+	i2cslavetest \
+	fota-auto-sync \
+	softap-demo \
+	lynq-ril-service \
+	lynq-sdk-ready \
+        lynq-led-demo \
+        lynq-led-sev \
+        uci \
+        gdb \
+        mobiletek-tester-rdit \
+        lynq-qser-voice-demo \
+        lynq-qser-fota-demo \
+        lynq-qser-gnss-demo \
+        lynq-qser-network-demo \
+        poweralarm-demo \
+        lynq-systime-demo \
+        lynq-fota-backup \
+        lynq-qser-sim-demo \
+        lynq-qser-sms-demo \
+        lynq-qser-data-demo \
+        lynq-qser-thermal-demo \
+        lynq-autosuspend \
+	lynq-atcid \
+        lynq-qser-autosuspend-demo \
+        lynq-gpio-demo \
+        lynq-irq-demo \
+        lynq-gnss-update \
+        lynq-audio-demo \
+        lynq-usb-demo \
+        lynq-wifi-demo \
+        lynq-adc-demo \
+        lynq-at-test \
+        lynq-monitor-demo \
+        "
+
+zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'rild', '', d)}"
+zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'BL', 'tel-svr', '', d)}"
+
+#开源应用及库	
+meta_app_open += "\
+	dropbear \
+	dbus \
+	e2fsprogs \
+	iptables \
+	curl \
+	dnsmasq \	
+	dhcp6 \
+	radvd \
+	iproute2 \
+	busybox-syslog \
+	ethtool \
+	sqlcipher \
+	iperf3 \
+	tcpdump \
+	python3 \
+	openssl-bin \
+	mtd-utils-ubifs \
+	${@bb.utils.contains('DISTRO_FEATURES', 'dm-verity', 'cryptsetup', '', d)} \
+	${meta_optee} \
+	tzdata \
+	fdk-aac-master \
+	opencore-amr \
+	vo-amrwbenc \
+	ffmpeg \
+	python3 \
+	lrzsz \
+	"
+meta_app_open += "${@bb.utils.contains('CONFIG_MSMSVR_CODEC_TYPE', 'FFMPEG', 'fdk-aac-master opencore-amr vo-amrwbenc ffmpeg', '', d)}"
+
+#normal的版本应用及库
+zxic_app += "\
+	${zxic_lib}	\
+	${zxic_app_open} \
+	${meta_app_open} \
+	"
+
+#zxic自研recovery版本的应用
+zxic_app_open_recovery += "\
+	"
+#recovery版本的开源应用及库
+meta_app_open_recovery += "\
+	"
+#recovery的版本应用及库
+zxic_app_recovery += "\
+	${zxic_app_open_recovery} \
+	${meta_app_open_recovery} "
+
+IMAGE_INSTALL +="\
+	${@bb.utils.contains("BOOT_CTL", "recovery", "${zxic_app_recovery}", "${zxic_app}", d)} \ 
+	"
+
+PACKAGE_EXCLUDE = "eudev eudev-dev eudev-dbg"
+PACKAGE_EXCLUDE = "eudev"
+
+#DISTRO   = "lynq_vehicle_dc"
+#DISTRO_NAME   = "lynq distro vehicle_dc"
+RAT_CONFIG_C2K_SUPPORT = "no"
+MTK_MULTI_SIM_SUPPORT = "dsds" 
+TARGET_PLATFORM = "T106"
+MTK_LED_SUPPORT = "yes"
+#support lynq_atsvc [hong.liu add for lynq atsvc on 2022.12.1]
+LYNQ_ATSVC_SUPPORT = "yes"
+
+#GPIO_CFG value:"PLATFORM" , "GENVICT" ,"GSW"
+MOBILETEK_GPIO_CFG = "PLATFORM"
+
+#PLL_CFG value:"PLATFORM","GSW"
+MOBILETEK_PLL_CFG = "PLATFORM"
+
+#RTP_CFG value:"PLATFORM","GSW"
+MOBILETEK_RTP_CFG = "PLATFORM"
+
+#MEDIA_CFG value:"PLATFORM","GSW"
+MOBILETEK_MEDIA_CFG = "PLATFORM"
+
+#LOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_LOG_CFG = "PLATFORM"
+
+#FOTA_CFG value:"PLATFORM","GSW"
+MOBILETEK_FOTA_CFG = "PLATFORM"
+
+#RIL_CFG value:"PLATFORM","GSW"
+MOBILETEK_RIL_CFG = "PLATFORM"
+
+#UART_CFG value:"PLATFORM","GSW"
+MOBILETEK_UART_CFG = "PLATFORM"
+
+#USB_CFG value:"PLATFORM","GSW"
+MOBILETEK_USB_CFG = "PLATFORM"
+
+#ndis_CFG value:"PLATFORM","GSW"
+MOBILETEK_NDIS_CFG = "PLATFORM"
+
+#SUSPEND_CFG value:"PLATFORM","GSW"
+MOBILETEK_SUSPEND_CFG = "PLATFORM"
+
+#MNLDLOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_MNLDLOG_CFG = "PLATFORM"
+
+#OPTEE_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPTEE_CFG = "PLATFORM"
+
+#EMMC_CFG value:"PLATFORM","GSW"
+MOBILETEK_EMMC_CFG = "PLATFORM"
+
+#WIFIKERNELCODE_CFG value:"PLATFORM","GSW"
+MOBILETEK_WIFIKERNELCODE_CFG = "PLATFORM"
+
+#SYSTEMD_CFG value:"PLATFORM","GSW"
+MOBILETEK_SYSTEMD_CFG = "PLATFORM"
+
+#GSTREAMER_CFG value:"PLATFORM","GSW"
+MOBILETEK_GSTREAMER_CFG = "PLATFORM"
+
+#BUSYBOX_CFG value:"PLATFORM","GSW"
+MOBILETEK_BUSYBOX_CFG = "PLATFORM"
+
+#OPENSSH_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPENSSH_CFG = "PLATFORM"
+
+#OEMAPP_CFG value:"PLATFORM","GSW"
+MOBILETEK_OEMAPP_CFG = "PLATFORM"
+
+#cz.li@20240221 add for choosing GNSS's chip: "HD","HX"
+MOBILETEK_GNSS_TYPE = "HD"
+
+#MOBILETEK_ADB_LOGIN value:"YES","NO"
+MOBILETEK_ADB_LOGIN = "NO"
+
+#cz.li@20240221 add for MOBILETEK_GNSS_UPDATE_ENABLE value: "yes","no"
+MOBILETEK_GNSS_UPDATE_ENABLE = "yes"
+
+#xf.li@20240716 add for MOBILETEK_LOG_ENCRYPT value: "enable","disable"
+MOBILETEK_LOG_ENCRYPT = "disable"
+
+LYNQ_CONFIG_COMMITID = "e2a3410390ff0ad762462ccb6af8faa5e16dcd61"
+LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
+LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/conf/lynq_base.conf b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
new file mode 100755
index 0000000..8126a9e
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
@@ -0,0 +1,72 @@
+#DISTRO   = "lynq_vehicle_dc"
+#DISTRO_NAME   = "lynq distro vehicle_dc"
+RAT_CONFIG_C2K_SUPPORT = "no"
+MTK_MULTI_SIM_SUPPORT = "dsds" 
+TARGET_PLATFORM = "T106"
+MTK_LED_SUPPORT = "yes"
+#support lynq_atsvc [hong.liu add for lynq atsvc on 2022.12.1]
+LYNQ_ATSVC_SUPPORT = "yes"
+
+#GPIO_CFG value:"PLATFORM" , "GENVICT" ,"GSW"
+MOBILETEK_GPIO_CFG = "PLATFORM"
+
+#PLL_CFG value:"PLATFORM","GSW"
+MOBILETEK_PLL_CFG = "PLATFORM"
+
+#RTP_CFG value:"PLATFORM","GSW"
+MOBILETEK_RTP_CFG = "PLATFORM"
+
+#MEDIA_CFG value:"PLATFORM","GSW"
+MOBILETEK_MEDIA_CFG = "PLATFORM"
+
+#LOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_LOG_CFG = "PLATFORM"
+
+#FOTA_CFG value:"PLATFORM","GSW"
+MOBILETEK_FOTA_CFG = "PLATFORM"
+
+#RIL_CFG value:"PLATFORM","GSW"
+MOBILETEK_RIL_CFG = "PLATFORM"
+
+#UART_CFG value:"PLATFORM","GSW"
+MOBILETEK_UART_CFG = "PLATFORM"
+
+#USB_CFG value:"PLATFORM","GSW"
+MOBILETEK_USB_CFG = "PLATFORM"
+
+#ndis_CFG value:"PLATFORM","GSW"
+MOBILETEK_NDIS_CFG = "PLATFORM"
+
+#SUSPEND_CFG value:"PLATFORM","GSW"
+MOBILETEK_SUSPEND_CFG = "PLATFORM"
+
+#MNLDLOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_MNLDLOG_CFG = "PLATFORM"
+
+#OPTEE_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPTEE_CFG = "PLATFORM"
+
+#EMMC_CFG value:"PLATFORM","GSW"
+MOBILETEK_EMMC_CFG = "PLATFORM"
+
+#WIFIKERNELCODE_CFG value:"PLATFORM","GSW"
+MOBILETEK_WIFIKERNELCODE_CFG = "PLATFORM"
+
+#SYSTEMD_CFG value:"PLATFORM","GSW"
+MOBILETEK_SYSTEMD_CFG = "PLATFORM"
+
+#GSTREAMER_CFG value:"PLATFORM","GSW"
+MOBILETEK_GSTREAMER_CFG = "PLATFORM"
+
+#BUSYBOX_CFG value:"PLATFORM","GSW"
+MOBILETEK_BUSYBOX_CFG = "PLATFORM"
+
+#OPENSSH_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPENSSH_CFG = "PLATFORM"
+
+#OEMAPP_CFG value:"PLATFORM","GSW"
+MOBILETEK_OEMAPP_CFG = "PLATFORM"
+
+LYNQ_CONFIG_COMMITID = "db2a7e1b3aa519b00153f78dcb223c2eb539f891"
+LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
+LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.09_CAP.17.09.01"
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
new file mode 100755
index 0000000..287b0ba
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
@@ -0,0 +1,64 @@
+#inherit externalsrc package
+
+DESCRIPTION = "liblynq-qser-gnss"
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3f86c7f456a6d0bbeca155e65084eee1"
+DEPENDS += "liblynq-log libxml2 liblynq-uci libsctel libscrtc libbsp liblynq-qser-autosuspend"
+#inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-qser-gnss/"
+FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/lib/:"
+SRC_URI = " \
+          file://liblynq-qser-gnss\
+          "
+
+SRC-DIR = "${S}/../liblynq-qser-gnss"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
+
+EXTRA_OEMAKE += "'MOBILETEK_GNSS_TYPE = ${MOBILETEK_GNSS_TYPE}'"
+
+EXTRA_OEMAKE += "'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
+
+FILES_${PN} += "${bindir} /data/gnss_update"
+FILES_${PN} += "${base_libdir}/*.so "
+FILES_${PN}-dev = "/test \
+                   ${includedir}"
+
+FILES_${PN}-doc = "/doc"
+
+FILES_${PN}-dbg ="${base_bindir}/.debug \
+                  ${base_libdir}/.debug \
+                  ${base_sbindir}/.debug"
+
+INSANE_SKIP_${PN} += "already-stripped"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+        oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"
+}
+
+do_install () {
+    oe_runmake install -C ${SRC-DIR} ROOT=${D}
+
+    if [ -d "${WORKONSRC}" ] ; then
+        install -d ${D}${includedir}/
+        cp -raf ${SRC-DIR}/include/lynq_qser_gnss.h ${D}${includedir}/
+    fi
+    if [ "${MOBILETEK_GNSS_UPDATE_ENABLE}" = "yes" ]; then
+        install -d ${D}/data/gnss_update
+        install -m 644 ${WORKONSRC}HD8122.YF.GN3.115200.10038.c8069.53ef0.231110R2.GALQS.PPS9.CFG.EPHSave.bin ${D}/data/gnss_update
+        install -m 644 ${WORKONSRC}HD8122.YIKE.GN3.115200.0041.a8fb4.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240912R1.bin ${D}/data/gnss_update
+        install -m 644 ${WORKONSRC}agps.conf ${D}/data/gnss_update
+        ln -sf ./HD8122.YF.GN3.115200.10038.c8069.53ef0.231110R2.GALQS.PPS9.CFG.EPHSave.bin ${D}/data/gnss_update/HD.bin
+        ln -sf ./HD8122.YIKE.GN3.115200.0041.a8fb4.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240912R1.bin ${D}/data/gnss_update/HD_BD.bin
+    fi
+}
+
+addtask bachclean
+do_bachclean () {
+    oe_runmake clean
+}
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
new file mode 100755
index 0000000..2d45d7d
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
@@ -0,0 +1,636 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <sys/types.h>
+//#include <pthread.h>
+#include <unistd.h>
+#include "lynq_qser_network.h"
+
+#ifndef LOG_TAG
+#define LOG_TAG "QSER_NETWORK_DEMO"
+#endif
+
+void *handle_network;
+
+int (*qser_nw_client_init_p)(nw_client_handle_type  * ph_nw);
+int (*qser_nw_client_deinit_p)(nw_client_handle_type h_nw);
+int (*qser_nw_set_config_p)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info);
+int (*qser_nw_get_config_p)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info);
+int (*qser_nw_get_operator_name_p)(nw_client_handle_type    h_nw, QSER_NW_OPERATOR_NAME_INFO_T    *pt_info );
+int (*qser_nw_get_reg_status_p)(nw_client_handle_type  h_nw, QSER_NW_REG_STATUS_INFO_T *pt_info);
+int (*qser_nw_add_rx_msg_handler_p)(nw_client_handle_type  h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr,void* contextPtr);
+int (*qser_nw_get_signal_strength_p)(nw_client_handle_type h_nw,QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info);
+int (*qser_nw_set_oos_config_p)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info);
+int (*qser_nw_get_oos_config_p)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info);
+int (*qser_nw_set_rf_mode_p) (nw_client_handle_type   h_nw,E_QSER_NW_RF_MODE_TYPE_T rf_mode);
+int (*qser_nw_get_rf_mode_p) (nw_client_handle_type   h_nw,E_QSER_NW_RF_MODE_TYPE_T* rf_mode);
+int (*qser_nw_set_ims_enable_p) (nw_client_handle_type h_nw,E_QSER_NW_IMS_MODE_TYPE_T ims_mode);
+int (*qser_nw_get_ims_reg_status_p) (nw_client_handle_type h_nw, QSER_NW_IMS_REG_STATUS_INFO_T *pt_info);
+
+
+
+int getFunc()
+{
+    const char *lynq_libpath_network = "/lib/liblynq-qser-network.so";
+
+    handle_network = dlopen(lynq_libpath_network,RTLD_NOW);
+    if(NULL == handle_network)
+    {
+        printf("dlopen lynq_libpath_network fail:%s",dlerror());
+        exit(EXIT_FAILURE);
+    }
+
+    qser_nw_client_init_p = (int (*)(nw_client_handle_type  * ph_nw))dlsym(handle_network,"qser_nw_client_init");    
+    qser_nw_client_deinit_p = (int (*)(nw_client_handle_type h_nw))dlsym(handle_network,"qser_nw_client_deinit");
+    qser_nw_set_config_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_set_config");
+    qser_nw_get_config_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_config");
+    qser_nw_get_operator_name_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_OPERATOR_NAME_INFO_T  *pt_info ))dlsym(handle_network,"qser_nw_get_operator_name");
+    qser_nw_get_reg_status_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_REG_STATUS_INFO_T  *pt_info))dlsym(handle_network,"qser_nw_get_reg_status");
+    qser_nw_get_signal_strength_p = (int (*)(nw_client_handle_type h_nw, QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_signal_strength");
+    qser_nw_add_rx_msg_handler_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr,void* contextPtr))dlsym(handle_network,"qser_nw_add_rx_msg_handler");
+    qser_nw_get_oos_config_p = (int (*)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_oos_config");
+    qser_nw_set_oos_config_p = (int (*)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_set_oos_config");
+    qser_nw_set_rf_mode_p = (int (*)(nw_client_handle_type   h_nw, E_QSER_NW_RF_MODE_TYPE_T rf_mode))dlsym(handle_network,"qser_nw_set_rf_mode");
+    qser_nw_get_rf_mode_p = (int (*)(nw_client_handle_type   h_nw, E_QSER_NW_RF_MODE_TYPE_T* rf_mode))dlsym(handle_network,"qser_nw_get_rf_mode");
+    qser_nw_set_ims_enable_p = (int (*)(nw_client_handle_type  h_nw, E_QSER_NW_IMS_MODE_TYPE_T ims_mode))dlsym(handle_network,"qser_nw_set_ims_enable");
+    qser_nw_get_ims_reg_status_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_IMS_REG_STATUS_INFO_T  *pt_info))dlsym(handle_network,"qser_nw_get_ims_reg_status");
+        
+    if(qser_nw_client_deinit_p==NULL || qser_nw_client_init_p==NULL || qser_nw_set_config_p ==NULL || qser_nw_get_config_p ==NULL ||
+       qser_nw_get_operator_name_p == NULL || qser_nw_get_reg_status_p ==NULL || qser_nw_add_rx_msg_handler_p==NULL ||
+       qser_nw_set_rf_mode_p == NULL || qser_nw_get_rf_mode_p == NULL || qser_nw_get_oos_config_p == NULL || qser_nw_set_oos_config_p == NULL || 
+       qser_nw_set_ims_enable_p == NULL || qser_nw_get_ims_reg_status_p == NULL)
+    {
+        printf("get func pointer null");
+        exit(EXIT_FAILURE);
+    }    
+    return  0;    
+}
+
+static int test_nw(void);
+
+int main(int argc, char const *argv[])
+{
+    printf("--------->[%s,%d] start \n",__FUNCTION__,__LINE__);   
+    
+    if(getFunc()==0)
+    {
+        test_nw();
+    }    
+
+    return 0;
+}
+
+typedef struct
+{
+    int  cmdIdx;
+    char *funcName;
+} st_api_test_case;
+
+st_api_test_case at_nw_testlist[] = 
+{
+    {0,     "qser_nw_client_init"},
+    {1,     "qser_nw_set_config"},      
+    {2,     "qser_nw_get_operator_name"},
+    {3,     "qser_nw_get_reg_status"},        
+    {4,     "qser_nw_add_rx_msg_handler"},     
+    {5,     "qser_nw_get_signal_strength"},
+    {6,     "qser_nw_set_oos_config"},
+    {7,     "qser_nw_get_oos_config"},
+    {8,     "qser_nw_set_rf_mode"},
+    {9,     "qser_nw_get_rf_mode"},
+    {10,     "qser_nw_set_ims_enable"},
+    {11,     "qser_nw_get_ims_reg_status"},
+    {12,     "qser_nw_get_config"}, 
+    {13,     "qser_nw_client_deinit"},      
+    {-1,    "quit"}
+};
+
+typedef int (*TEST)(void);
+
+typedef struct
+{
+    char                *group_name;
+    st_api_test_case    *test_cases;
+    TEST                pf_test;
+} func_api_test_t;
+
+func_api_test_t t_nw_test = {"nw", at_nw_testlist, test_nw};
+
+void show_group_help(func_api_test_t *pt_test)
+{
+    int i;
+
+    printf("Group Name:%s, Supported test cases:\n", pt_test->group_name);
+    for(i = 0; ; i++)
+    {
+        if(pt_test->test_cases[i].cmdIdx == -1)
+        {
+            break;
+        }
+        printf("%d:\t%s\n", pt_test->test_cases[i].cmdIdx, pt_test->test_cases[i].funcName);
+    }
+}
+
+static nw_client_handle_type h_nw = 0;
+
+char *tech_domain[] = {"NONE", "3GPP", "3GPP2"};
+char *radio_tech[] = {"unknown", 
+    "TD_SCDMA", "GSM",      "HSPAP",    "LTE",      "EHRPD",    "EVDO_B", 
+    "HSPA",     "HSUPA",    "HSDPA",    "EVDO_A",   "EVDO_0",   "1xRTT", 
+    "IS95B",    "IS95A",    "UMTS",     "EDGE",     "GPRS",     "NONE"};
+
+void nw_event_ind_handler (
+    nw_client_handle_type h_nw, 
+    u_int32_t ind_flag, 
+    void                  *ind_msg_buf, 
+    u_int32_t              ind_msg_len, 
+    void                  *contextPtr)
+{
+    switch(ind_flag) {
+        case NW_IND_VOICE_REG_EVENT_IND_FLAG:
+            {
+                QSER_NW_VOICE_REG_EVENT_IND_T *ind = (QSER_NW_VOICE_REG_EVENT_IND_T*)ind_msg_buf;
+                printf("Recv event indication : VOICE REG EVENT\n");
+                
+                if(ind==NULL)
+                {
+                     printf("ind is NULL\n");
+                     break;
+                }
+
+                if(ind->registration_valid)
+                {
+                    printf("voice_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                            tech_domain[ind->registration.tech_domain], 
+                            radio_tech[ind->registration.radio_tech],
+                            ind->registration.roaming,
+                            ind->registration.registration_state);
+                }
+                if(ind->registration_details_3gpp_valid)
+                {
+                    printf("voice_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                            tech_domain[ind->registration_details_3gpp.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp.radio_tech],
+                            ind->registration_details_3gpp.mcc,
+                            ind->registration_details_3gpp.mnc,
+                            ind->registration_details_3gpp.roaming,
+                            ind->registration_details_3gpp.forbidden,                    
+                            ind->registration_details_3gpp.cid,
+                            ind->registration_details_3gpp.lac,
+                            ind->registration_details_3gpp.psc,
+                            ind->registration_details_3gpp.tac);
+                }
+
+                if(ind->registration_details_3gpp2_valid)
+                {
+                    printf("voice_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
+                            tech_domain[ind->registration_details_3gpp2.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp2.radio_tech],
+                            ind->registration_details_3gpp2.mcc,
+                            ind->registration_details_3gpp2.mnc,
+                            ind->registration_details_3gpp2.roaming,
+                            ind->registration_details_3gpp2.forbidden,                    
+                            ind->registration_details_3gpp2.sid,
+                            ind->registration_details_3gpp2.nid,
+                            ind->registration_details_3gpp2.bsid);
+                }
+
+                break;
+            }
+        case NW_IND_DATA_REG_EVENT_IND_FLAG:
+            {
+                QSER_NW_DATA_REG_EVENT_IND_T *ind = (QSER_NW_DATA_REG_EVENT_IND_T*)ind_msg_buf;
+
+                printf("Recv event indication : DATA REG EVENT\n");
+                
+                if(ind==NULL)
+                {
+                     printf("ind is NULL\n");
+                     break;
+                }
+              
+
+                if(ind->registration_valid)
+                {
+                    printf("data_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                            tech_domain[ind->registration.tech_domain], 
+                            radio_tech[ind->registration.radio_tech],
+                            ind->registration.roaming,
+                            ind->registration.registration_state);
+                }
+                if(ind->registration_details_3gpp_valid)
+                {
+                    printf("data_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                            tech_domain[ind->registration_details_3gpp.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp.radio_tech],
+                            ind->registration_details_3gpp.mcc,
+                            ind->registration_details_3gpp.mnc,
+                            ind->registration_details_3gpp.roaming,
+                            ind->registration_details_3gpp.forbidden,                    
+                            ind->registration_details_3gpp.cid,
+                            ind->registration_details_3gpp.lac,
+                            ind->registration_details_3gpp.psc,
+                            ind->registration_details_3gpp.tac);
+                }
+
+                if(ind->registration_details_3gpp2_valid)
+                {
+                    printf("data_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, prl=%d, css=%d, sid=%d, nid=%d, bsid=%d\n", 
+                            tech_domain[ind->registration_details_3gpp2.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp2.radio_tech],
+                            ind->registration_details_3gpp2.mcc,
+                            ind->registration_details_3gpp2.mnc,
+                            ind->registration_details_3gpp2.roaming,
+                            ind->registration_details_3gpp2.forbidden,   
+                            ind->registration_details_3gpp2.inPRL,
+                            ind->registration_details_3gpp2.css,
+                            ind->registration_details_3gpp2.sid,
+                            ind->registration_details_3gpp2.nid,
+                            ind->registration_details_3gpp2.bsid);
+                }
+
+                break;
+            }
+        case NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG:
+            {
+                QSER_NW_SINGNAL_EVENT_IND_T *ind = (QSER_NW_SINGNAL_EVENT_IND_T*)ind_msg_buf;
+
+                printf("Recv event indication : SIGNAL STRENGTH EVENT\n");
+                
+                if(ind==NULL)
+                {
+                     printf("ind is NULL\n");
+                     break;
+                }
+
+                if(ind->gsm_sig_info_valid)
+                {
+                    printf("gsm_sig_info: rssi=%d\n", 
+                            ind->gsm_sig_info.rssi);
+                } 
+
+                if(ind->wcdma_sig_info_valid)
+                {
+                    printf("wcdma_sig_info: rssi=%d, ecio=%d\n", 
+                            ind->wcdma_sig_info.rssi, 
+                            ind->wcdma_sig_info.ecio);
+                } 
+                if(ind->tdscdma_sig_info_valid)
+                {
+                    printf("tdscdma_sig_info: rssi=%d, rscp=%d, ecio=%d, sinr=%d\n", 
+                            ind->tdscdma_sig_info.rssi, 
+                            ind->tdscdma_sig_info.rscp,
+                            ind->tdscdma_sig_info.ecio,
+                            ind->tdscdma_sig_info.sinr);
+                } 
+                if(ind->lte_sig_info_valid)
+                {
+                    printf("lte_sig_info: rssi=%d, rsrq=%d, rsrp=%d, snr=%d\n", 
+                            ind->lte_sig_info.rssi, 
+                            ind->lte_sig_info.rsrq,
+                            ind->lte_sig_info.rsrp,
+                            ind->lte_sig_info.snr);
+                } 
+                if(ind->cdma_sig_info_valid)
+                {
+                    printf("cdma_sig_info: rssi=%d, ecio=%d\n", 
+                            ind->cdma_sig_info.rssi, 
+                            ind->cdma_sig_info.ecio);
+                } 
+                if(ind->hdr_sig_info_valid)
+                {
+                    printf("hdr_sig_info: rssi=%d, ecio=%d, sinr=%d, io=%d\n", 
+                            ind->hdr_sig_info.rssi, 
+                            ind->hdr_sig_info.ecio,
+                            ind->hdr_sig_info.sinr,
+                            ind->hdr_sig_info.io);
+                }
+                break;
+            }
+        case NW_IND_IMS_REG_EVENT_IND_FLAG:
+            {
+                printf("Recv event indication : IMS REG EVENT\n");               
+                
+                break;
+            }
+        default:
+            break;
+    }
+}
+
+static int test_nw(void)
+{
+    int    cmdIdx  = 0;
+    int    ret     = 0;       
+        
+    while(1)
+    {
+        show_group_help(&t_nw_test);
+        printf("please input cmd index(-1 exit): ");
+        ret = scanf("%d", &cmdIdx);
+        if(ret != 1)
+        {
+            char c;
+            while(((c=getchar()) != '\n') && (c != EOF))
+            {
+                ;
+            }
+            continue;
+        }
+        if(cmdIdx == -1)
+        {
+            break;
+        }
+        switch(cmdIdx)
+        {
+             case 0://"qser_nw_client_init"
+             {
+                 
+                 ret = qser_nw_client_init_p(&h_nw);
+                 printf("qser_nw_client_init ret = %d\n", ret);
+                 break;
+             }
+             case 1://"qser_nw_set_config"
+             {
+                 QSER_NW_CONFIG_INFO_T     t_info = {0};
+                 
+                 int mask = 0;
+                 printf("please input decimal format number,  whose hex format is (TDSCDMA | LTE | EVDO | CDMA | WCDMA | GSM) : \n");
+                 scanf("%d", &mask);
+                 t_info.preferred_nw_mode = mask;
+                 
+                 ret = qser_nw_set_config_p(h_nw, &t_info);
+                 printf("qser_nw_set_config ret = %d\n", ret);
+                 break;
+             }            
+             case 2://"qser_nw_get_operator_name"
+             {
+                 QSER_NW_OPERATOR_NAME_INFO_T  t_info;
+                 ret = qser_nw_get_operator_name_p(h_nw, &t_info);
+                 printf("qser_nw_get_operator_name ret = %d, long_eons=%s, short_eons=%s, mcc=%s, mnc=%s\n", ret,
+                         t_info.long_eons, t_info.short_eons, t_info.mcc, t_info.mnc);
+                 break;
+             }       
+             case 3://"qser_nw_get_reg_status"
+             {
+                 QSER_NW_REG_STATUS_INFO_T         t_info;
+     
+                 memset(&t_info, 0, sizeof(QSER_NW_REG_STATUS_INFO_T));
+                 ret = qser_nw_get_reg_status_p(h_nw, &t_info);
+                 printf("qser_nw_get_reg_status ret = %d, detail info:\n", ret);
+                 if(t_info.voice_registration_valid)
+                 {
+                     printf("voice_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                         tech_domain[t_info.voice_registration.tech_domain], 
+                         radio_tech[t_info.voice_registration.radio_tech],
+                         t_info.voice_registration.roaming,
+                         t_info.voice_registration.registration_state);
+                 }
+                 if(t_info.data_registration_valid)
+                 {
+                     printf("data_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                         tech_domain[t_info.data_registration.tech_domain], 
+                         radio_tech[t_info.data_registration.radio_tech],
+                         t_info.data_registration.roaming,
+                         t_info.data_registration.registration_state);
+                 }
+                 if(t_info.voice_registration_details_3gpp_valid)
+                 {
+                     printf("voice_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                         tech_domain[t_info.voice_registration_details_3gpp.tech_domain], 
+                         radio_tech[t_info.voice_registration_details_3gpp.radio_tech],
+                         t_info.voice_registration_details_3gpp.mcc,
+                         t_info.voice_registration_details_3gpp.mnc,
+                         t_info.voice_registration_details_3gpp.roaming,
+                         t_info.voice_registration_details_3gpp.forbidden,                    
+                         t_info.voice_registration_details_3gpp.cid,
+                         t_info.voice_registration_details_3gpp.lac,
+                         t_info.voice_registration_details_3gpp.psc,
+                         t_info.voice_registration_details_3gpp.tac);
+                 }
+                 if(t_info.data_registration_details_3gpp_valid)
+                 {
+                     printf("data_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                         tech_domain[t_info.data_registration_details_3gpp.tech_domain], 
+                         radio_tech[t_info.data_registration_details_3gpp.radio_tech],
+                         t_info.data_registration_details_3gpp.mcc,
+                         t_info.data_registration_details_3gpp.mnc,
+                         t_info.data_registration_details_3gpp.roaming,
+                         t_info.data_registration_details_3gpp.forbidden,                    
+                         t_info.data_registration_details_3gpp.cid,
+                         t_info.data_registration_details_3gpp.lac,
+                         t_info.data_registration_details_3gpp.psc,
+                         t_info.data_registration_details_3gpp.tac);
+                 }
+                 
+                 if(t_info.voice_registration_details_3gpp2_valid)
+                 {
+                     printf("voice_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
+                         tech_domain[t_info.voice_registration_details_3gpp2.tech_domain], 
+                         radio_tech[t_info.voice_registration_details_3gpp2.radio_tech],
+                         t_info.voice_registration_details_3gpp2.mcc,
+                         t_info.voice_registration_details_3gpp2.mnc,
+                         t_info.voice_registration_details_3gpp2.roaming,
+                         t_info.voice_registration_details_3gpp2.forbidden,                    
+                         t_info.voice_registration_details_3gpp2.sid,
+                         t_info.voice_registration_details_3gpp2.nid,
+                         t_info.voice_registration_details_3gpp2.bsid);
+                 }
+                 
+                 if(t_info.data_registration_details_3gpp2_valid)
+                 {
+                     printf("data_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
+                         tech_domain[t_info.data_registration_details_3gpp2.tech_domain], 
+                         radio_tech[t_info.data_registration_details_3gpp2.radio_tech],
+                         t_info.data_registration_details_3gpp2.mcc,
+                         t_info.data_registration_details_3gpp2.mnc,
+                         t_info.data_registration_details_3gpp2.roaming,
+                         t_info.data_registration_details_3gpp2.forbidden,                    
+                         t_info.data_registration_details_3gpp2.sid,
+                         t_info.data_registration_details_3gpp2.nid,
+                         t_info.data_registration_details_3gpp2.bsid);
+                 }
+                             
+                 break;
+             }                 
+             case 13://"qser_nw_client_deinit"
+             {
+                 ret = qser_nw_client_deinit_p(h_nw);
+                 printf("qser_nw_client_deinit ret = %d\n", ret);
+                 break;
+             }       
+             case 4 :
+             {
+                ret = qser_nw_add_rx_msg_handler_p(h_nw, nw_event_ind_handler, NULL);  
+                printf("qser_nw_add_rx_msg_handler, ret=%d\n", ret);
+                break;
+             }
+              case 5 :
+             {
+                QSER_NW_SIGNAL_STRENGTH_INFO_T t_info;
+                ret = qser_nw_get_signal_strength_p(h_nw, &t_info);  
+                printf("qser_nw_get_signal_strength, ret=%d\n", ret);
+                if(ret==0)
+                {                       
+                    printf("qser_solicited_signal_strength gsm_sig_info_valid = %d\n"
+                               "                               gsm_sig_info.rssi = %d\n"
+                               "                               wcdma     _sig_info_valid = %d\n" 
+                               "                               wcdma_sig_info.rssi = %d\n"
+                               "                               wcdma_sig_info.ecio = %d\n"
+                               "                               tdscdma_sig_info_valid = %d\n"
+                               "                               lte_sig_info_valid = %d\n"
+                               "                               lte_sig_info.rssi = %d\n"
+                               "                               lte_sig_info.rsrp = %d\n"
+                               "                               lte_sig_info.rsrq = %d\n"
+                               "                               lte_sig_info.snr = %d\n"
+                               "                               cdma_sig_info_valid = %d\n"
+                               "                               hdr_sig_info_valid = %d\n"
+                               "                               nr_sig_info_valid = %d\n"
+                               "                               nr_sig_info.ssRsrp = %d\n"
+                               "                               nr_sig_info.ssRsrq = %d\n"
+                               "                               nr_sig_info.ssSinr = %d\n"
+                               "                               nr_sig_info.csiRsrp = %d\n"
+                               "                               nr_sig_info.csiRsrq = %d\n"
+                               "                               nr_sig_info.csiSinr = %d\n",
+                              t_info.gsm_sig_info_valid, t_info.gsm_sig_info.rssi,
+                              t_info.wcdma_sig_info_valid, t_info.wcdma_sig_info.rssi,  t_info.wcdma_sig_info.ecio,
+                              t_info.tdscdma_sig_info_valid,
+                              t_info.lte_sig_info_valid, t_info.lte_sig_info.rssi, t_info.lte_sig_info.rsrp, t_info.lte_sig_info.rsrq, t_info.lte_sig_info.snr,
+                              t_info.cdma_sig_info_valid, 
+                              t_info.hdr_sig_info_valid, 
+                              t_info.nr_sig_info_valid, t_info.nr_sig_info.ssRsrp, t_info.nr_sig_info.ssRsrq, t_info.nr_sig_info.ssSinr,
+                              t_info.nr_sig_info.csiRsrp, t_info.nr_sig_info.csiRsrq, t_info.nr_sig_info.csiSinr);
+                        
+                }
+                break;
+             }        
+             case 7 :
+             {
+                QSER_NW_OOS_CONFIG_INFO_T t_info;
+                int type = 0;
+                printf("please input you want query oos config's type (0: fast network scan config; 1: full band network scan config ) : \n");
+                scanf("%d", &type);
+                t_info.type = type;
+                ret = qser_nw_get_oos_config_p(h_nw, &t_info);  
+                printf("qser_nw_get_oos_config, ret=%d\n", ret);
+                if(ret==0)
+                {         
+                    if(t_info.type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+                    {
+                        printf("qser_nw_get_oos_config         t_min = %d\n"
+                               "                               t_step = %d\n"
+                               "                               t_num = %d\n"
+                               "                               t_max = %d\n",
+                              t_info.u.full_band_scan_info.t_min, t_info.u.full_band_scan_info.t_step,                             
+                              t_info.u.full_band_scan_info.t_num, t_info.u.full_band_scan_info.t_max);
+                    }     
+                    else if(t_info.type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
+                    {
+                        printf("qser_nw_get_oos_config         enable = %d\n"
+                               "                               time_interval = %d\n",
+                              t_info.u.fast_can_info.enable, t_info.u.fast_can_info.time_interval); 
+                    }
+                    else
+                    {
+                        printf("qser_nw_get_oos_config tyep is %d, ret is ok",t_info.type);
+                    }
+    
+                }
+                break;
+             }         
+             case 6 :
+             {
+                QSER_NW_OOS_CONFIG_INFO_T t_info;
+                int type = 0;
+                printf("please input you want set oos config's type (0: fast network scan config; 1: full band network scan config ) : \n");
+                scanf("%d", &type);
+                t_info.type = type;
+                if(t_info.type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+                {
+                      printf("please input  t_min: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_min));
+                      printf("please input t_step: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_step));
+                      printf("please input  t_num: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_num));
+                      printf("please input t_max: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_max));
+                      ret = qser_nw_set_oos_config_p(h_nw, &t_info);  
+                      printf("qser_nw_get_oos_config, ret=%d\n", ret);                      
+                }
+                else if(t_info.type==QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
+                {
+                      printf("please input  enable: \n");
+                      scanf("%d", &(t_info.u.fast_can_info.enable));
+                      printf("please input time_interval: \n");
+                      scanf("%d", &(t_info.u.fast_can_info.time_interval));                      
+                      ret = qser_nw_set_oos_config_p(h_nw, &t_info);  
+                      printf("qser_nw_get_oos_config, ret=%d\n", ret);                    
+                }
+                else 
+                {
+                       ret = qser_nw_set_oos_config_p(h_nw, &t_info);  
+                       printf("qser_nw_get_oos_config, ret=%d\n", ret);            
+                }                
+                break;
+             }         
+             case 9://"qser_nw_get_rf_mode"
+             {
+                 E_QSER_NW_RF_MODE_TYPE_T  rf_mode;
+                 ret = qser_nw_get_rf_mode_p(h_nw, &rf_mode);
+                 printf("qser_nw_get_rf_mode ret = %d, rf mode=%d\n", ret, rf_mode);
+                 break;
+             }       
+             case 8://"qser_nw_set_rf_mode"
+             {
+                 E_QSER_NW_RF_MODE_TYPE_T  rf_mode;
+                 printf("please input you want set rf mode (0: cfun 0;  1: cfun 1; 4: flight mode \n");
+                 scanf("%d", &rf_mode);
+                 ret = qser_nw_set_rf_mode_p(h_nw, rf_mode);
+                 printf("qser_nw_set_rf_mode %d ret = %dn",rf_mode, ret);
+                 break;
+             }       
+             case 10://"qser_nw_set_ims_enable"
+             {
+                 E_QSER_NW_IMS_MODE_TYPE_T  ims_mode;
+                 printf("please input you want set ims mode (0: off;  1: volte enable \n");
+                 scanf("%d", &ims_mode);
+                 ret = qser_nw_set_ims_enable_p(h_nw, ims_mode);
+                 printf("qser_nw_set_ims_enable %d ret = %dn",ims_mode, ret);
+                 break;
+             }       
+             case 11://"qser_nw_get_ims_reg_status"
+             {
+                 QSER_NW_IMS_REG_STATUS_INFO_T         t_info;
+                 memset(&t_info, 0, sizeof(QSER_NW_IMS_REG_STATUS_INFO_T));
+                 ret = qser_nw_get_ims_reg_status_p(h_nw, &t_info);
+                 printf("qser_nw_get_ims_reg_status ret = %d, detail info:\n", ret);
+                 if(ret == 0)
+                 {
+                     printf("ims_registration: registration_state=%d\n",                          
+                         t_info.registration_state);
+                 }                
+                 break;
+             }          
+             case 12://"qser_nw_get_config"
+             {
+                 QSER_NW_CONFIG_INFO_T     t_info = {0};              
+                 ret = qser_nw_get_config_p(h_nw, &t_info);
+                 printf("qser_nw_get_config ret = %d\n, nw_mode is %llu", ret,t_info.preferred_nw_mode);
+                 break;
+             }            
+             default:
+             {
+                 show_group_help(&t_nw_test);
+             }
+        }
+    }
+    return 0;
+}
+
+
+
+
+
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
new file mode 100755
index 0000000..aee4285
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
@@ -0,0 +1,481 @@
+/**
+ *@file     QSER_nw.h
+ *@date     2018-02-22
+ *@author   
+ *@brief    
+ */   
+#ifndef __LYNQ_QSER_NETWORK_H__
+#define __LYNQ_QSER_NETWORK_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint32_t nw_client_handle_type;
+
+
+#define QSER_NW_MODE_NONE     0x00    /**<  No network. */
+#define QSER_NW_MODE_GSM      0x01    /**<  Include GSM networks. */
+#define QSER_NW_MODE_WCDMA    0x02    /**<  Include WCDMA networks. */
+#define QSER_NW_MODE_CDMA     0x04    /**<  Include CDMA networks. */
+#define QSER_NW_MODE_EVDO     0x08    /**<  Include EVDO networks. */
+#define QSER_NW_MODE_LTE      0x10    /**<  Include LTE networks. */
+#define QSER_NW_MODE_TDSCDMA  0x20    /**<  Include TDSCDMA networks. */
+
+typedef enum 
+{
+    E_QSER_NW_ROAM_STATE_OFF  = 0,    /**<  None, or roaming indicator off. */
+    E_QSER_NW_ROAM_STATE_ON   = 1     /**<  Roaming indicator on. */
+}E_QSER_NW_ROAM_STATE_TYPE_T;
+
+/** Configures the settings that define the MCM network interface. */
+typedef struct 
+{
+    /*  Configuration parameters for MCM network registration Network registration details Technology dependent network registration details */
+    uint64_t                        preferred_nw_mode;  /**<   Preferred network mode for connections; a bitmask of QSER_NW_MODE_xxxx.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming_pref;       /**<   Roaming preference.*/
+}QSER_NW_CONFIG_INFO_T;
+
+typedef enum 
+{
+    E_QSER_NW_IMS_MODE_OFF    = 0,     /**<  close ims. */
+    E_QSER_NW_IMS_MODE_VOLTE_ENABLE    = 1,  /**<  support volte. */
+}E_QSER_NW_IMS_MODE_TYPE_T;
+
+/** Configures the OOS (out of service)  settings that define the MCM network interface. */
+#define QSER_NW_OOS_CFG_TYPE_FAST_SCAN          0x00    /**<  fast net scan */
+#define QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN     0x01    /**<  full band scan */
+
+typedef struct 
+{
+    /*    Configuration parameters for MCM network fast network scan when OOS (out of service)*/
+    char                        enable;
+    uint16_t                    time_interval;
+}QSER_NW_OOS_CONFIG_FAST_SCAN_INFO_T;
+
+typedef struct 
+{
+    /*    Configuration parameters for MCM network full band network scan when OOS (out of service)*/
+    int t_min;
+    int t_step;
+    int t_num;
+    int t_max;
+}QSER_NW_OOS_CONFIG_FULL_BAND_SCAN_INFO_T;
+
+
+typedef struct 
+{    
+    char                        type;  /**<   QSER_NW_OOS_CFG_TYPE_xxxx.*/
+    union {
+    QSER_NW_OOS_CONFIG_FAST_SCAN_INFO_T  fast_can_info;       // 00
+    QSER_NW_OOS_CONFIG_FULL_BAND_SCAN_INFO_T full_band_scan_info;     // 01   
+  } u;
+}QSER_NW_OOS_CONFIG_INFO_T;
+
+//defined for QSER_NW_EventRegister
+#define     NW_IND_VOICE_REG_EVENT_IND_FLAG               (1 << 0)    /**< msg format : QSER_NW_VOICE_REG_EVENT_IND_T */
+#define     NW_IND_DATA_REG_EVENT_IND_FLAG                (1 << 1)    /**< msg format : QSER_NW_DATA_REG_EVENT_IND_T */ 
+#define     NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG         (1 << 2)    /**< msg format : QSER_NW_SINGNAL_EVENT_IND_T */ 
+//#define     NW_IND_CELL_ACCESS_STATE_CHG_EVENT_IND_FLAG   (1 << 3)    /**< msg format : QL_MCM_NW_CELL_ACCESS_STATE_EVENT_IND_T */ 
+//#define     NW_IND_NITZ_TIME_UPDATE_EVENT_IND_FLAG        (1 << 4)    /**< msg format : QL_MCM_NW_NITZ_TIME_EVENT_IND_T */ 
+#define     NW_IND_IMS_REG_EVENT_IND_FLAG                 (1 << 5)    /**< msg format : NULL */ 
+
+typedef struct 
+{
+    char long_eons[512 + 1];    /**<   Long EONS.*/
+    char short_eons[512 + 1];   /**<   Short EONS.*/
+    char mcc[3 + 1];            /**<   Mobile country code.*/
+    char mnc[3 + 1];            /**<   Mobile network code.*/
+}QSER_NW_OPERATOR_NAME_INFO_T;
+
+typedef enum 
+{
+    E_QSER_NW_RADIO_TECH_TD_SCDMA = 1,
+    E_QSER_NW_RADIO_TECH_GSM      = 2,    /**<  GSM; only supports voice. */
+    E_QSER_NW_RADIO_TECH_HSPAP    = 3,    /**<  HSPA+. */
+    E_QSER_NW_RADIO_TECH_LTE      = 4,    /**<  LTE. */
+    E_QSER_NW_RADIO_TECH_EHRPD    = 5,    /**<  EHRPD. */
+    E_QSER_NW_RADIO_TECH_EVDO_B   = 6,    /**<  EVDO B. */
+    E_QSER_NW_RADIO_TECH_HSPA     = 7,    /**<  HSPA. */
+    E_QSER_NW_RADIO_TECH_HSUPA    = 8,    /**<  HSUPA. */
+    E_QSER_NW_RADIO_TECH_HSDPA    = 9,    /**<  HSDPA. */
+    E_QSER_NW_RADIO_TECH_EVDO_A   = 10,   /**<  EVDO A. */
+    E_QSER_NW_RADIO_TECH_EVDO_0   = 11,   /**<  EVDO 0. */
+    E_QSER_NW_RADIO_TECH_1xRTT    = 12,   /**<  1xRTT. */
+    E_QSER_NW_RADIO_TECH_IS95B    = 13,   /**<  IS95B. */
+    E_QSER_NW_RADIO_TECH_IS95A    = 14,   /**<  IS95A. */
+    E_QSER_NW_RADIO_TECH_UMTS     = 15,   /**<  UMTS. */
+    E_QSER_NW_RADIO_TECH_EDGE     = 16,   /**<  EDGE. */
+    E_QSER_NW_RADIO_TECH_GPRS     = 17,   /**<  GPRS. */
+    E_QSER_NW_RADIO_TECH_NONE     = 18    /**<  No technology selected. */
+}E_QSER_NW_RADIO_TECH_TYPE_T;
+
+
+typedef enum 
+{
+    E_QSER_NW_TECH_DOMAIN_NONE    = 0,    /**<  None. */
+    E_QSER_NW_TECH_DOMAIN_3GPP    = 1,    /**<  3GPP. */
+    E_QSER_NW_TECH_DOMAIN_3GPP2   = 2,    /**<  3GPP2. */
+}E_QSER_NW_TECH_DOMAIN_TYPE_T;
+
+typedef enum 
+{
+    E_QSER_NW_IMSI_UNKNOWN_HLR_DENY_REASON                    = 1, /**<  IMSI unknown in HLR. */
+    E_QSER_NW_ILLEGAL_MS_DENY_REASON                          = 2, /**<  Illegal MS. */
+    E_QSER_NW_IMSI_UNKNOWN_VLR_DENY_REASON                    = 3, /**<  IMSI unknown in VLR. */
+    E_QSER_NW_IMEI_NOT_ACCEPTED_DENY_REASON                   = 4, /**<  IMEI not accepted. */
+    E_QSER_NW_ILLEGAL_ME_DENY_REASON                          = 5, /**<  Illegal ME. */
+    E_QSER_NW_PLMN_NOT_ALLOWED_DENY_REASON                    = 6, /**<  PLMN not allowed. */
+    E_QSER_NW_LA_NOT_ALLOWED_DENY_REASON                      = 7, /**<  Location area not allowed. */
+    E_QSER_NW_ROAMING_NOT_ALLOWED_LA_DENY_REASON              = 8, /**<  Roaming not allowed in this location area. */
+    E_QSER_NW_NO_SUITABLE_CELLS_LA_DENY_REASON                = 9, /**<  No suitable cells in location area. */
+    E_QSER_NW_NETWORK_FAILURE_DENY_REASON                     = 10, /**<  Network failure. */
+    E_QSER_NW_MAC_FAILURE_DENY_REASON                         = 11, /**<  MAC failure. */
+    E_QSER_NW_SYNCH_FAILURE_DENY_REASON                       = 12, /**<  Sync failure. */
+    E_QSER_NW_CONGESTION_DENY_REASON                          = 13, /**<  Congestion. */
+    E_QSER_NW_GSM_AUTHENTICATION_UNACCEPTABLE_DENY_REASON     = 14, /**<  GSM authentication unacceptable. */
+    E_QSER_NW_NOT_AUTHORIZED_CSG_DENY_REASON                  = 15, /**<  Not authorized in this CSG. */
+    E_QSER_NW_SERVICE_OPTION_NOT_SUPPORTED_DENY_REASON        = 16, /**<  Service option not supported. */
+    E_QSER_NW_REQ_SERVICE_OPTION_NOT_SUBSCRIBED_DENY_REASON   = 17, /**<  Requested service option not subscribed. */
+    E_QSER_NW_CALL_CANNOT_BE_IDENTIFIED_DENY_REASON           = 18, /**<  Call cannot be identified. */
+    E_QSER_NW_SEMANTICALLY_INCORRECT_MSG_DENY_REASON          = 19, /**<  Semantically incorrect message. */
+    E_QSER_NW_INVALID_MANDATORY_INFO_DENY_REASON              = 20, /**<  Invalid mandatory information. */
+    E_QSER_NW_MSG_TYPE_NON_EXISTENT_DENY_REASON               = 21, /**<  Message type non-existent or not implemented. */
+    E_QSER_NW_INFO_ELEMENT_NON_EXISTENT_DENY_REASON           = 22, /**<  Message type not compatible with the protocol state. */
+    E_QSER_NW_CONDITIONAL_IE_ERR_DENY_REASON                  = 23, /**<  Conditional IE error. */
+    E_QSER_NW_MSG_INCOMPATIBLE_PROTOCOL_STATE_DENY_REASON     = 24, /**<  Message not compatible with the protocol state. */
+    E_QSER_NW_PROTOCOL_ERROR_DENY_REASON                      = 25, /**<  Unspecified protocol error. */
+}E_QSER_NW_DENY_REASON_TYPE_T;
+
+
+typedef enum 
+{
+    E_QSER_NW_SERVICE_NONE     = 0x0000,  /**<  Not registered or no data. */
+    E_QSER_NW_SERVICE_LIMITED  = 0x0001,  /**<  Registered; emergency service only. */
+    E_QSER_NW_SERVICE_FULL     = 0x0002,  /**<  Registered, full service. */
+}E_QSER_NW_SERVICE_TYPE_T;
+
+typedef struct 
+{
+    E_QSER_NW_TECH_DOMAIN_TYPE_T  tech_domain;        /**<   Technology, used to determine the structure type  tech: 0 -- None, 1 -- 3GPP, 2 -- 3GPP2.*/
+    E_QSER_NW_RADIO_TECH_TYPE_T   radio_tech;         /**<   Radio technology; see #nw_radio_tech_t_v01.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming;            /**<   0 -- Off, 1 -- Roaming (3GPP2 has extended values).*/
+    E_QSER_NW_DENY_REASON_TYPE_T  deny_reason;        /**<   Set when registration state is #nw_deny_reason_t_v01.*/
+    E_QSER_NW_SERVICE_TYPE_T      registration_state; /**<   Registration state.*/
+}QSER_NW_COMMON_REG_INFO_T;
+
+
+typedef struct 
+{
+    E_QSER_NW_TECH_DOMAIN_TYPE_T  tech_domain;        /**<   Technology, used to determine the structure type  tech: 0 -- None, 1 -- 3GPP, 2 -- 3GPP2.*/
+    E_QSER_NW_RADIO_TECH_TYPE_T   radio_tech;         /**<   Radio technology; see #nw_radio_tech_t_v01.*/
+    char                            mcc[3+1];           /**<   Mobile country code.*/
+    char                            mnc[3+1];           /**<   Mobile network code.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming;            /**<   0 -- Off, 1 -- Roaming (3GPP2 has extended values).*/
+    uint8_t                         forbidden;          /**<   Forbidden: 0 -- No, 1 -- Yes.*/
+    uint32_t                        cid;                /**<   Cell ID for the registered 3GPP system.*/
+    uint16_t                        lac;                /**<   Locatin area code for the registered 3GPP system.*/
+    uint16_t                        psc;                /**<   Primary scrambling code (WCDMA only); 0 -- None.*/
+    uint16_t                        tac;                /**<   Tracking area code information for LTE.*/
+}QSER_NW_3GPP_REG_INFO_T;
+
+
+typedef struct 
+{
+    E_QSER_NW_TECH_DOMAIN_TYPE_T  tech_domain;        /**<   Technology, used to determine structure type  tech: 0 -- None, 1 -- 3GPP, 2 -- 3GPP2.*/
+    E_QSER_NW_RADIO_TECH_TYPE_T   radio_tech;         /**<   Radio technology; see #nw_radio_tech_t_v01.*/
+    char                            mcc[3+1];           /**<   Mobile country code.*/
+    char                            mnc[3+1];           /**<   Mobile network code.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming;            /**<   Roaming status; see #nw_roam_state_t_v01.*/
+    uint8_t                         forbidden;          /**<   Forbidden: 0 -- No, 1 -- Yes.*/
+    uint8_t                         inPRL;              /**<   0 -- Not in PRL, 1 -- In PRL.*/
+    uint8_t                         css;                /**<   Concurrent services supported: 0 -- No, 1 -- Yes.*/
+    uint16_t                        sid;                /**<   CDMA system ID.*/
+    uint16_t                        nid;                /**<   CDMA network ID.*/
+    uint16_t                        bsid;               /**<   Base station ID. @newpagetable */
+}QSER_NW_3GPP2_REG_INFO_T;
+
+/** Gets the status associated with the connection of \<id\>. */
+typedef struct 
+{
+    uint8_t                         voice_registration_valid;               /**< Must be set to TRUE if voice_registration is being passed. */
+    QSER_NW_COMMON_REG_INFO_T     voice_registration;                     /**<   Voice registration. */
+
+    uint8_t                         data_registration_valid;                /**< Must be set to TRUE if data_registration is being passed. */
+    QSER_NW_COMMON_REG_INFO_T     data_registration;                      /**<   Data registration. */
+
+    uint8_t                         voice_registration_details_3gpp_valid;  /**< Must be set to TRUE if voice_registration_details_3gpp is being passed. */
+    QSER_NW_3GPP_REG_INFO_T       voice_registration_details_3gpp;        /**<   Voice registration details for 3GPP. */
+
+    uint8_t                         data_registration_details_3gpp_valid;   /**< Must be set to TRUE if data_registration_details_3gpp is being passed. */
+    QSER_NW_3GPP_REG_INFO_T       data_registration_details_3gpp;         /**<   Data registration details for 3GPP. */
+
+    uint8_t                         voice_registration_details_3gpp2_valid; /**< Must be set to TRUE if voice_registration_details_3gpp2 is being passed. */
+    QSER_NW_3GPP2_REG_INFO_T      voice_registration_details_3gpp2;       /**<   Voice registration details for 3GPP2. */
+
+    uint8_t                         data_registration_details_3gpp2_valid;  /**< Must be set to TRUE if data_registration_details_3gpp2 is being passed. */
+    QSER_NW_3GPP2_REG_INFO_T      data_registration_details_3gpp2;        /**<   Data registration details for 3GPP2. */
+}QSER_NW_REG_STATUS_INFO_T;
+
+typedef enum 
+{
+    E_QSER_NW_IMS_SERVICE_NONE     = 0x0000,  /**<  Not registered */
+    E_QSER_NW_IMS_SERVICE_REGISTERED     = 0x0001,  /**<  Registered*/
+}E_QSER_NW_IMS_SERVICE_TYPE_T;
+
+typedef struct 
+{   
+    E_QSER_NW_IMS_SERVICE_TYPE_T      registration_state; /**<   Registration state.*/
+}QSER_NW_IMS_REG_STATUS_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates received signal strength. A signed value; -125 or lower indicates no signal.*/
+}QSER_NW_GSM_SIGNAL_INFO_T;
+
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Ec. A signed value; -125 or lower indicates no signal.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+}QSER_NW_WCDMA_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Ec.    a signed value; -125 or lower indicates no signal.*/
+    int8_t      rscp;       /**<   RSCP in dBm.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+    int8_t      sinr;       /**<   Measured SINR in dB. @newpagetable */
+}QSER_NW_TDSCDMA_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Ec. A signed value; -125 or lower indicates no signal.*/
+    int8_t      rsrq;       /**<   RSRQ value in dB (signed integer value), as measured by L1. Range: -3 to -20 (-3 equals -3 dB, -20 equals -20 dB).*/
+    int16_t      rsrp;       /**<   Current RSRP in dBm, as measured by L1. Range: -44 to -140 (-44 equals -44 dBm, -140 equals -140 dBm).*/
+    int16_t      snr;        /**<   SNR level as a scaled integer in units of 0.1 dB; e.g., -16 dB has a value of -160 and 24.6 dB has a value of 246.*/
+}QSER_NW_LTE_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Power (AGC) + Ec/Io. A signed value; -125 or lower indicates no signal.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+}QSER_NW_CDMA_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Power (AGC) + Ec/Io. A signed value; -125 or lower indicates no signal.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+    int8_t      sinr;       /**<   SINR level.*/
+    int32_t     io;         /**<   Received IO in dBm. */
+}QSER_NW_HDR_SIGNAL_INFO_T;
+
+typedef struct
+{
+    int16_t     ssRsrp;   /* SS(Synchronization Signal) reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int16_t     ssRsrq;   /* SS reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int16_t     ssSinr;   /* SS signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+    int16_t     csiRsrp;  /* CSI reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int16_t     csiRsrq;  /* CSI reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int16_t     csiSinr;  /* CSI signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+}QSER_NW_NR_SIGNAL_INFO_T;
+
+
+/** Gets signal strength information. */
+typedef struct 
+{
+    uint8_t                         gsm_sig_info_valid;         /**< Must be set to TRUE if gsm_sig_info is being passed. */
+    QSER_NW_GSM_SIGNAL_INFO_T     gsm_sig_info;               /**<   GSM signal information. */
+    uint8_t                         wcdma_sig_info_valid;       /**< Must be set to TRUE if wcdma_sig_info is being passed. */
+    QSER_NW_WCDMA_SIGNAL_INFO_T   wcdma_sig_info;             /**<   WCDMA signal information. */
+    uint8_t                         tdscdma_sig_info_valid;     /**< Must be set to TRUE if tdscdma_sig_info is being passed. */
+    QSER_NW_TDSCDMA_SIGNAL_INFO_T tdscdma_sig_info;           /**<   TDSCDMA signal information. */
+    uint8_t                         lte_sig_info_valid;         /**< Must be set to TRUE if lte_sig_info is being passed. */
+    QSER_NW_LTE_SIGNAL_INFO_T     lte_sig_info;               /**<   LTE signal information. */
+    uint8_t                         cdma_sig_info_valid;        /**< Must be set to TRUE if cdma_sig_info is being passed. */
+    QSER_NW_CDMA_SIGNAL_INFO_T    cdma_sig_info;              /**<   CDMA signal information. */
+    uint8_t                         hdr_sig_info_valid;         /**< Must be set to TRUE if hdr_sig_info is being passed. */
+    QSER_NW_HDR_SIGNAL_INFO_T     hdr_sig_info;               /**<   HDR signal information. */
+    uint8_t                         nr_sig_info_valid;
+    QSER_NW_NR_SIGNAL_INFO_T      nr_sig_info;
+}QSER_NW_SIGNAL_STRENGTH_INFO_T;
+
+
+
+
+
+/* @bridef Callback function registered to QSER_NW_AddRxMsgHandler 
+ * map of ind_flag and ind_msg_buf as bellow :
+ *  NW_IND_VOICE_REG_EVENT_IND_FLAG : QSER_NW_VOICE_REG_EVENT_IND_T
+ *  NW_IND_DATA_REG_EVENT_IND_FLAG : QSER_NW_DATA_REG_EVENT_IND_T
+ *  NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG : QSER_NW_SINGNAL_EVENT_IND_T
+ *  NW_IND_CELL_ACCESS_STATE_CHG_EVENT_IND_FLAG : QSER_NW_CELL_ACCESS_STATE_EVENT_IND_T
+ *  NW_IND_NITZ_TIME_UPDATE_EVENT_IND_FLAG : QSER_NW_NITZ_TIME_EVENT_IND_T 
+ *  NW_IND_IMS_REG_EVENT_IND_FLAG : NULL 
+ * */
+typedef void (*QSER_NW_RxMsgHandlerFunc_t)(
+    nw_client_handle_type h_nw, 
+    uint32_t ind_flag, 
+    void                  *ind_msg_buf, 
+    uint32_t              ind_msg_len, 
+    void                  *contextPtr
+);
+
+
+/** Indication message; Indication for the corresponding registered event flag NW_IND_VOICE_REG_EVENT_IND_FLAG */
+typedef struct {
+
+  uint8_t                         registration_valid;               /**< Must be set to TRUE if voice_registration is being passed. */
+  QSER_NW_COMMON_REG_INFO_T     registration;                     /**< Voice registration. */
+
+  uint8_t                         registration_details_3gpp_valid;  /**< Must be set to TRUE if voice_registration_details_3gpp is being passed. */
+  QSER_NW_3GPP_REG_INFO_T       registration_details_3gpp;        /**< Voice registration details for 3GPP. */
+
+  uint8_t                         registration_details_3gpp2_valid; /**< Must be set to TRUE if voice_registration_details_3gpp2 is being passed. */
+  QSER_NW_3GPP2_REG_INFO_T      registration_details_3gpp2;       /**< Voice registration details for 3GPP2. */
+}QSER_NW_VOICE_REG_EVENT_IND_T; 
+
+/** Indication message; Indication for the corresponding registered event flag NW_IND_DATA_REG_EVENT_IND_FLAG */
+typedef struct {
+
+  uint8_t                         registration_valid;               /**< Must be set to TRUE if data_registration is being passed. */
+  QSER_NW_COMMON_REG_INFO_T     registration;                     /**< Data registration. */
+  
+  uint8_t                         registration_details_3gpp_valid;  /**< Must be set to TRUE if data_registration_details_3gpp is being passed. */
+  QSER_NW_3GPP_REG_INFO_T       registration_details_3gpp;        /**< Data registration details for 3GPP. */
+
+  uint8_t                         registration_details_3gpp2_valid; /**< Must be set to TRUE if data_registration_details_3gpp2 is being passed. */
+  QSER_NW_3GPP2_REG_INFO_T      registration_details_3gpp2;       /**< Data registration details for 3GPP2. */
+}QSER_NW_DATA_REG_EVENT_IND_T;
+
+
+/** Indication message; Indication for the corresponding registered event flag NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG */
+typedef struct {
+    uint8_t gsm_sig_info_valid;                       /**< Must be set to TRUE if gsm_sig_info is being passed. */
+    QSER_NW_GSM_SIGNAL_INFO_T       gsm_sig_info;   /**< GSM singal information. */
+
+    uint8_t wcdma_sig_info_valid;                     /**< Must be set to TRUE if wcdma_sig_info is being passed. */
+    QSER_NW_WCDMA_SIGNAL_INFO_T wcdma_sig_info;     /**< WCDMA singal information. */
+
+    uint8_t tdscdma_sig_info_valid;                   /**< Must be set to TRUE if tdscdma_sig_info is being passed. */
+    QSER_NW_TDSCDMA_SIGNAL_INFO_T tdscdma_sig_info; /**< TDSCDMA singal information. */
+
+    uint8_t lte_sig_info_valid;                       /**< Must be set to TRUE if lte_sig_info is being passed. */
+    QSER_NW_LTE_SIGNAL_INFO_T lte_sig_info;         /**< LTE singal information. */
+
+    uint8_t cdma_sig_info_valid;                      /**< Must be set to TRUE if cdma_sig_info is being passed. */
+    QSER_NW_CDMA_SIGNAL_INFO_T cdma_sig_info;       /**< CDMA singal information. */
+
+    uint8_t hdr_sig_info_valid;                       /**< Must be set to TRUE if hdr_sig_info is being passed. */
+    QSER_NW_HDR_SIGNAL_INFO_T hdr_sig_info;         /**< HDR singal information. */
+    
+    uint8_t                         nr_sig_info_valid;
+    QSER_NW_NR_SIGNAL_INFO_T      nr_sig_info;
+}QSER_NW_SINGNAL_EVENT_IND_T;
+
+typedef enum 
+{
+    E_QSER_NW_RF_MODE_CFUN_0 = 0,    /**<  CFUN 0. */
+    E_QSER_NW_RF_MODE_CFUN_1 = 1,    /**<  CFUN 1. */
+    E_QSER_NW_RF_MODE_FLIGHT = 4,    /**<  Flight Mode, CFUN 4. */
+}E_QSER_NW_RF_MODE_TYPE_T;
+
+int qser_nw_client_init(nw_client_handle_type  *ph_nw);
+
+int qser_nw_client_deinit(nw_client_handle_type  h_nw);
+
+int qser_nw_set_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_get_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_set_ims_enable
+(
+    nw_client_handle_type h_nw,
+    E_QSER_NW_IMS_MODE_TYPE_T ims_mode
+);
+
+int qser_nw_set_oos_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_OOS_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_get_oos_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_OOS_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_event_register
+(
+    nw_client_handle_type       h_nw,
+    uint32_t                    bitmask // bit OR of NW_IND_xxxx_EVENT_ON
+);
+
+int qser_nw_get_operator_name
+(
+    nw_client_handle_type           h_nw,
+    QSER_NW_OPERATOR_NAME_INFO_T  *pt_info //You should malloc this or may cause stack overflow
+);
+
+int qser_nw_get_reg_status
+(
+    nw_client_handle_type               h_nw,
+    QSER_NW_REG_STATUS_INFO_T         *pt_info 
+);
+
+int qser_nw_get_ims_reg_status
+(
+    nw_client_handle_type h_nw,
+    QSER_NW_IMS_REG_STATUS_INFO_T *pt_info
+);
+
+int qser_nw_get_signal_strength
+(
+    nw_client_handle_type               h_nw,
+    QSER_NW_SIGNAL_STRENGTH_INFO_T    *pt_info
+);
+
+int qser_nw_add_rx_msg_handler
+(
+    nw_client_handle_type        h_nw,
+    QSER_NW_RxMsgHandlerFunc_t handlerPtr, 
+    void* contextPtr
+);
+
+int qser_nw_set_rf_mode
+(
+    nw_client_handle_type       h_nw,
+    E_QSER_NW_RF_MODE_TYPE_T    rf_mode
+);
+
+int qser_nw_get_rf_mode
+(
+    nw_client_handle_type       h_nw,
+    E_QSER_NW_RF_MODE_TYPE_T    *rf_mode
+);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif//__QSER_NW_H__
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
new file mode 100755
index 0000000..3eabb0a
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
@@ -0,0 +1,682 @@
+policy_module(logging, 1.33.1)
+
+########################################
+#
+# Declarations
+#
+
+
+attribute logfile;
+
+type auditctl_t;
+type auditctl_exec_t;
+init_system_domain(auditctl_t, auditctl_exec_t)
+role system_r types auditctl_t;
+
+type auditd_etc_t;
+files_security_file(auditd_etc_t)
+
+type auditd_log_t;
+files_security_file(auditd_log_t)
+files_security_mountpoint(auditd_log_t)
+
+type audit_spool_t;
+files_security_file(audit_spool_t)
+files_security_mountpoint(audit_spool_t)
+
+type auditd_t;
+type auditd_exec_t;
+init_daemon_domain(auditd_t, auditd_exec_t)
+
+type auditd_initrc_exec_t;
+init_script_file(auditd_initrc_exec_t)
+
+type auditd_runtime_t alias auditd_var_run_t;
+files_runtime_file(auditd_runtime_t)
+
+type auditd_unit_t;
+init_unit_file(auditd_unit_t)
+
+type audisp_t;
+type audisp_exec_t;
+init_system_domain(audisp_t, audisp_exec_t)
+
+type audisp_remote_t;
+type audisp_remote_exec_t;
+logging_dispatcher_domain(audisp_remote_t, audisp_remote_exec_t)
+
+type audisp_runtime_t alias audisp_var_run_t;
+files_runtime_file(audisp_runtime_t)
+
+type devlog_t;
+files_type(devlog_t)
+mls_trusted_object(devlog_t)
+
+type klogd_t;
+type klogd_exec_t;
+init_daemon_domain(klogd_t, klogd_exec_t)
+
+type klogd_runtime_t alias klogd_var_run_t;
+files_runtime_file(klogd_runtime_t)
+
+type klogd_tmp_t;
+files_tmp_file(klogd_tmp_t)
+
+type syslog_conf_t;
+files_config_file(syslog_conf_t)
+
+type syslogd_t;
+type syslogd_exec_t;
+init_daemon_domain(syslogd_t, syslogd_exec_t)
+init_named_socket_activation(syslogd_t, syslogd_runtime_t)
+mls_trusted_socket(syslogd_t)
+
+type syslogd_initrc_exec_t;
+init_script_file(syslogd_initrc_exec_t)
+
+type syslogd_runtime_t alias syslogd_var_run_t;
+files_runtime_file(syslogd_runtime_t)
+
+type syslogd_tmp_t;
+files_tmp_file(syslogd_tmp_t)
+
+type syslogd_unit_t;
+init_unit_file(syslogd_unit_t)
+
+type syslogd_var_lib_t;
+files_type(syslogd_var_lib_t)
+
+type var_log_t;
+logging_log_file(var_log_t)
+files_mountpoint(var_log_t)
+
+ifdef(`enable_mls',`
+	init_ranged_daemon_domain(auditd_t, auditd_exec_t, mls_systemhigh)
+	init_ranged_daemon_domain(syslogd_t, syslogd_exec_t, mls_systemhigh)
+')
+
+########################################
+#
+# Auditctl local policy
+#
+
+allow auditctl_t self:capability { dac_override dac_read_search fsetid };
+allow auditctl_t self:process getcap;
+allow auditctl_t self:netlink_audit_socket nlmsg_readpriv;
+
+read_files_pattern(auditctl_t, auditd_etc_t, auditd_etc_t)
+allow auditctl_t auditd_etc_t:dir list_dir_perms;
+dontaudit auditctl_t auditd_etc_t:file map;
+
+corecmd_search_bin(auditctl_t)
+
+# Needed for adding watches
+files_getattr_all_dirs(auditctl_t)
+files_getattr_all_files(auditctl_t)
+files_read_etc_files(auditctl_t)
+
+kernel_read_kernel_sysctls(auditctl_t)
+kernel_read_proc_symlinks(auditctl_t)
+kernel_setsched(auditctl_t)
+kernel_getattr_proc(auditctl_t)
+
+domain_read_all_domains_state(auditctl_t)
+domain_use_interactive_fds(auditctl_t)
+
+mls_file_read_all_levels(auditctl_t)
+
+term_use_all_terms(auditctl_t)
+
+init_dontaudit_use_fds(auditctl_t)
+
+logging_set_audit_parameters(auditctl_t)
+logging_send_syslog_msg(auditctl_t)
+
+miscfiles_read_localization(auditctl_t)
+
+ifdef(`init_systemd',`
+	init_rw_stream_sockets(auditctl_t)
+')
+
+optional_policy(`
+	locallogin_dontaudit_use_fds(auditctl_t)
+')
+
+########################################
+#
+# Auditd local policy
+#
+
+allow auditd_t self:capability { chown fsetid sys_nice sys_resource };
+dontaudit auditd_t self:capability sys_tty_config;
+allow auditd_t self:process { getcap signal_perms setcap setpgid setsched };
+allow auditd_t self:file rw_file_perms;
+allow auditd_t self:unix_dgram_socket create_socket_perms;
+allow auditd_t self:fifo_file rw_fifo_file_perms;
+allow auditd_t self:tcp_socket create_stream_socket_perms;
+
+allow auditd_t auditd_etc_t:dir list_dir_perms;
+allow auditd_t auditd_etc_t:file read_file_perms;
+dontaudit auditd_t auditd_etc_t:file map;
+
+allow auditd_t audisp_remote_exec_t:file getattr;
+
+manage_files_pattern(auditd_t, auditd_log_t, auditd_log_t)
+allow auditd_t auditd_log_t:dir setattr;
+manage_lnk_files_pattern(auditd_t, auditd_log_t, auditd_log_t)
+allow auditd_t var_log_t:dir search_dir_perms;
+allow auditd_t var_log_t:lnk_file read_lnk_file_perms;
+
+manage_files_pattern(auditd_t, auditd_runtime_t, auditd_runtime_t)
+manage_sock_files_pattern(auditd_t, auditd_runtime_t, auditd_runtime_t)
+files_runtime_filetrans(auditd_t, auditd_runtime_t, { file sock_file })
+
+kernel_read_kernel_sysctls(auditd_t)
+# Needs to be able to run dispatcher.  see /etc/audit/auditd.conf
+# Probably want a transition, and a new auditd_helper app
+kernel_read_system_state(auditd_t)
+
+dev_read_sysfs(auditd_t)
+
+fs_getattr_all_fs(auditd_t)
+fs_search_auto_mountpoints(auditd_t)
+fs_rw_anon_inodefs_files(auditd_t)
+
+selinux_search_fs(auditctl_t)
+
+corenet_all_recvfrom_netlabel(auditd_t)
+corenet_tcp_sendrecv_generic_if(auditd_t)
+corenet_tcp_sendrecv_generic_node(auditd_t)
+corenet_tcp_bind_generic_node(auditd_t)
+corenet_tcp_bind_audit_port(auditd_t)
+corenet_sendrecv_audit_server_packets(auditd_t)
+
+# Needs to be able to run dispatcher.  see /etc/audit/auditd.conf
+# Probably want a transition, and a new auditd_helper app
+corecmd_exec_bin(auditd_t)
+corecmd_exec_shell(auditd_t)
+
+domain_use_interactive_fds(auditd_t)
+
+files_read_etc_files(auditd_t)
+files_list_usr(auditd_t)
+
+init_telinit(auditd_t)
+
+logging_set_audit_parameters(auditd_t)
+logging_send_syslog_msg(auditd_t)
+logging_domtrans_dispatcher(auditd_t)
+logging_signal_dispatcher(auditd_t)
+
+miscfiles_read_localization(auditd_t)
+
+mls_file_read_all_levels(auditd_t)
+mls_file_write_all_levels(auditd_t) # Need to be able to write to /var/run/ directory
+mls_fd_use_all_levels(auditd_t)
+mls_socket_write_all_levels(auditd_t)
+
+seutil_dontaudit_read_config(auditd_t)
+
+sysnet_dns_name_resolve(auditd_t)
+
+userdom_use_user_terminals(auditd_t)
+userdom_dontaudit_use_unpriv_user_fds(auditd_t)
+userdom_dontaudit_search_user_home_dirs(auditd_t)
+
+ifdef(`distro_ubuntu',`
+	optional_policy(`
+		unconfined_domain(auditd_t)
+	')
+')
+
+optional_policy(`
+	mta_send_mail(auditd_t)
+')
+
+optional_policy(`
+	seutil_sigchld_newrole(auditd_t)
+')
+
+optional_policy(`
+	init_list_unit_dirs(auditd_t)
+	systemd_start_power_units(auditd_t)
+	systemd_status_power_units(auditd_t)
+')
+
+########################################
+#
+# audit dispatcher local policy
+#
+
+allow audisp_t self:capability { dac_override setpcap sys_nice };
+allow audisp_t self:process { getcap signal_perms setcap setsched };
+allow audisp_t self:fifo_file rw_fifo_file_perms;
+allow audisp_t self:unix_stream_socket create_stream_socket_perms;
+allow audisp_t self:unix_dgram_socket create_socket_perms;
+
+allow audisp_t auditd_t:unix_stream_socket rw_socket_perms;
+
+manage_sock_files_pattern(audisp_t, audisp_runtime_t, audisp_runtime_t)
+files_runtime_filetrans(audisp_t, audisp_runtime_t, sock_file)
+
+kernel_read_system_state(audisp_t)
+
+corecmd_exec_bin(audisp_t)
+corecmd_exec_shell(audisp_t)
+
+domain_use_interactive_fds(audisp_t)
+
+files_map_etc_files(audisp_t)
+files_read_etc_files(audisp_t)
+files_read_etc_runtime_files(audisp_t)
+
+mls_file_write_all_levels(audisp_t)
+
+logging_send_syslog_msg(audisp_t)
+
+miscfiles_read_localization(audisp_t)
+
+sysnet_dns_name_resolve(audisp_t)
+
+optional_policy(`
+	dbus_system_bus_client(audisp_t)
+')
+
+########################################
+#
+# Audit remote logger local policy
+#
+
+allow audisp_remote_t self:capability { setpcap setuid };
+allow audisp_remote_t self:process { getcap setcap };
+allow audisp_remote_t self:tcp_socket create_socket_perms;
+allow audisp_remote_t var_log_t:dir search_dir_perms;
+allow audisp_remote_t var_log_t:lnk_file read_lnk_file_perms;
+
+manage_dirs_pattern(audisp_remote_t, audit_spool_t, audit_spool_t)
+manage_files_pattern(audisp_remote_t, audit_spool_t, audit_spool_t)
+files_spool_filetrans(audisp_remote_t, audit_spool_t, { dir file })
+
+corecmd_exec_bin(audisp_remote_t)
+
+corenet_all_recvfrom_netlabel(audisp_remote_t)
+corenet_tcp_sendrecv_generic_if(audisp_remote_t)
+corenet_tcp_sendrecv_generic_node(audisp_remote_t)
+corenet_tcp_bind_audit_port(audisp_remote_t)
+corenet_tcp_bind_generic_node(audisp_remote_t)
+corenet_tcp_connect_audit_port(audisp_remote_t)
+corenet_sendrecv_audit_client_packets(audisp_remote_t)
+
+files_read_etc_files(audisp_remote_t)
+
+logging_send_syslog_msg(audisp_remote_t)
+logging_send_audit_msgs(audisp_remote_t)
+
+miscfiles_read_localization(audisp_remote_t)
+
+sysnet_dns_name_resolve(audisp_remote_t)
+
+########################################
+#
+# klogd local policy
+#
+
+allow klogd_t self:capability sys_admin;
+dontaudit klogd_t self:capability { sys_resource sys_tty_config };
+allow klogd_t self:process signal_perms;
+allow klogd_t kernel_t:fd { use };
+allow klogd_t root_t:chr_file { read write };
+
+manage_dirs_pattern(klogd_t, klogd_tmp_t, klogd_tmp_t)
+manage_files_pattern(klogd_t, klogd_tmp_t, klogd_tmp_t)
+files_tmp_filetrans(klogd_t, klogd_tmp_t,{ file dir })
+
+manage_files_pattern(klogd_t, klogd_runtime_t, klogd_runtime_t)
+files_runtime_filetrans(klogd_t, klogd_runtime_t, file)
+
+kernel_read_system_state(klogd_t)
+kernel_read_messages(klogd_t)
+kernel_read_kernel_sysctls(klogd_t)
+# Control syslog and console logging
+kernel_clear_ring_buffer(klogd_t)
+kernel_change_ring_buffer_level(klogd_t)
+
+files_read_kernel_symbol_table(klogd_t)
+
+dev_read_raw_memory_cond(klogd_t, allow_raw_memory_access)
+dev_read_sysfs(klogd_t)
+
+fs_getattr_all_fs(klogd_t)
+fs_search_auto_mountpoints(klogd_t)
+
+domain_use_interactive_fds(klogd_t)
+
+files_read_etc_runtime_files(klogd_t)
+# read /etc/nsswitch.conf
+files_read_etc_files(klogd_t)
+
+logging_send_syslog_msg(klogd_t)
+
+miscfiles_read_localization(klogd_t)
+
+mls_file_read_all_levels(klogd_t)
+
+userdom_dontaudit_search_user_home_dirs(klogd_t)
+
+ifdef(`distro_ubuntu',`
+	optional_policy(`
+		unconfined_domain(klogd_t)
+	')
+')
+
+optional_policy(`
+	seutil_sigchld_newrole(klogd_t)
+')
+
+########################################
+#
+# syslogd local policy
+#
+
+# chown fsetid for syslog-ng
+# sys_admin for the integrated klog of syslog-ng and metalog
+# sys_nice for rsyslog
+# cjp: why net_admin!
+allow syslogd_t self:capability { chown dac_override fsetid net_admin setgid setuid sys_admin sys_nice sys_resource sys_tty_config };
+dontaudit syslogd_t self:capability { sys_ptrace };
+# setpgid for metalog
+# setrlimit for syslog-ng
+# getsched for syslog-ng
+# setsched for rsyslog
+# getcap/setcap for syslog-ng
+allow syslogd_t self:process { getcap setcap signal_perms setpgid setrlimit getsched setsched };
+# receive messages to be logged
+allow syslogd_t self:unix_dgram_socket create_socket_perms;
+allow syslogd_t self:unix_stream_socket create_stream_socket_perms;
+allow syslogd_t self:unix_dgram_socket sendto;
+allow syslogd_t self:fifo_file rw_fifo_file_perms;
+allow syslogd_t self:udp_socket create_socket_perms;
+allow syslogd_t self:tcp_socket create_stream_socket_perms;
+
+allow syslogd_t syslog_conf_t:file read_file_perms;
+allow syslogd_t syslog_conf_t:dir list_dir_perms;
+
+# Create and bind to /dev/log or /var/run/log.
+allow syslogd_t devlog_t:sock_file manage_sock_file_perms;
+allow syslogd_t devlog_t:lnk_file manage_lnk_file_perms;
+files_runtime_filetrans(syslogd_t, devlog_t, sock_file)
+init_runtime_filetrans(syslogd_t, devlog_t, sock_file, "dev-log")
+
+# create/append log files.
+manage_files_pattern(syslogd_t, var_log_t, var_log_t)
+allow syslogd_t var_log_t:file map;
+rw_fifo_files_pattern(syslogd_t, var_log_t, var_log_t)
+files_search_spool(syslogd_t)
+
+# Allow access for syslog-ng
+allow syslogd_t var_log_t:dir { create setattr };
+allow syslogd_t var_log_t:lnk_file read_lnk_file_perms;
+
+# for systemd but can not be conditional
+files_runtime_filetrans(syslogd_t, syslogd_tmp_t, dir, "log")
+
+# manage temporary files
+manage_dirs_pattern(syslogd_t, syslogd_tmp_t, syslogd_tmp_t)
+manage_files_pattern(syslogd_t, syslogd_tmp_t, syslogd_tmp_t)
+allow syslogd_t syslogd_tmp_t:file map;
+
+files_tmp_filetrans(syslogd_t, syslogd_tmp_t, { dir file })
+
+manage_files_pattern(syslogd_t, syslogd_var_lib_t, syslogd_var_lib_t)
+allow syslogd_t syslogd_var_lib_t:file map;
+files_search_var_lib(syslogd_t)
+
+# manage runtime files
+allow syslogd_t syslogd_runtime_t:dir create_dir_perms;
+allow syslogd_t syslogd_runtime_t:sock_file { create setattr unlink };
+allow syslogd_t syslogd_runtime_t:file map;
+manage_files_pattern(syslogd_t, syslogd_runtime_t, syslogd_runtime_t)
+files_runtime_filetrans(syslogd_t, syslogd_runtime_t, file)
+
+kernel_read_crypto_sysctls(syslogd_t)
+kernel_read_system_state(syslogd_t)
+kernel_read_network_state(syslogd_t)
+kernel_read_kernel_sysctls(syslogd_t)
+kernel_read_proc_symlinks(syslogd_t)
+# Allow access to /proc/kmsg for syslog-ng
+kernel_read_messages(syslogd_t)
+# rsyslog
+kernel_read_vm_overcommit_sysctl(syslogd_t)
+kernel_clear_ring_buffer(syslogd_t)
+kernel_change_ring_buffer_level(syslogd_t)
+# Read ring buffer for journald
+kernel_read_ring_buffer(syslogd_t)
+# /initrd is not umounted before minilog starts
+kernel_dontaudit_search_unlabeled(syslogd_t)
+
+corenet_all_recvfrom_netlabel(syslogd_t)
+corenet_udp_sendrecv_generic_if(syslogd_t)
+corenet_udp_sendrecv_generic_node(syslogd_t)
+corenet_udp_bind_generic_node(syslogd_t)
+corenet_udp_bind_syslogd_port(syslogd_t)
+# syslog-ng can listen and connect on tcp port 514 (rsh)
+corenet_tcp_sendrecv_generic_if(syslogd_t)
+corenet_tcp_sendrecv_generic_node(syslogd_t)
+corenet_tcp_bind_generic_node(syslogd_t)
+corenet_tcp_bind_rsh_port(syslogd_t)
+corenet_tcp_connect_rsh_port(syslogd_t)
+# Allow users to define additional syslog ports to connect to
+corenet_tcp_bind_syslogd_port(syslogd_t)
+corenet_tcp_connect_syslogd_port(syslogd_t)
+corenet_tcp_connect_postgresql_port(syslogd_t)
+corenet_tcp_connect_mysqld_port(syslogd_t)
+
+# syslog-ng can send or receive logs
+corenet_sendrecv_syslogd_client_packets(syslogd_t)
+corenet_sendrecv_syslogd_server_packets(syslogd_t)
+corenet_sendrecv_postgresql_client_packets(syslogd_t)
+corenet_sendrecv_mysqld_client_packets(syslogd_t)
+
+dev_filetrans(syslogd_t, devlog_t, sock_file)
+dev_read_sysfs(syslogd_t)
+dev_read_urand(syslogd_t)
+# Allow access to /dev/kmsg for journald
+dev_rw_kmsg(syslogd_t)
+
+domain_use_interactive_fds(syslogd_t)
+# Allow access to /proc/ information for journald
+domain_read_all_domains_state(syslogd_t)
+
+files_read_etc_files(syslogd_t)
+files_read_usr_files(syslogd_t)
+files_read_var_files(syslogd_t)
+files_read_etc_runtime_files(syslogd_t)
+# /initrd is not umounted before minilog starts
+files_read_kernel_symbol_table(syslogd_t)
+files_var_lib_filetrans(syslogd_t, syslogd_var_lib_t, { file dir })
+
+fs_getattr_all_fs(syslogd_t)
+fs_search_auto_mountpoints(syslogd_t)
+fs_search_tmpfs(syslogd_t)
+
+mls_file_write_all_levels(syslogd_t) # Need to be able to write to /var/run/ and /var/log directories
+mls_file_read_all_levels(syslogd_t)
+mls_socket_write_all_levels(syslogd_t) # Neet to be able to sendto dgram
+mls_trusted_object(syslogd_t) # Other process need to have the right to connectto/sendto /dev/log
+mls_fd_use_all_levels(syslogd_t)
+
+term_write_console(syslogd_t)
+# Allow syslog to a terminal
+term_write_unallocated_ttys(syslogd_t)
+
+# for sending messages to logged in users
+init_read_utmp(syslogd_t)
+init_dontaudit_write_utmp(syslogd_t)
+term_write_all_ttys(syslogd_t)
+
+auth_use_nsswitch(syslogd_t)
+
+init_use_fds(syslogd_t)
+
+miscfiles_read_localization(syslogd_t)
+
+seutil_read_config(syslogd_t)
+
+userdom_dontaudit_use_unpriv_user_fds(syslogd_t)
+userdom_dontaudit_search_user_home_dirs(syslogd_t)
+
+ifdef(`init_systemd',`
+	# for systemd-journal
+	allow syslogd_t self:netlink_audit_socket connected_socket_perms;
+	allow syslogd_t self:capability2 audit_read;
+	allow syslogd_t self:capability { chown setgid setuid sys_ptrace dac_read_search sys_rawio };
+	allow syslogd_t self:netlink_audit_socket { getattr getopt read setopt write nlmsg_write };
+
+	# remove /run/log/journal when switching to permanent storage
+	allow syslogd_t var_log_t:dir rmdir;
+
+	kernel_getattr_dgram_sockets(syslogd_t)
+	kernel_read_ring_buffer(syslogd_t)
+	kernel_rw_stream_sockets(syslogd_t)
+	kernel_rw_unix_dgram_sockets(syslogd_t)
+	kernel_rw_netlink_audit_sockets(syslogd_t)
+	kernel_use_fds(syslogd_t)
+
+	dev_read_kmsg(syslogd_t)
+	dev_read_urand(syslogd_t)
+	dev_write_kmsg(syslogd_t)
+
+	domain_getattr_all_domains(syslogd_t)
+	domain_read_all_domains_state(syslogd_t)
+
+	init_create_runtime_dirs(syslogd_t)
+	init_daemon_runtime_file(syslogd_runtime_t, dir, "syslogd")
+	init_getattr(syslogd_t)
+	init_rename_runtime_files(syslogd_t)
+	init_delete_runtime_files(syslogd_t)
+	init_dgram_send(syslogd_t)
+	init_read_runtime_pipes(syslogd_t)
+	init_read_runtime_symlinks(syslogd_t)
+	init_read_state(syslogd_t)
+
+	# needed for systemd-initrd case when syslog socket is unlabelled
+	logging_send_syslog_msg(syslogd_t)
+
+	logging_set_loginuid(syslogd_t)
+
+	systemd_manage_journal_files(syslogd_t)
+
+	udev_read_runtime_files(syslogd_t)
+
+	userdom_search_user_runtime(syslogd_t)
+	systemd_search_user_runtime(syslogd_t)
+')
+
+ifdef(`distro_gentoo',`
+	# default gentoo syslog-ng config appends kernel
+	# and high priority messages to /dev/tty12
+	# and chown/chgrp/chmod /dev/tty12, which is denied
+	term_dontaudit_setattr_unallocated_ttys(syslogd_t)
+')
+
+ifdef(`distro_suse',`
+	# suse creates a /dev/log under /var/lib/stunnel for chrooted stunnel
+	files_var_lib_filetrans(syslogd_t, devlog_t, sock_file)
+')
+
+ifdef(`distro_ubuntu',`
+	optional_policy(`
+		unconfined_domain(syslogd_t)
+	')
+')
+
+optional_policy(`
+	bind_search_cache(syslogd_t)
+')
+
+optional_policy(`
+	cron_manage_log_files(syslogd_t)
+	cron_generic_log_filetrans_log(syslogd_t, file, "cron.log")
+')
+
+optional_policy(`
+	inn_manage_log(syslogd_t)
+	inn_generic_log_filetrans_innd_log(syslogd_t, file, "news.crit")
+	inn_generic_log_filetrans_innd_log(syslogd_t, file, "news.err")
+	inn_generic_log_filetrans_innd_log(syslogd_t, file, "news.notice")
+')
+
+optional_policy(`
+	mysql_stream_connect(syslogd_t)
+')
+
+optional_policy(`
+	postgresql_stream_connect(syslogd_t)
+')
+
+optional_policy(`
+	seutil_sigchld_newrole(syslogd_t)
+')
+
+optional_policy(`
+	# log to the xconsole
+	xserver_rw_console(syslogd_t)
+')
+gen_require(`
+        type root_t;
+        type default_t;
+	type nvserver_t;
+	type mnt_t;
+	type tmpfs_t;
+	type unlabeled_t;
+	type nvserver_t;
+	type mnt_t;
+')
+allow syslogd_t self:netlink_audit_socket nlmsg_write;
+allow syslogd_t self:capability audit_control;
+allow syslogd_t syslogd_var_run_t:sock_file create;
+allow syslogd_t tmpfs_t:dir { remove_name unlink add_name search create write open getattr };
+allow syslogd_t tmpfs_t:file { unlink create write open getattr };
+allow syslogd_t initrc_t:msg { send receive };
+allow syslogd_t initrc_t:msgq { create associate  getattr setattr read write unix_read unix_write };
+allow syslogd_t bin_t:file { map read  execute };
+allow syslogd_t nvserver_t:msgq { create associate getattr setattr read write unix_read unix_write };
+allow syslogd_t nvserver_t:msg { send receive };
+allow syslogd_t default_t:lnk_file { read };
+allow syslogd_t mnt_t:dir { search create };
+manage_chr_files_pattern(klogd_t, bin_t, bin_t)
+manage_dirs_pattern(klogd_t, bin_t, bin_t)
+manage_files_pattern(klogd_t,bin_t, bin_t)
+manage_chr_files_pattern(syslogd_t, var_t, var_t)
+manage_dirs_pattern(syslogd_t, var_t, var_t)
+manage_files_pattern(syslogd_t,var_t, var_t)
+manage_chr_files_pattern(syslogd_t, default_t, default_t)
+manage_dirs_pattern(syslogd_t, default_t, default_t)
+manage_files_pattern(syslogd_t,default_t, default_t)
+allow klogd_t bin_t:file { map execute };
+allow klogd_t default_t:lnk_file { read };
+allow klogd_t mnt_t:dir { search create };
+allow klogd_t tmpfs_t:dir { remove_name unlink add_name search create write open getattr };
+allow klogd_t tmpfs_t:file { unlink create write open getattr };
+manage_chr_files_pattern(syslogd_t, unlabeled_t, unlabeled_t)
+manage_dirs_pattern(syslogd_t, unlabeled_t, unlabeled_t)
+manage_files_pattern(syslogd_t,unlabeled_t, unlabeled_t)
+manage_chr_files_pattern(klogd_t, var_t, var_t)
+manage_dirs_pattern(klogd_t, var_t, var_t)
+manage_files_pattern(klogd_t,var_t, var_t)
+manage_lnk_files_pattern(klogd_t, var_t, var_t)
+manage_chr_files_pattern(klogd_t, unlabeled_t, unlabeled_t)
+manage_dirs_pattern(klogd_t, unlabeled_t, unlabeled_t)
+manage_files_pattern(klogd_t,unlabeled_t, unlabeled_t)
+manage_lnk_files_pattern(klogd_t, unlabeled_t, unlabeled_t)
+allow syslogd_t nvserver_t:msgq { unix_read unix_write associate getattr write read };
+allow syslogd_t nvserver_t:msg { send receive };
+allow syslogd_t default_t:lnk_file { read  };
+allow syslogd_t mnt_t:dir { search };
+allow syslogd_t tmpfs_t:dir { write add_name remove_name search };
+allow syslogd_t root_t:chr_file { read write };
+allow syslogd_t mnt_t:file { getattr open append };
+allow syslogd_t self:capability { sys_rawio };
+
+
+
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-lynq-spidev.h.patch b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-lynq-spidev.h.patch
new file mode 100755
index 0000000..289bf13
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers/0001-lynq-spidev.h.patch
@@ -0,0 +1,30 @@
+diff --git a/include/uapi/linux/spi/spidev.h b/include/uapi/linux/spi/spidev.h
+old mode 100644
+new mode 100755
+index d56427c..d69bab6
+--- a/include/uapi/linux/spi/spidev.h
++++ b/include/uapi/linux/spi/spidev.h
+@@ -146,6 +146,22 @@ struct spi_ioc_transfer {
+ #define SPI_IOC_RD_MODE32		_IOR(SPI_IOC_MAGIC, 5, __u32)
+ #define SPI_IOC_WR_MODE32		_IOW(SPI_IOC_MAGIC, 5, __u32)
+ 
+-
++/* Read data from buffer or device */
++#define SPI_IOC_RD_RD_DATA_FROM	_IOR(SPI_IOC_MAGIC, 6, __u8)
++#define SPI_IOC_WR_RD_DATA_FROM	_IOW(SPI_IOC_MAGIC, 6, __u8)
++
++/* Set signal pid */
++#define SPI_IOC_RD_SIG_PID		_IOR(SPI_IOC_MAGIC, 7, __u32)
++#define SPI_IOC_WR_SIG_PID	    _IOW(SPI_IOC_MAGIC, 7, __u32)
++
++/* get int status */
++#define SPI_IOC_RD_INT_ST		_IOR(SPI_IOC_MAGIC, 8, __u32)
++#define SPI_IOC_WR_INT_ST	    _IOW(SPI_IOC_MAGIC, 8, __u32)
++
++/* yu.dong@20240617 [T106BUG-641] SPI packet loss problem, add kernel buffer scheme start*/
++/* release from rd/wr block */
++#define SPI_IOC_RD_BLOCK_RELEASE	_IOR(SPI_IOC_MAGIC, 9, __u32)
++//#define SPI_IOC_WR_INT_ST	    _IOW(SPI_IOC_MAGIC, 9, __u32)
++/* yu.dong@20240617 [T106BUG-641] SPI packet loss problem, add kernel buffer scheme end*/
+ 
+ #endif /* SPIDEV_H */
diff --git a/patch/17.02_17.09/code/new/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
new file mode 100755
index 0000000..d528304
--- /dev/null
+++ b/patch/17.02_17.09/code/new/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
@@ -0,0 +1,24 @@
+require linux-libc-headers.inc
+
+SRC_URI_append_libc-musl = "\
+    file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch \
+    file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
+    file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
+    file://0001-include-linux-stddef.h-in-swab.h-uapi-header.patch \
+   "
+#xf.li@20241023 modify for libc-headers start
+SRC_URI_append = "\
+    file://0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch \
+    file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
+    file://0001-add-zxic-volte_drv.h.patch \
+    file://0002-add-zxic-rpmsg_zx29.h.patch \
+    file://0003-add-zxic-bsp_api_h.patch \
+    file://0001-mtd-abi.h.patch \
+    file://0001-lynq-spidev.h.patch \
+"
+#xf.li@20241023 modify for libc-headers end
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+SRC_URI[md5sum] = "753adc474bf799d569dec4f165ed92c3"
+SRC_URI[sha256sum] = "dcdf99e43e98330d925016985bfbc7b83c66d367b714b2de0cbbfcbf83d8ca43"
+
diff --git a/patch/17.02_17.09/code/new/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c b/patch/17.02_17.09/code/new/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
new file mode 100755
index 0000000..e8d8e88
--- /dev/null
+++ b/patch/17.02_17.09/code/new/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
@@ -0,0 +1,978 @@
+/*
+ *
+ * Copyright (C) 2015-2022 ZTE-TSP
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+#include <linux/kernel.h> 
+#include <linux/errno.h>
+#include <linux/irq.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of_device.h>
+#include <linux/of_irq.h>
+#include <linux/of_address.h>
+#include <linux/interrupt.h>
+#include <linux/irqdomain.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/percpu.h>
+#include <linux/refcount.h>
+#include <linux/slab.h>
+#include <linux/irqchip.h>
+#include <linux/suspend.h>
+#include <linux/syscore_ops.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+#include <linux/soc/sc/common.h>
+#include <linux/soc/sc/spinlock.h>
+#include <linux/soc/sc/pcu.h>
+#include <linux/soc/sc/rpmsg.h>
+#include <dt-bindings/soc/zx297520v3-irq.h>
+#include <uapi/linux/sc_bsp/bsp_api.h>
+#include <pub_debug_info.h>
+
+#include "pcu-common.h"
+
+#if 0
+
+#define pm_ram_log(fmt, args...)      	\
+{	\
+	pm_printk("[SLP] " fmt, ##args);	\
+}
+#else
+#define pm_ram_log(fmt, args...)      	\
+{	\
+	printk(KERN_INFO "[SLP] " fmt, ##args);	\
+}
+
+#endif
+
+#define ZX_IRQ_NUM			(IRQ_ZX297520V3_SPI_NUM + 32)
+
+#define PCU_LOCK		reg_spin_lock();
+#define PCU_UNLOCK		reg_spin_unlock();
+
+static struct zx_pcu_int_info zx297520v3_pcu_int_info[] = 
+{
+	{
+		.pcu_index		= PCU_AP_TIMER1_INT,
+	 	.gic_index		= AP_TIMER1_INT,
+		.status_index	= 51,
+	 	.wake_index		= 0,
+	 	.int_name		= "ap_timer1",
+	 	.irq_type		= IRQ_TYPE_EDGE_RISING,
+	 	.wl_type		= PM_WL_EVENT_AP_TIMER1,
+	},
+	{
+		.pcu_index		= PCU_AP_TIMER2_INT,
+	 	.gic_index		= AP_TIMER2_INT,
+	 	.status_index	= 52,	 	
+		.wake_index 	= 1,
+	 	.int_name		= "ap_timer2",
+	 	.irq_type		= IRQ_TYPE_EDGE_RISING,
+	 	.wl_type		= PM_WL_EVENT_AP_TIMER2,
+	},
+	{
+		.pcu_index		= PCU_ICP_PS2AP_INT,
+		.gic_index		= ICP_PS2AP_INT,
+	 	.status_index	= 53,		
+		.wake_index 	= 2,
+		.int_name		= "icp_ps_ap",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_ICP_PS2AP,
+	},
+	{
+		.pcu_index		= PCU_USB_POWERDWN_UP_INT,
+		.gic_index		= USB_POWERDWN_UP_INT,
+	 	.status_index	= 6,		
+		.wake_index 	= 3,
+		.int_name		= "usb_up",
+		.irq_type		= IRQ_TYPE_EDGE_RISING,
+		.wl_type		= PM_WL_EVENT_USB_POWERDWN_UP,
+	},
+	{
+		.pcu_index		= PCU_USB_POWERDWN_DOWN_INT,
+		.gic_index		= USB_POWERDWN_DOWN_INT,
+	 	.status_index	= 7,		
+		.wake_index 	= 4,
+		.int_name		= "usb_down",
+		.irq_type		= IRQ_TYPE_EDGE_FALLING,
+		.wl_type		= PM_WL_EVENT_USB_POWERDWN_DOWN,
+	},
+	{
+		.pcu_index		= PCU_HSIC_POWERDWN_UP_INT,
+		.gic_index		= HSIC_POWERDWN_UP_INT,
+	 	.status_index	= 8,		
+		.wake_index 	= 5,
+		.int_name		= "hsic_up",
+		.irq_type		= IRQ_TYPE_EDGE_RISING,
+		.wl_type		= PM_WL_EVENT_HSIC_POWERDWN_UP,
+	},
+	{
+		.pcu_index		= PCU_HSIC_POWERDWN_DOWN_INT,
+		.gic_index		= HSIC_POWERDWN_DOWN_INT,
+	 	.status_index	= 9,		
+		.wake_index 	= 6,
+		.int_name		= "hsic_down",
+		.irq_type		= IRQ_TYPE_EDGE_FALLING,
+		.wl_type		= PM_WL_EVENT_HSIC_POWERDWN_DOWN,
+	},
+	{
+		.pcu_index		= PCU_ICP_M02AP_INT,
+		.gic_index		= ICP_M02AP_INT,
+	 	.status_index	= 54,		
+		.wake_index 	= 7,
+		.int_name		= "icp_m0_ap",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_ICP_M02AP,
+	},
+	{
+		.pcu_index		= PCU_RTC_ALARM_INT,
+		.gic_index		= RTC_ALARM_INT,
+	 	.status_index	= 12,		
+		.wake_index 	= 8,
+		.int_name		= "rtc_alarm",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_ALARM,
+	},
+	{
+		.pcu_index		= PCU_RTC_TIMER_INT,
+		.gic_index		= RTC_TIMER_INT,
+	 	.status_index	= 13,		
+		.wake_index 	= 9,
+		.int_name		= "rtc_timer",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_RTC_TIMER,
+	},
+	{
+		.pcu_index		= PCU_KEYPAD_INT,
+		.gic_index		= KEYPAD_INT,
+	 	.status_index	= 14,		
+		.wake_index 	= 10,
+		.int_name		= "kpd",
+		.irq_type		= IRQ_TYPE_EDGE_RISING,
+		.wl_type		= PM_WL_EVENT_KEYPAD,
+	},
+	{
+		.pcu_index		= PCU_SD1_DATA1_INT,
+		.gic_index		= SD1_DATA1_INT,
+	 	.status_index	= 15,		
+		.wake_index 	= 11,
+		.int_name		= "sd1_d1",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_SD1_DATA1,
+	},
+	{
+		.pcu_index		= PCU_EX0_INT,
+		.gic_index		= EX0_INT,
+	 	.status_index	= 30,		
+		.wake_index 	= 14,
+		.int_name		= "ext0",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT0,
+	},
+	{
+		.pcu_index		= PCU_EX1_INT,
+		.gic_index		= EX1_INT,
+	 	.status_index	= 31,		
+		.wake_index 	= 15,
+		.int_name		= "ext1",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT1,
+	},
+	{
+		.pcu_index		= PCU_EX2_INT,
+		.gic_index		= EX2_INT,
+	 	.status_index	= 32,		
+		.wake_index 	= 16,
+		.int_name		= "ext2",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT2,
+	},
+	{
+		.pcu_index		= PCU_EX3_INT,
+		.gic_index		= EX3_INT,
+	 	.status_index	= 33,		
+		.wake_index 	= 17,
+		.int_name		= "ext3",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT3,
+	},
+	{
+		.pcu_index		= PCU_EX4_INT,
+		.gic_index		= EX4_INT,
+	 	.status_index	= 34,		
+		.wake_index 	= 18,
+		.int_name		= "ext4",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT4,
+	},
+	{
+		.pcu_index		= PCU_EX5_INT,
+		.gic_index		= EX5_INT,
+	 	.status_index	= 35,		
+		.wake_index 	= 19,
+		.int_name		= "ext5",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT5,
+	},
+	{
+		.pcu_index		= PCU_EX6_INT,
+		.gic_index		= EX6_INT,
+	 	.status_index	= 36,		
+		.wake_index 	= 20,
+		.int_name		= "ext6",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT6,
+	},
+	{
+		.pcu_index		= PCU_EX7_INT,
+		.gic_index		= EX7_INT,
+	 	.status_index	= 37,		
+		.wake_index 	= 21,
+		.int_name		= "ext7",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT7,
+	},
+	{
+		.pcu_index		= PCU_EX8_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 38,		
+		.wake_index 	= 22,
+		.int_name		= "ext8",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT8,
+	},
+	{
+		.pcu_index		= PCU_EX9_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 39,
+		.wake_index 	= 23,
+		.int_name		= "ext9",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT9,
+	},
+	{
+		.pcu_index		= PCU_EX10_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 40,		
+		.wake_index 	= 24,
+		.int_name		= "ext10",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT10,
+	},
+	{
+		.pcu_index		= PCU_EX11_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 41,		
+		.wake_index 	= 25,
+		.int_name		= "ext11",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT11,
+	},
+	{
+		.pcu_index		= PCU_EX12_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 42,		
+		.wake_index 	= 26,
+		.int_name		= "ext12",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT12,
+	},
+	{
+		.pcu_index		= PCU_EX13_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 43,		
+		.wake_index 	= 27,
+		.int_name		= "ext13",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT13,
+	},
+	{
+		.pcu_index		= PCU_EX14_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 44,		
+		.wake_index 	= 28,
+		.int_name		= "ext14",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT14,
+	},
+	{
+		.pcu_index		= PCU_EX15_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 45,		
+		.wake_index 	= 29,
+		.int_name		= "ext15",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT15,
+	},
+	{
+		.pcu_index		= PCU_SD0_DATA1_INT,
+		.gic_index		= SD0_DATA1_INT,
+	 	.status_index	= 2,		
+		.wake_index 	= 30,
+		.int_name		= "sd0_d1",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_SD0_DATA1,
+	},
+	{
+		.pcu_index		= PCU_ICP_PHY2AP_INT,
+		.gic_index		= ICP_PHY2AP_INT,
+		.status_index	= 55,		
+		.wake_index 	= 31,
+		.int_name		= "icp_phy_ap",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_ICP_PHY2AP,
+	},
+	{
+		.pcu_index		= PCU_GMACPHY_WAKE_INT,
+		.gic_index		= GMACPHY_WAKE_INT,
+		.status_index	= 60,		
+		.wake_index 	= 0xff,
+		.int_name		= "gmacphy_wake",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= 0xff,
+	},
+	{
+		.pcu_index		= PCU_UART0_RXD_INT,
+		.gic_index		= UART0_RXD_INT,
+		.status_index	= 59,		
+		.wake_index 	= 42,
+		.int_name		= "uart0_rxd",
+		.irq_type		= IRQ_TYPE_EDGE_FALLING,
+		.wl_type		= 0xff,
+
+	},
+	{
+		.pcu_index		= PCU_GMAC_INT,
+		.gic_index		= GMAC_INT,
+		.status_index	= 16,		
+		.wake_index 	= 0xff,
+		.int_name		= "gmac",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= 0xff,
+	},
+	{
+		.pcu_index		= PCU_GMACPHY_INT,
+		.gic_index		= GMACPHY_INT,
+		.status_index	= 61,		
+		.wake_index 	= 0xff,
+		.int_name		= "gmacphy",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= 0xff,
+	},
+};
+
+static int zx_pcu_get_irqchip_state(struct irq_data *data,
+				     enum irqchip_irq_state which, bool *val)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_get_irqchip_state)
+		return data->chip->irq_get_irqchip_state(data, which, val);
+
+	return -ENOSYS;
+}
+
+static int zx_pcu_set_irqchip_state(struct irq_data *data,
+				     enum irqchip_irq_state which, bool val)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_set_irqchip_state)
+		return data->chip->irq_set_irqchip_state(data, which, val);
+
+	return -ENOSYS;
+}
+
+static int zx_pcu_nmi_setup(struct irq_data *data)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_nmi_setup)
+		return data->chip->irq_nmi_setup(data);
+
+	return -ENOSYS;
+}
+
+static void zx_pcu_nmi_teardown(struct irq_data *data)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_nmi_teardown)
+		data->chip->irq_nmi_teardown(data);
+}
+
+static int zx_pcu_set_wake(struct irq_data *data, unsigned int on)
+{
+	pcu_set_irq_wake(data->hwirq, on);
+
+/*	pr_info("irq:%d, onoff:%d", data->hwirq, on);*/
+	
+	return 0;
+}
+
+static void zx_pcu_eoi_irq(struct irq_data *data)
+{
+	pcu_clr_irq_pending(data->hwirq);
+
+	irq_chip_eoi_parent(data);
+}
+
+static int zx_pcu_set_type(struct irq_data *data, unsigned int type)
+{
+	unsigned int new_type = type;
+
+	if(!pcu_set_irq_type(data->hwirq, type))
+		new_type = IRQ_TYPE_LEVEL_HIGH;
+
+	return irq_chip_set_type_parent(data, new_type);
+}
+
+static int zx_pcu_set_affinity(struct irq_data *data,
+				 const struct cpumask *dest, bool force)
+{
+/*
+	if (data->hwirq == IRQ_ZX298501_AP_TIMER1)
+		return irq_chip_set_affinity_parent(data, cpumask_of(0), force); // ???
+	else
+*/		return irq_chip_set_affinity_parent(data, dest, force);
+}
+
+static struct irq_chip zx_pcu_chip = {
+	.name			= "PCU",
+	.irq_eoi		= zx_pcu_eoi_irq,
+	.irq_mask		= irq_chip_mask_parent,
+	.irq_unmask		= irq_chip_unmask_parent,
+	.irq_set_wake	= zx_pcu_set_wake,
+	.irq_set_type	= zx_pcu_set_type,
+	
+	.irq_set_affinity		= zx_pcu_set_affinity,
+	.irq_get_irqchip_state	= zx_pcu_get_irqchip_state,
+	.irq_set_irqchip_state	= zx_pcu_set_irqchip_state,
+	.irq_set_vcpu_affinity	= irq_chip_set_vcpu_affinity_parent,
+	.irq_nmi_setup			= zx_pcu_nmi_setup,
+	.irq_nmi_teardown		= zx_pcu_nmi_teardown,	
+	.flags					= IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SET_TYPE_MASKED,
+};
+
+static int zx_pcu_domain_translate(struct irq_domain *d,
+					struct irq_fwspec *fwspec,
+					unsigned long *hwirq,
+					unsigned int *type)
+{
+	if (is_of_node(fwspec->fwnode)) {
+		if (fwspec->param_count != 3)
+			return -EINVAL;
+
+		/* No PPI should point to this domain */
+		if (fwspec->param[0] != 0)
+			return -EINVAL;
+
+		*hwirq = fwspec->param[1];
+		*type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+static int zx_pcu_domain_alloc(struct irq_domain *domain,
+				    unsigned int virq,
+				    unsigned int nr_irqs, void *data)
+{
+	struct irq_fwspec *fwspec = data;
+	struct irq_fwspec parent_fwspec;
+	struct zx_pcu_dev *pcu = domain->host_data;
+	irq_hw_number_t hwirq;
+	unsigned int i;
+
+	if (fwspec->param_count != 3)
+		return -EINVAL;	/* Not GIC compliant */
+	if (fwspec->param[0] != GIC_SPI)
+		return -EINVAL;	/* No PPI should point to this domain */
+
+	hwirq = fwspec->param[1];
+	if (hwirq >= ZX_IRQ_NUM)
+		return -EINVAL;
+
+	for (i = 0; i < nr_irqs; i++) {
+		irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i,
+					      &zx_pcu_chip,
+					      (void __force *)pcu->top_reg_base);
+	}
+
+	parent_fwspec = *fwspec;
+	parent_fwspec.fwnode = domain->parent->fwnode;
+	return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs,
+					    &parent_fwspec);
+}
+
+static const struct irq_domain_ops zx_pcu_domain_ops = {
+	.translate	= zx_pcu_domain_translate,
+	.alloc		= zx_pcu_domain_alloc,
+	.free		= irq_domain_free_irqs_common,
+};
+
+static int __init zx_pcu_init(struct device_node *node,
+				   struct device_node *parent)
+{
+	struct irq_domain *parent_domain, *domain;
+	struct zx_pcu_dev *pcu;
+
+	if (!parent) {
+		pr_err("%pOF: no parent found\n", node);
+		return -ENODEV;
+	}
+
+	parent_domain = irq_find_host(parent);
+	if (!parent_domain) {
+		pr_err("%pOF: unable to obtain parent domain\n", node);
+		return -ENXIO;
+	}
+
+	pcu = &pcu_dev;
+	pcu->np				= node;
+	pcu->top_reg_base	= of_iomap(node, 0);
+	WARN(!pcu->top_reg_base, "unable to map top pcu registers\n");
+
+	pcu->int_info = zx297520v3_pcu_int_info;
+	pcu->int_count = ARRAY_SIZE(zx297520v3_pcu_int_info);
+
+	pcu_init();
+
+	domain = irq_domain_add_hierarchy(parent_domain, 0, ZX_IRQ_NUM,
+					  node, &zx_pcu_domain_ops,
+					  pcu);
+	if (!domain) {
+		pr_err("%pOF: failed to allocated domain\n", node);
+		return -ENOMEM;
+	}
+
+//	set_smp_cross_call();
+	pm_pcu_init();
+
+	return 0;
+}
+
+IRQCHIP_DECLARE(zx297520v3_pcu, "zte,zx297520v3-pcu", zx_pcu_init);
+
+/* pcu debug */
+#ifdef CONFIG_PM
+#define PCU_TOP						(pcu_dev.top_reg_base)
+
+#define ARM_AP_CONFIG_REG           (PCU_TOP + 0x0)
+#define ARM_AP_SLEEP_TIME_REG       (PCU_TOP + 4*0x3C)
+#define AP_INT_WAKE_DIS_REG        	(PCU_TOP + 4*0xD)
+#define CORE_SWITCH_CONFIG_REG    	(PCU_TOP + 4*0x2b)
+
+#define M0_INT_WAKE_DIS_REG        	(PCU_TOP + 4*0xE)
+#define PCU_INT_READOUT_REG1		(PCU_TOP + 4*0x1EB)
+#define PCU_INT_READOUT_REG2		(PCU_TOP + 4*0x1EC)
+#define PCU_INT_READOUT_REG3		(PCU_TOP + 4*0x1ED)
+
+
+/*ARM_AP_CONFIG_REG*/
+#define	PCU_SLEEP_MODE				(1U << 0)
+#define	PCU_POWEROFF_MODE			(1U << 1)
+#define	PCU_L2_CLK_GATE				(1U << 2)		/*1-can turn off*/
+#define PCU_SLEEP_2M0               (1U << 3)
+#define	PCU_SLEEP_DONE_BYPASS		(1U << 4)	 	
+#define	PCU_SW_CONFIG_MASK			(1U << 5)	 	/* ?????  */
+
+#define	PCU_MODE_MASK				(0x3U << 0)
+
+/*ARM_AP_SLEEP_TIME_REG*/
+#define	PCU_AP_SLEEP_TIME_DIS       (1U << 31)
+
+
+
+/* low power function */
+extern unsigned int pm_get_wakesource(void);
+
+/**
+ * clear pcu sleep mode.
+ * 
+ */
+void pm_clear_pcu(void)
+{
+	zx_clr_reg(ARM_AP_CONFIG_REG, PCU_MODE_MASK);
+}
+
+void pm_pcu_init(void)
+{
+	zx_clr_reg(ARM_AP_CONFIG_REG, PCU_MODE_MASK);
+	zx_set_reg(ARM_AP_CONFIG_REG, PCU_L2_CLK_GATE);
+	zx_write_reg(AP_INT_WAKE_DIS_REG, ~(pm_get_wakesource()));
+}
+
+void zx_apmgclken_set(unsigned en)
+{
+	unsigned tmp;
+	if(en){
+		//set ps_clk_switch=1
+		tmp = zx_read_reg(CORE_SWITCH_CONFIG_REG);
+		tmp |= (0x1<<2);
+		zx_write_reg(CORE_SWITCH_CONFIG_REG, tmp);
+	} else{
+		//set ps_clk_switch=0
+		tmp = zx_read_reg(CORE_SWITCH_CONFIG_REG);
+		tmp &= ~(0x1<<2);
+		zx_write_reg(CORE_SWITCH_CONFIG_REG, tmp);
+	}
+}
+
+
+/**
+ * config pcu before poweroff
+ * 
+ */
+void pm_set_pcu_poweroff(u32 sleep_time)
+{
+	zx_set_reg(ARM_AP_CONFIG_REG, PCU_POWEROFF_MODE);
+	zx_write_reg(ARM_AP_SLEEP_TIME_REG, sleep_time);
+}
+EXPORT_SYMBOL(pm_set_pcu_poweroff);
+
+
+/**
+ * config pcu before sleep
+ * 
+ */
+void pm_set_pcu_sleep(u32 sleep_time)
+{
+	zx_set_reg(ARM_AP_CONFIG_REG, PCU_SLEEP_MODE);
+	zx_write_reg(ARM_AP_SLEEP_TIME_REG, sleep_time);
+}
+
+/**
+ * get wakeup setting.
+ * 
+ */
+unsigned int pcu_get_wakeup_setting(void)
+{
+	return zx_read_reg(AP_INT_WAKE_DIS_REG);
+}
+/**
+ * set wakeup enable by gic.
+ * 
+ * 
+ */
+unsigned int  gic_wake_enable[3]=
+{
+	(1<<ICP_PS2AP_INT) |(1<<ICP_M02AP_INT) | (1<<AP_TIMER1_INT) | (1<<EX8IN1_INT),
+	0, 
+	0
+};
+
+extern void show_icp_state(T_RpMsg_CoreID actorID);
+void pm_get_wake_cause(void)
+{
+	unsigned int	int_status[2];
+	int 			i = 0;
+	int 			index_found = 0xff;
+	unsigned int	pcu_wake_setting[2];
+		
+	/* when wake up, the level is high&the value is 0*/
+	int_status[0] = zx_read_reg(PCU_INT_READOUT_REG1);
+	int_status[1] = zx_read_reg(PCU_INT_READOUT_REG2);
+
+	pcu_wake_setting[0] = zx_read_reg(AP_INT_WAKE_DIS_REG);
+	pcu_wake_setting[1] = zx_read_reg(M0_INT_WAKE_DIS_REG);
+
+	for(i=0; i<ARRAY_SIZE(zx297520v3_pcu_int_info); i++)
+	{
+		if (zx297520v3_pcu_int_info[i].wake_index == 0xff)
+			continue;
+
+		if(pcu_wake_setting[0]&BIT(zx297520v3_pcu_int_info[i].wake_index))	
+			continue;
+
+		if(int_status[zx297520v3_pcu_int_info[i].status_index/32]&(1<<(zx297520v3_pcu_int_info[i].status_index%32)))
+			continue;
+
+		index_found = i;
+		break;
+	}
+	
+	if(index_found != 0xff)
+	{
+		pm_ram_log(" wake: %d  [%s]\n", zx297520v3_pcu_int_info[index_found].gic_index, zx297520v3_pcu_int_info[index_found].int_name);
+		sc_debug_info_record(MODULE_ID_CAP_PM, " wake: %d  [%s]\n", zx297520v3_pcu_int_info[index_found].gic_index, zx297520v3_pcu_int_info[index_found].int_name);
+
+		if(zx297520v3_pcu_int_info[index_found].gic_index ==ICP_PS2AP_INT) {
+			show_icp_state(CORE_PS0);
+		}
+		pm_ram_log(" pcu int status:0x%x 0x%x\n",int_status[0], int_status[1]);
+
+		pm_wl_set_event(pcu_get_wl_index_by_gic(zx297520v3_pcu_int_info[index_found].gic_index));
+	}
+	else
+	{
+		pm_ram_log(" wake abnormal\n");
+		pm_ram_log(" pcu int status:0x%x 0x%x\n",int_status[0], int_status[1]);
+	}
+}
+
+static struct wakeup_source *zx_main_ws;
+static int zx_pcu_pm_callback(struct notifier_block *nb,
+			unsigned long action, void *ptr)
+{
+	switch (action) {
+
+	case PM_POST_SUSPEND:
+		__pm_wakeup_event(zx_main_ws, 500);//LYNQ_AUTOSUSPEND add for bug-view-372 by jb.qi on 20241114	
+		break;
+
+	default:
+		return NOTIFY_DONE;
+	}
+
+	return NOTIFY_OK;
+}
+
+static int pcu_pm_suspend(void)
+{
+	int ret = 0;
+
+	return ret;
+}
+
+static void pcu_pm_resume(void)
+{
+//	pcu_get_wake_cause();
+}
+
+static struct syscore_ops pcu_pm_syscore_ops = {
+	.suspend = pcu_pm_suspend,
+	.resume = pcu_pm_resume,
+};
+
+static int pcu_pm_init(void)
+{
+	zx_main_ws = wakeup_source_register(NULL, "zx_main");
+	if (!zx_main_ws)
+		return -ENOMEM;
+
+	pm_notifier(zx_pcu_pm_callback, 0);
+
+	register_syscore_ops(&pcu_pm_syscore_ops);
+	return 0;
+}
+core_initcall(pcu_pm_init);
+#endif
+
+/* --------------------------------------------------------------------
+ * extint_8in1
+ * -------------------------------------------------------------------- */
+
+struct ext8in1_info {
+	struct irq_domain   *domain;
+	struct regmap 		*regmap;
+	int                 parent_irq;
+	
+};
+
+struct ext8in1_info ext8in1_dev = {0};
+
+/*
+ * return external interrupt number from ex8-ex15,
+ * return value is 0-7
+ */
+static unsigned int pcu_get_8in1_int_source(void)
+{  
+	unsigned int vector_8in1 = 0;
+ 
+	vector_8in1 = zx_read_reg(pcu_dev.top_reg_base+0x12C);	 
+	
+	return 	(vector_8in1&0x7);
+}
+ 
+
+/*external int 8-15 need extra clear*/
+static void pcu_int_clear_8in1(unsigned int pcu_index)
+{	
+	unsigned int vector=0;
+	
+	if ( (pcu_index >= PCU_EX8_INT)&&(pcu_index <= PCU_EX15_INT) )
+	{
+		/*
+		 *in 7510 platform, 8in1 interrupt would be used by different cores.
+		 *when any core installs a new 8in1 interrupt, another core may be 
+		 * responding another 8in1 interrupt, so  8in1 interrupt shouldn't be 
+		 *cleared. in this case, nothing to be done. but a new problem comes,
+		 * the core install new  8in1 interrupt will receive a fake interrupt.
+		 */
+		vector = pcu_get_8in1_int_source();
+		if (pcu_index != (vector + PCU_EX8_INT) )
+			return;
+
+		PCU_LOCK
+   		zx_write_reg(pcu_dev.top_reg_base+0x128, 0x1);
+		PCU_UNLOCK
+
+		pcu_int_clear(pcu_index);
+	}
+}
+
+static void ext8in1_irq_lock(struct irq_data *data){}
+static void ext8in1_irq_sync_unlock(struct irq_data *data){}
+static void ext8in1_irq_mask(struct irq_data *data){}
+static void ext8in1_irq_unmask(struct irq_data *data){}
+static int ext8in1_irq_set_wake(struct irq_data *data, unsigned int on)
+{
+	if (!data)
+		return -EINVAL;
+
+	pcu_set_irq_wake_by_pcu(data->hwirq + PCU_EX8_INT, on);
+
+	return 0;
+}
+
+static int ext8in1_irq_set_type(struct irq_data *data, unsigned int type)
+{
+	if (!data)
+		return -EINVAL;
+
+	pcu_int_set_type(data->hwirq + PCU_EX8_INT, type);
+
+	pcu_int_clear_8in1(data->hwirq + PCU_EX8_INT);
+
+	return 0;
+}
+
+static struct irq_chip ext8in1_irq_chip =
+{
+    .name           		= "ext8in1",
+
+	.irq_set_wake			= ext8in1_irq_set_wake,
+	.irq_set_type			= ext8in1_irq_set_type,
+	.irq_mask				= ext8in1_irq_mask,
+	.irq_unmask				= ext8in1_irq_unmask,
+	.irq_bus_lock			= ext8in1_irq_lock,
+	.irq_bus_sync_unlock	= ext8in1_irq_sync_unlock,
+};
+
+static void ext8in1_handle_irq(struct irq_desc *desc)
+{
+	struct ext8in1_info *data = irq_desc_get_handler_data(desc);
+	struct irq_chip *chip = irq_desc_get_chip(desc);
+	int virq;
+	int hwirq, new_hwirq;
+
+	chained_irq_enter(chip, desc);
+   
+    hwirq = pcu_get_8in1_int_source();
+
+	while(1) {
+		pcu_int_clear_8in1(hwirq + PCU_EX8_INT);
+
+		virq = irq_find_mapping(data->domain, hwirq);
+		if (virq > 0)
+			generic_handle_irq(virq);
+
+		new_hwirq = pcu_get_8in1_int_source();
+        if (hwirq == new_hwirq)
+            break;
+        else
+            hwirq = new_hwirq;
+	}
+
+	chained_irq_exit(chip, desc);
+}
+
+extern void mask_irq(struct irq_desc *desc);
+extern void unmask_irq(struct irq_desc *desc);
+static int ext8in1_irq_resume(struct device *dev)
+{
+	unmask_irq(irq_to_desc(ext8in1_dev.parent_irq));
+
+	return 0;
+}
+
+static int ext8in1_irq_suspend(struct device *dev)
+{
+	mask_irq(irq_to_desc(ext8in1_dev.parent_irq));
+
+	return 0;
+}
+
+static int zx_ext8in1_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct device_node *parent_np;
+	struct regmap *regmap;
+	struct ext8in1_info *data = &ext8in1_dev;
+	int i;
+
+	parent_np = of_parse_phandle(pdev->dev.of_node, "parent-syscon", 0);
+	if (!parent_np) {
+		dev_err(&pdev->dev, "Can't get parent-syscon\n");
+		return -EINVAL;
+	}
+	
+	regmap = syscon_node_to_regmap(parent_np);
+	if (IS_ERR(regmap)) {
+		of_node_put(parent_np);
+		return PTR_ERR(regmap);
+	}	
+	data->regmap = regmap;
+
+	data->parent_irq = platform_get_irq(pdev, 0);
+	if (data->parent_irq <= 0)
+		return -EPROBE_DEFER;
+
+	data->domain = irq_domain_add_linear(np, 8, &irq_domain_simple_ops, NULL);
+	if (!data->domain)
+		return -ENODEV;
+
+	for (i = EX8_INT; i <= EX15_INT; i++) {
+		int virq = irq_create_mapping(data->domain, i);
+
+		irq_set_chip_and_handler(virq, &ext8in1_irq_chip,
+					 handle_simple_irq);
+		irq_set_chip_data(virq, data);
+	}
+
+	irq_set_chained_handler_and_data(data->parent_irq,
+					 ext8in1_handle_irq, data);
+	enable_irq_wake(data->parent_irq);
+
+	pr_info("zx_ext8in1 init OK. \n");
+
+	return 0;
+}
+
+static const struct of_device_id zx_ext8in1_match[] = {
+	{ .compatible = "zte,zx297520v3-ext8in1" },
+	{ }
+};
+
+static const struct dev_pm_ops ext8in1_irq_pm_ops = {
+	.resume = ext8in1_irq_resume,
+	.suspend = ext8in1_irq_suspend,
+};
+
+static struct platform_driver zx_ext8in1_driver = {
+	.probe = zx_ext8in1_probe,
+	.driver = {
+		.name = "zx_ext8in1_drv",
+		.of_match_table = zx_ext8in1_match,
+		.pm = &ext8in1_irq_pm_ops,
+	},
+};
+
+static int __init zx_ext8in1_driver_init(void)
+{
+	return platform_driver_register(&zx_ext8in1_driver);
+}
+core_initcall(zx_ext8in1_driver_init);
+
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
new file mode 100755
index 0000000..e90d0da
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
@@ -0,0 +1,472 @@
+require conf/distro/include/cpe-base.inc
+
+DISTRO          = "vehicle_dc_ref"
+DISTRO_NAME     = "zxic Distro vehicle_dc_ref"
+DISTRO_VERSION  = "1.0"
+SDK_VENDOR      = "-zxic"
+MAINTAINER      = "Sanechips Co.，Ltd."
+TARGET_VENDOR   = "-zxic"
+
+## OPTEE
+DISTRO_FEATURES += "OPTEE"
+meta_optee += " ${@bb.utils.contains("DISTRO_FEATURES", "OPTEE", " optee-client optee-example  ", "", d)} "
+
+PREFERRED_PROVIDER_virtual/kernel  = "linux-zxic"
+PREFERRED_VERSION_linux-zxic      = "5.10.156"
+PREFERRED_VERSION_busybox      = "1.33.1"
+#PREFERRED_VERSION_openssl      = "1.1.1l"
+
+TCLIBC = "glibc"
+VIRTUAL-RUNTIME_dev_manager   = "busybox-mdev"
+VIRTUAL-RUNTIME_login_manager = "busybox"
+VIRTUAL-RUNTIME_init_manager  = "busybox"
+VIRTUAL-RUNTIME_initscripts   = "initscripts"
+
+# #
+# # Use systemd for system initialization
+# #
+# VIRTUAL-RUNTIME_init_manager        = "systemd"
+# PREFERRED_PROVIDER_udev             = "systemd"
+# PREFERRED_PROVIDER_udev-utils       = "systemd"
+# DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
+# VIRTUAL-RUNTIME_initscripts         = ""
+# DEFAULT_DISTRO_FEATURES           += "systemd"
+# DISTRO_FEATURES_append              = " systemd"
+# DISTRO_FEATURES_remove              = "sysvinit"
+
+KERNEL_DEVICETREE = " \
+	zx297520v3-vehicle_dc_ref.dtb     \
+"
+# selinux 配置
+DISTRO_FEATURES_append=" selinux "
+
+# 默认是强制模式 enforcing ，调试建议采用宽容模式 permissive
+DEFAULT_ENFORCING = "permissive"
+
+# selinux 策略
+PREFERRED_PROVIDER_virtual/refpolicy ?= "refpolicy-mls"
+
+## adb login
+DISTRO_FEATURES += "adb_login"
+
+# storage type: nand or emmc
+STRORAGE_TYPE = "nand"
+STRORAGE_CONF = "nand-config-4k"
+require conf/distro/include/${STRORAGE_CONF}.inc
+
+#rootfs文件系统类型
+IMAGE_FSTYPES  = "squashfs"
+#IMAGE_FSTYPES  = "cpio.gz"
+
+
+#rootfs文件系统squashfs参数配置，压缩方式和块大小可以更改
+#squashfs_xz squashfs_zstd
+DISTRO_FEATURES_append = " squashfs_zstd "
+ROOTFS_SQUASHFS_ARGS = "-nopad -noappend -root-owned -b 256k -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -processors 1"
+ROOTFS_SQUASHFS_ARGS += " ${@bb.utils.contains("DISTRO_FEATURES", "selinux", "-xattrs", "", d)} "
+ROOTFS_SQUASHFS_ARGS += "${@bb.utils.contains("DISTRO_FEATURES", "squashfs_zstd", " -comp zstd ","", d)}"
+ROOTFS_SQUASHFS_ARGS += "${@bb.utils.contains("DISTRO_FEATURES", "squashfs_xz", " -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 ","", d)}"
+
+#userdata文件系统类型
+USERDATA_FSTYPE       = "ubi"
+USERDATA_UBINIZE_CFG  = "userdata-ubi-default.cfg"
+OEMDATA_UBINIZE_CFG   = "oemdata-ubi-default.cfg"
+
+#userdata ext4 文件系统大小
+USERDATA_EXT4SIZE = "194018"
+
+#
+# system initialization
+#
+DISTRO_FEATURES_append = " sysvinit "
+
+
+#是否支持MMI LCD功能
+#DISTRO_FEATURES += "MMI_LCD"
+#语音控制
+DISTRO_FEATURES += "voice_alsa"
+DISTRO_FEATURES += "use_voice_buffer"
+#DISTRO_FEATURES += "voice_at"
+
+#cap_oem.img
+DISTRO_FEATURES += " oemfs "
+
+#dm-verity for squashfs
+DISTRO_FEATURES += " dm-verity "
+
+
+#CUSTOM_MACRO在各个产品不变的宏放到cpe-base.inc文件，变化的宏放在产品发布文件。
+CUSTOM_MACRO  += " -D_GNU_SOURCE "
+
+#产品linux kernel配置，主要区分cpe、v2x、mdl,fpga文件在./meta-zxic/recipes-kernel/linux/files目录下
+#BOOT_CTL:版本的启动方式，normal/recovery，如：linux-5_4-fpga-normal.defconfig
+LINUX_BASE_CONFIG = "linux-5_10-${DISTRO}-${BOOT_CTL}-defconfig"
+
+#型号机linux kernel配置，主要区分mdlxx、mdlyy等型号机,文件在./meta-zxic-custom/recipes-kernel/linux/files目录下
+#BOOT_CTL:版本的启动方式，normal/recovery，如：linux-5_4-mdl-normal.cfg
+LINUX_CONFIG = "linux-5_10-${DISTRO}-${BOOT_CTL}.cfg"
+
+#busybox 配置 文件在./meta-zxic/recipes-core/busybox/files目录下
+BUSYBOX_CONFIG = "${DISTRO}-${BOOT_CTL}-busybox.cfg"
+
+##############################################################################
+# custom macro for lib and app
+CUSTOM_MACRO  		+= " -DAPP_OS_LINUX=1 "
+CUSTOM_MACRO	 	+= " -DAPP_OS_TYPE=APP_OS_LINUX "
+
+ENABLE_TESTBENCH_TTY  =  "no"
+##testbench macro for mode,notty=0 single=1 uchm=2
+CUSTOM_MACRO += " -DTTY_MODE_NO=0 "
+CUSTOM_MACRO += " -DTTY_MODE_SINGLE=1 "
+CUSTOM_MACRO += " -DTTY_MODE_MUX=2 "
+CUSTOM_MACRO += " -DUSE_UBIFS "
+CUSTOM_MACRO += " -DUSE_CAP_SUPPORT "
+CUSTOM_MACRO += " -DFOTA_AB "
+CUSTOM_MACRO += "${@bb.utils.contains('ENABLE_TESTBENCH_TTY', 'yes', '-DTESTBENCH_TTY_MODE=TTY_MODE_SINGLE', '-DTESTBENCH_TTY_MODE=TTY_MODE_NO', d)}"
+CONFIG_MMI_LCD = "${@bb.utils.contains("DISTRO_FEATURES", "MMI_LCD", "yes","no", d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('CONFIG_MMI_LCD', 'yes', '', '-DDISABLE_LCD', d)}"
+USE_ZXIC_WEBUI = "no"
+CONFIG_USE_WEBUI_SSL="yes"
+CONFIG_USE_WEBUI_SECURITY="yes"
+#security compile options
+CFLAGS_append  = " -Wl,-z,noexecstack"
+SECURITY_PIE_CFLAGS = " -pie -fPIE"
+SECURITY_STACK_PROTECTOR = " -fstack-protector-all"
+#CUSTOM_MACRO += " -D_USE_CODEC_TI3100 "
+#CUSTOM_MACRO += " -D_USE_CODEC_NAU8810 "
+#CUSTOM_MACRO += " -D_USE_CODEC_TI3104 "
+#CUSTOM_MACRO += " -D_USE_CODEC_MAX9867 "
+CUSTOM_MACRO += " -D_USE_CODEC_ES8311 "
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'voice_alsa', '-D_USE_VOICE_ALSA', '', d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'use_voice_buffer', '-D_USE_VOICE_BUFFER', '', d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'voice_at', '-D_USE_VOICE_AT', '', d)}"
+#CONFIG_VB_TRANSMIT_INTF = "RTP"
+#CONFIG_VB_TRANSMIT_INTF = "USB"
+CONFIG_VB_TRANSMIT_INTF = "NULL"
+CUSTOM_MACRO += "${@bb.utils.contains('CONFIG_VB_TRANSMIT_INTF', 'RTP', '-D_VB_TRANSMIT_INTF_RTP', '', d)}"
+CUSTOM_MACRO += "${@bb.utils.contains('CONFIG_VB_TRANSMIT_INTF', 'USB', '-D_VB_TRANSMIT_INTF_USB', '', d)}"
+#wifi 配置
+#"mt7916" "" "" ""
+CONFIG_WIFI_MODULE = "mt7916"
+#"apsta" "sta" "ap"
+CONFIG_WIFI_FUNCTION = "ap"
+#wificfg       = "${@bb.utils.contains('CONFIG_WIFI_FUNCTION', 'ap', bb.utils.contains('CONFIG_WIFI_MODULE', 'esp8089', 'lib32-hostapd-2.6', '', d), '', d)}"
+
+#BL接口支持("BL")，RIL接口支持("RIL")
+CONFIG_TEL_API_SUPPORT = "RIL"
+
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'BL', '-D_USE_BL', '', d)}"
+
+#RIL AT通道支持RPMSG模式
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', '-DZXIC_ATCHN_RPMSG_MODE', '', d)}"
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', '-DUSE_CUSTOM_YK', '', d)}"
+
+DISTRO_FEATURES += " vehicle_dc_ref "
+CUSTOM_MACRO += "${@bb.utils.contains('DISTRO_FEATURES', 'vehicle_dc_ref', '-D_USE_VEHICLE_DC_REF', '', d)}"
+
+#多媒体编解码库支持类型"FFMPEG"，"NONE"
+CONFIG_MSMSVR_CODEC_TYPE = "NONE"
+CUSTOM_MACRO  		+= "${@bb.utils.contains('CONFIG_MSMSVR_CODEC_TYPE', 'FFMPEG', '-D_USE_FFMPEG', '', d)}"
+
+#是否使用新的信号强度命令
+CONFIG_USE_NEW_SIGNAL_STRENGTH = "yes"
+
+# app and libs 配置
+#normal的版本应用及库
+zxic_lib += "\
+	libnvram \
+	libatchn \
+	libsofttimer \
+	libzxic-pbm \
+	libsoftap \
+	libatutils \
+	libsqlite \
+	libscipc \
+	libsctel \
+	libbsp \
+	libtinyalsa\
+	libvoice \
+	libmedia \
+	libdebug-info \	
+	libmtd \
+	libsclog \
+	libupi-ab \
+	libbinder \
+	libflags \
+	libmsmsvr \
+	libscrtc \
+        liblynq-uci \
+        liblynq-shm \
+        liblynq-log \
+        libapn \
+        libpal \
+        libvendor-ril \
+        liblynq-call \
+        liblynq-sim \
+        liblynq-network \
+        liblynq-sms \
+        liblynq-data \
+        liblynq-qser-voice \
+        liblynq-qser-sim \
+        liblynq-qser-sms \
+        liblynq-qser-thermal \
+        liblynq-qser-data \
+        liblynq-qser-network \
+        liblynq-qser-gnss \
+        liblynq-qser-fota \
+        liblynq-qser-audio \
+        liblynq-qser-usb \
+        liblynq-qser-wifi \
+        libpoweralarm \
+        liblynq-systime \
+        liblynq-autosuspend \
+        liblynq-qser-autosuspend \
+        liblynq-at-factory \
+        liblynq-gpio \
+        liblynq-irq \
+        liblynq-at-common \
+        liblynq-led \
+        liblynq-adc \
+        liblynq-monitor \
+	"
+
+zxic_lib += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'libril', 'libtelsvr', d)}"
+zxic_lib += "${@bb.utils.contains('CONFIG_VB_TRANSMIT_INTF', 'RTP', 'librtp', '', d)}"
+#zxic自研应用	
+zxic_app_open += "\
+	nvserver cfg-tool adb ab-bootinfo \
+	at-ctl \
+	atchn-test \
+	zxic-mainctrl \
+	zxic-mmi \
+	zxic-script \
+	zxic-hotplug \
+	zxic-ramdump \
+	sntp \
+	zxic-ipv6-slaac \
+	zxic-ipv6-addr-conver \
+	zxic-ndp \
+	rtc-service \
+	dhcp6 \
+	fscheck \
+	nv-rpc-daemon \
+	zlog-agent \
+	cc-demo \
+	sim-demo \
+	sms-demo \
+	socket-demo \
+	i2ctest \
+	spitest \
+	uarttest \
+	bsp-test \
+	zxic-debug \
+	crc \
+	crc-api \
+	voiceipc-mainctrl \
+	voice-demo \
+	fsmonitor \
+	ethtest \
+	sc-at-test \
+	dialtest \
+	sc-nw-mgr-test \
+	sc-cfg-test \
+	sc-softtimer-test \
+	sc-log-test \
+	sc-shm-test \
+	sc-msg-test \
+	adctest \
+	rtc-timer-demo \
+	tsctest \
+	fota-upi-ab \
+	sc-net-test \	
+	usbtest \
+  	zxic-amt \
+	wlan-proxy \
+	wifi-demo \
+	mnet-whitelist \
+	mnet-whitelist-proxy \
+	flags-tool \
+	msm-svr \
+	phymiitest \
+	player-demo \
+	servicemanager \
+	service \
+	service-test \
+	i2cslavetest \
+	fota-auto-sync \
+	softap-demo \
+	lynq-ril-service \
+	lynq-sdk-ready \
+        lynq-led-demo \
+        lynq-led-sev \
+        uci \
+        gdb \
+        mobiletek-tester-rdit \
+        lynq-qser-voice-demo \
+        lynq-qser-fota-demo \
+        lynq-qser-gnss-demo \
+        lynq-qser-network-demo \
+        poweralarm-demo \
+        lynq-systime-demo \
+        lynq-fota-backup \
+        lynq-qser-sim-demo \
+        lynq-qser-sms-demo \
+        lynq-qser-data-demo \
+        lynq-qser-thermal-demo \
+        lynq-autosuspend \
+	lynq-atcid \
+        lynq-qser-autosuspend-demo \
+        lynq-gpio-demo \
+        lynq-irq-demo \
+        lynq-gnss-update \
+        lynq-audio-demo \
+        lynq-usb-demo \
+        lynq-wifi-demo \
+        lynq-adc-demo \
+        lynq-at-test \
+        lynq-monitor-demo \
+        "
+
+zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'rild', '', d)}"
+zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'BL', 'tel-svr', '', d)}"
+
+#开源应用及库	
+meta_app_open += "\
+	dropbear \
+	dbus \
+	e2fsprogs \
+	iptables \
+	curl \
+	dnsmasq \	
+	dhcp6 \
+	radvd \
+	iproute2 \
+	busybox-syslog \
+	ethtool \
+	sqlcipher \
+	iperf3 \
+	tcpdump \
+	python3 \
+	openssl-bin \
+	mtd-utils-ubifs \
+	${@bb.utils.contains('DISTRO_FEATURES', 'dm-verity', 'cryptsetup', '', d)} \
+	${meta_optee} \
+	tzdata \
+	fdk-aac-master \
+	opencore-amr \
+	vo-amrwbenc \
+	ffmpeg \
+	python3 \
+	lrzsz \
+	"
+meta_app_open += "${@bb.utils.contains('CONFIG_MSMSVR_CODEC_TYPE', 'FFMPEG', 'fdk-aac-master opencore-amr vo-amrwbenc ffmpeg', '', d)}"
+
+#normal的版本应用及库
+zxic_app += "\
+	${zxic_lib}	\
+	${zxic_app_open} \
+	${meta_app_open} \
+	"
+
+#zxic自研recovery版本的应用
+zxic_app_open_recovery += "\
+	"
+#recovery版本的开源应用及库
+meta_app_open_recovery += "\
+	"
+#recovery的版本应用及库
+zxic_app_recovery += "\
+	${zxic_app_open_recovery} \
+	${meta_app_open_recovery} "
+
+IMAGE_INSTALL +="\
+	${@bb.utils.contains("BOOT_CTL", "recovery", "${zxic_app_recovery}", "${zxic_app}", d)} \ 
+	"
+
+PACKAGE_EXCLUDE = "eudev eudev-dev eudev-dbg"
+PACKAGE_EXCLUDE = "eudev"
+
+#DISTRO   = "lynq_vehicle_dc"
+#DISTRO_NAME   = "lynq distro vehicle_dc"
+RAT_CONFIG_C2K_SUPPORT = "no"
+MTK_MULTI_SIM_SUPPORT = "dsds" 
+TARGET_PLATFORM = "T106"
+MTK_LED_SUPPORT = "yes"
+#support lynq_atsvc [hong.liu add for lynq atsvc on 2022.12.1]
+LYNQ_ATSVC_SUPPORT = "yes"
+
+#GPIO_CFG value:"PLATFORM" , "GENVICT" ,"GSW"
+MOBILETEK_GPIO_CFG = "PLATFORM"
+
+#PLL_CFG value:"PLATFORM","GSW"
+MOBILETEK_PLL_CFG = "PLATFORM"
+
+#RTP_CFG value:"PLATFORM","GSW"
+MOBILETEK_RTP_CFG = "PLATFORM"
+
+#MEDIA_CFG value:"PLATFORM","GSW"
+MOBILETEK_MEDIA_CFG = "PLATFORM"
+
+#LOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_LOG_CFG = "PLATFORM"
+
+#FOTA_CFG value:"PLATFORM","GSW"
+MOBILETEK_FOTA_CFG = "PLATFORM"
+
+#RIL_CFG value:"PLATFORM","GSW"
+MOBILETEK_RIL_CFG = "PLATFORM"
+
+#UART_CFG value:"PLATFORM","GSW"
+MOBILETEK_UART_CFG = "PLATFORM"
+
+#USB_CFG value:"PLATFORM","GSW"
+MOBILETEK_USB_CFG = "PLATFORM"
+
+#ndis_CFG value:"PLATFORM","GSW"
+MOBILETEK_NDIS_CFG = "PLATFORM"
+
+#SUSPEND_CFG value:"PLATFORM","GSW"
+MOBILETEK_SUSPEND_CFG = "PLATFORM"
+
+#MNLDLOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_MNLDLOG_CFG = "PLATFORM"
+
+#OPTEE_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPTEE_CFG = "PLATFORM"
+
+#EMMC_CFG value:"PLATFORM","GSW"
+MOBILETEK_EMMC_CFG = "PLATFORM"
+
+#WIFIKERNELCODE_CFG value:"PLATFORM","GSW"
+MOBILETEK_WIFIKERNELCODE_CFG = "PLATFORM"
+
+#SYSTEMD_CFG value:"PLATFORM","GSW"
+MOBILETEK_SYSTEMD_CFG = "PLATFORM"
+
+#GSTREAMER_CFG value:"PLATFORM","GSW"
+MOBILETEK_GSTREAMER_CFG = "PLATFORM"
+
+#BUSYBOX_CFG value:"PLATFORM","GSW"
+MOBILETEK_BUSYBOX_CFG = "PLATFORM"
+
+#OPENSSH_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPENSSH_CFG = "PLATFORM"
+
+#OEMAPP_CFG value:"PLATFORM","GSW"
+MOBILETEK_OEMAPP_CFG = "PLATFORM"
+
+#cz.li@20240221 add for choosing GNSS's chip: "HD","HX"
+MOBILETEK_GNSS_TYPE = "HD"
+
+#MOBILETEK_ADB_LOGIN value:"YES","NO"
+MOBILETEK_ADB_LOGIN = "NO"
+
+#cz.li@20240221 add for MOBILETEK_GNSS_UPDATE_ENABLE value: "yes","no"
+MOBILETEK_GNSS_UPDATE_ENABLE = "yes"
+
+#xf.li@20240716 add for MOBILETEK_LOG_ENCRYPT value: "enable","disable"
+MOBILETEK_LOG_ENCRYPT = "disable"
+
+LYNQ_CONFIG_COMMITID = "e2a3410390ff0ad762462ccb6af8faa5e16dcd61"
+LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02"
+LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02"
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/conf/lynq_base.conf b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
new file mode 100755
index 0000000..e391546
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/conf/lynq_base.conf
@@ -0,0 +1,72 @@
+#DISTRO   = "lynq_vehicle_dc"
+#DISTRO_NAME   = "lynq distro vehicle_dc"
+RAT_CONFIG_C2K_SUPPORT = "no"
+MTK_MULTI_SIM_SUPPORT = "dsds" 
+TARGET_PLATFORM = "T106"
+MTK_LED_SUPPORT = "yes"
+#support lynq_atsvc [hong.liu add for lynq atsvc on 2022.12.1]
+LYNQ_ATSVC_SUPPORT = "yes"
+
+#GPIO_CFG value:"PLATFORM" , "GENVICT" ,"GSW"
+MOBILETEK_GPIO_CFG = "PLATFORM"
+
+#PLL_CFG value:"PLATFORM","GSW"
+MOBILETEK_PLL_CFG = "PLATFORM"
+
+#RTP_CFG value:"PLATFORM","GSW"
+MOBILETEK_RTP_CFG = "PLATFORM"
+
+#MEDIA_CFG value:"PLATFORM","GSW"
+MOBILETEK_MEDIA_CFG = "PLATFORM"
+
+#LOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_LOG_CFG = "PLATFORM"
+
+#FOTA_CFG value:"PLATFORM","GSW"
+MOBILETEK_FOTA_CFG = "PLATFORM"
+
+#RIL_CFG value:"PLATFORM","GSW"
+MOBILETEK_RIL_CFG = "PLATFORM"
+
+#UART_CFG value:"PLATFORM","GSW"
+MOBILETEK_UART_CFG = "PLATFORM"
+
+#USB_CFG value:"PLATFORM","GSW"
+MOBILETEK_USB_CFG = "PLATFORM"
+
+#ndis_CFG value:"PLATFORM","GSW"
+MOBILETEK_NDIS_CFG = "PLATFORM"
+
+#SUSPEND_CFG value:"PLATFORM","GSW"
+MOBILETEK_SUSPEND_CFG = "PLATFORM"
+
+#MNLDLOG_CFG value:"PLATFORM","GSW"
+MOBILETEK_MNLDLOG_CFG = "PLATFORM"
+
+#OPTEE_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPTEE_CFG = "PLATFORM"
+
+#EMMC_CFG value:"PLATFORM","GSW"
+MOBILETEK_EMMC_CFG = "PLATFORM"
+
+#WIFIKERNELCODE_CFG value:"PLATFORM","GSW"
+MOBILETEK_WIFIKERNELCODE_CFG = "PLATFORM"
+
+#SYSTEMD_CFG value:"PLATFORM","GSW"
+MOBILETEK_SYSTEMD_CFG = "PLATFORM"
+
+#GSTREAMER_CFG value:"PLATFORM","GSW"
+MOBILETEK_GSTREAMER_CFG = "PLATFORM"
+
+#BUSYBOX_CFG value:"PLATFORM","GSW"
+MOBILETEK_BUSYBOX_CFG = "PLATFORM"
+
+#OPENSSH_CFG value:"PLATFORM","GSW"
+MOBILETEK_OPENSSH_CFG = "PLATFORM"
+
+#OEMAPP_CFG value:"PLATFORM","GSW"
+MOBILETEK_OEMAPP_CFG = "PLATFORM"
+
+LYNQ_CONFIG_COMMITID = "9aea88bb79cfb2fae9ddab87f8307126d618aec2"
+LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02"
+LYNQ_CONFIG_SW_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02"
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
new file mode 100755
index 0000000..dd600c2
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/liblynq-qser-gnss/liblynq-qser-gnss.bb
@@ -0,0 +1,64 @@
+#inherit externalsrc package
+
+DESCRIPTION = "liblynq-qser-gnss"
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3f86c7f456a6d0bbeca155e65084eee1"
+DEPENDS += "liblynq-log libxml2 liblynq-uci libsctel libscrtc libbsp liblynq-qser-autosuspend"
+#inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-qser-gnss/"
+FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/lib/:"
+SRC_URI = " \
+          file://liblynq-qser-gnss\
+          "
+
+SRC-DIR = "${S}/../liblynq-qser-gnss"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
+
+EXTRA_OEMAKE += "'MOBILETEK_GNSS_TYPE = ${MOBILETEK_GNSS_TYPE}'"
+
+EXTRA_OEMAKE += "'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
+
+FILES_${PN} += "${bindir} /data/gnss_update"
+FILES_${PN} += "${base_libdir}/*.so "
+FILES_${PN}-dev = "/test \
+                   ${includedir}"
+
+FILES_${PN}-doc = "/doc"
+
+FILES_${PN}-dbg ="${base_bindir}/.debug \
+                  ${base_libdir}/.debug \
+                  ${base_sbindir}/.debug"
+
+INSANE_SKIP_${PN} += "already-stripped"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+        oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"
+}
+
+do_install () {
+    oe_runmake install -C ${SRC-DIR} ROOT=${D}
+
+    if [ -d "${WORKONSRC}" ] ; then
+        install -d ${D}${includedir}/
+        cp -raf ${SRC-DIR}/include/ ${D}${includedir}/
+    fi
+    if [ "${MOBILETEK_GNSS_UPDATE_ENABLE}" = "yes" ]; then
+        install -d ${D}/data/gnss_update
+        install -m 644 ${WORKONSRC}HD8122.YF.GN3.115200.10038.c8069.53ef0.231110R2.GALQS.PPS9.CFG.EPHSave.bin ${D}/data/gnss_update
+        install -m 644 ${WORKONSRC}HD8122.YIKE.GN3.115200.0041.a8fb4.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240912R1.bin ${D}/data/gnss_update
+        install -m 644 ${WORKONSRC}agps.conf ${D}/data/gnss_update
+        ln -sf ./HD8122.YF.GN3.115200.10038.c8069.53ef0.231110R2.GALQS.PPS9.CFG.EPHSave.bin ${D}/data/gnss_update/HD.bin
+        ln -sf ./HD8122.YIKE.GN3.115200.0041.a8fb4.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240912R1.bin ${D}/data/gnss_update/HD_BD.bin
+    fi
+}
+
+addtask bachclean
+do_bachclean () {
+    oe_runmake clean
+}
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
new file mode 100755
index 0000000..ad38820
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
@@ -0,0 +1,626 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <sys/types.h>
+//#include <pthread.h>
+#include <unistd.h>
+#include "lynq_qser_network.h"
+
+#ifndef LOG_TAG
+#define LOG_TAG "QSER_NETWORK_DEMO"
+#endif
+
+void *handle_network;
+
+int (*qser_nw_client_init_p)(nw_client_handle_type  * ph_nw);
+int (*qser_nw_client_deinit_p)(nw_client_handle_type h_nw);
+int (*qser_nw_set_config_p)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info);
+int (*qser_nw_get_operator_name_p)(nw_client_handle_type    h_nw, QSER_NW_OPERATOR_NAME_INFO_T    *pt_info );
+int (*qser_nw_get_reg_status_p)(nw_client_handle_type  h_nw, QSER_NW_REG_STATUS_INFO_T *pt_info);
+int (*qser_nw_add_rx_msg_handler_p)(nw_client_handle_type  h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr,void* contextPtr);
+int (*qser_nw_get_signal_strength_p)(nw_client_handle_type h_nw,QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info);
+int (*qser_nw_set_oos_config_p)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info);
+int (*qser_nw_get_oos_config_p)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info);
+int (*qser_nw_set_rf_mode_p) (nw_client_handle_type   h_nw,E_QSER_NW_RF_MODE_TYPE_T rf_mode);
+int (*qser_nw_get_rf_mode_p) (nw_client_handle_type   h_nw,E_QSER_NW_RF_MODE_TYPE_T* rf_mode);
+int (*qser_nw_set_ims_enable_p) (nw_client_handle_type h_nw,E_QSER_NW_IMS_MODE_TYPE_T ims_mode);
+int (*qser_nw_get_ims_reg_status_p) (nw_client_handle_type h_nw, QSER_NW_IMS_REG_STATUS_INFO_T *pt_info);
+
+
+
+int getFunc()
+{
+    const char *lynq_libpath_network = "/lib/liblynq-qser-network.so";
+
+    handle_network = dlopen(lynq_libpath_network,RTLD_NOW);
+    if(NULL == handle_network)
+    {
+        printf("dlopen lynq_libpath_network fail:%s",dlerror());
+        exit(EXIT_FAILURE);
+    }
+
+    qser_nw_client_init_p = (int (*)(nw_client_handle_type  * ph_nw))dlsym(handle_network,"qser_nw_client_init");    
+    qser_nw_client_deinit_p = (int (*)(nw_client_handle_type h_nw))dlsym(handle_network,"qser_nw_client_deinit");
+    qser_nw_set_config_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_set_config");
+    qser_nw_get_operator_name_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_OPERATOR_NAME_INFO_T  *pt_info ))dlsym(handle_network,"qser_nw_get_operator_name");
+    qser_nw_get_reg_status_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_REG_STATUS_INFO_T  *pt_info))dlsym(handle_network,"qser_nw_get_reg_status");
+    qser_nw_get_signal_strength_p = (int (*)(nw_client_handle_type h_nw, QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_signal_strength");
+    qser_nw_add_rx_msg_handler_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr,void* contextPtr))dlsym(handle_network,"qser_nw_add_rx_msg_handler");
+    qser_nw_get_oos_config_p = (int (*)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_get_oos_config");
+    qser_nw_set_oos_config_p = (int (*)(nw_client_handle_type   h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info))dlsym(handle_network,"qser_nw_set_oos_config");
+    qser_nw_set_rf_mode_p = (int (*)(nw_client_handle_type   h_nw, E_QSER_NW_RF_MODE_TYPE_T rf_mode))dlsym(handle_network,"qser_nw_set_rf_mode");
+    qser_nw_get_rf_mode_p = (int (*)(nw_client_handle_type   h_nw, E_QSER_NW_RF_MODE_TYPE_T* rf_mode))dlsym(handle_network,"qser_nw_get_rf_mode");
+    qser_nw_set_ims_enable_p = (int (*)(nw_client_handle_type  h_nw, E_QSER_NW_IMS_MODE_TYPE_T ims_mode))dlsym(handle_network,"qser_nw_set_ims_enable");
+    qser_nw_get_ims_reg_status_p = (int (*)(nw_client_handle_type  h_nw, QSER_NW_IMS_REG_STATUS_INFO_T  *pt_info))dlsym(handle_network,"qser_nw_get_ims_reg_status");
+        
+    if(qser_nw_client_deinit_p==NULL || qser_nw_client_init_p==NULL || qser_nw_set_config_p ==NULL ||
+       qser_nw_get_operator_name_p == NULL || qser_nw_get_reg_status_p ==NULL || qser_nw_add_rx_msg_handler_p==NULL ||
+       qser_nw_set_rf_mode_p == NULL || qser_nw_get_rf_mode_p == NULL || qser_nw_get_oos_config_p == NULL || qser_nw_set_oos_config_p == NULL || 
+       qser_nw_set_ims_enable_p == NULL || qser_nw_get_ims_reg_status_p == NULL)
+    {
+        printf("get func pointer null");
+        exit(EXIT_FAILURE);
+    }    
+    return  0;    
+}
+
+static int test_nw(void);
+
+int main(int argc, char const *argv[])
+{
+    printf("--------->[%s,%d] start \n",__FUNCTION__,__LINE__);   
+    
+    if(getFunc()==0)
+    {
+        test_nw();
+    }    
+
+    return 0;
+}
+
+typedef struct
+{
+    int  cmdIdx;
+    char *funcName;
+} st_api_test_case;
+
+st_api_test_case at_nw_testlist[] = 
+{
+    {0,     "qser_nw_client_init"},
+    {1,     "qser_nw_set_config"},      
+    {2,     "qser_nw_get_operator_name"},
+    {3,     "qser_nw_get_reg_status"},        
+    {4,     "qser_nw_add_rx_msg_handler"},     
+    {5,     "qser_nw_get_signal_strength"},
+    {6,     "qser_nw_set_oos_config"},
+    {7,     "qser_nw_get_oos_config"},
+    {8,     "qser_nw_set_rf_mode"},
+    {9,     "qser_nw_get_rf_mode"},
+    {10,     "qser_nw_set_ims_enable"},
+    {11,     "qser_nw_get_ims_reg_status"},
+    {12,     "qser_nw_client_deinit"},      
+    {-1,    "quit"}
+};
+
+typedef int (*TEST)(void);
+
+typedef struct
+{
+    char                *group_name;
+    st_api_test_case    *test_cases;
+    TEST                pf_test;
+} func_api_test_t;
+
+func_api_test_t t_nw_test = {"nw", at_nw_testlist, test_nw};
+
+void show_group_help(func_api_test_t *pt_test)
+{
+    int i;
+
+    printf("Group Name:%s, Supported test cases:\n", pt_test->group_name);
+    for(i = 0; ; i++)
+    {
+        if(pt_test->test_cases[i].cmdIdx == -1)
+        {
+            break;
+        }
+        printf("%d:\t%s\n", pt_test->test_cases[i].cmdIdx, pt_test->test_cases[i].funcName);
+    }
+}
+
+static nw_client_handle_type h_nw = 0;
+
+char *tech_domain[] = {"NONE", "3GPP", "3GPP2"};
+char *radio_tech[] = {"unknown", 
+    "TD_SCDMA", "GSM",      "HSPAP",    "LTE",      "EHRPD",    "EVDO_B", 
+    "HSPA",     "HSUPA",    "HSDPA",    "EVDO_A",   "EVDO_0",   "1xRTT", 
+    "IS95B",    "IS95A",    "UMTS",     "EDGE",     "GPRS",     "NONE"};
+
+void nw_event_ind_handler (
+    nw_client_handle_type h_nw, 
+    u_int32_t ind_flag, 
+    void                  *ind_msg_buf, 
+    u_int32_t              ind_msg_len, 
+    void                  *contextPtr)
+{
+    switch(ind_flag) {
+        case NW_IND_VOICE_REG_EVENT_IND_FLAG:
+            {
+                QSER_NW_VOICE_REG_EVENT_IND_T *ind = (QSER_NW_VOICE_REG_EVENT_IND_T*)ind_msg_buf;
+                printf("Recv event indication : VOICE REG EVENT\n");
+                
+                if(ind==NULL)
+                {
+                     printf("ind is NULL\n");
+                     break;
+                }
+
+                if(ind->registration_valid)
+                {
+                    printf("voice_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                            tech_domain[ind->registration.tech_domain], 
+                            radio_tech[ind->registration.radio_tech],
+                            ind->registration.roaming,
+                            ind->registration.registration_state);
+                }
+                if(ind->registration_details_3gpp_valid)
+                {
+                    printf("voice_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                            tech_domain[ind->registration_details_3gpp.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp.radio_tech],
+                            ind->registration_details_3gpp.mcc,
+                            ind->registration_details_3gpp.mnc,
+                            ind->registration_details_3gpp.roaming,
+                            ind->registration_details_3gpp.forbidden,                    
+                            ind->registration_details_3gpp.cid,
+                            ind->registration_details_3gpp.lac,
+                            ind->registration_details_3gpp.psc,
+                            ind->registration_details_3gpp.tac);
+                }
+
+                if(ind->registration_details_3gpp2_valid)
+                {
+                    printf("voice_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
+                            tech_domain[ind->registration_details_3gpp2.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp2.radio_tech],
+                            ind->registration_details_3gpp2.mcc,
+                            ind->registration_details_3gpp2.mnc,
+                            ind->registration_details_3gpp2.roaming,
+                            ind->registration_details_3gpp2.forbidden,                    
+                            ind->registration_details_3gpp2.sid,
+                            ind->registration_details_3gpp2.nid,
+                            ind->registration_details_3gpp2.bsid);
+                }
+
+                break;
+            }
+        case NW_IND_DATA_REG_EVENT_IND_FLAG:
+            {
+                QSER_NW_DATA_REG_EVENT_IND_T *ind = (QSER_NW_DATA_REG_EVENT_IND_T*)ind_msg_buf;
+
+                printf("Recv event indication : DATA REG EVENT\n");
+                
+                if(ind==NULL)
+                {
+                     printf("ind is NULL\n");
+                     break;
+                }
+              
+
+                if(ind->registration_valid)
+                {
+                    printf("data_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                            tech_domain[ind->registration.tech_domain], 
+                            radio_tech[ind->registration.radio_tech],
+                            ind->registration.roaming,
+                            ind->registration.registration_state);
+                }
+                if(ind->registration_details_3gpp_valid)
+                {
+                    printf("data_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                            tech_domain[ind->registration_details_3gpp.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp.radio_tech],
+                            ind->registration_details_3gpp.mcc,
+                            ind->registration_details_3gpp.mnc,
+                            ind->registration_details_3gpp.roaming,
+                            ind->registration_details_3gpp.forbidden,                    
+                            ind->registration_details_3gpp.cid,
+                            ind->registration_details_3gpp.lac,
+                            ind->registration_details_3gpp.psc,
+                            ind->registration_details_3gpp.tac);
+                }
+
+                if(ind->registration_details_3gpp2_valid)
+                {
+                    printf("data_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, prl=%d, css=%d, sid=%d, nid=%d, bsid=%d\n", 
+                            tech_domain[ind->registration_details_3gpp2.tech_domain], 
+                            radio_tech[ind->registration_details_3gpp2.radio_tech],
+                            ind->registration_details_3gpp2.mcc,
+                            ind->registration_details_3gpp2.mnc,
+                            ind->registration_details_3gpp2.roaming,
+                            ind->registration_details_3gpp2.forbidden,   
+                            ind->registration_details_3gpp2.inPRL,
+                            ind->registration_details_3gpp2.css,
+                            ind->registration_details_3gpp2.sid,
+                            ind->registration_details_3gpp2.nid,
+                            ind->registration_details_3gpp2.bsid);
+                }
+
+                break;
+            }
+        case NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG:
+            {
+                QSER_NW_SINGNAL_EVENT_IND_T *ind = (QSER_NW_SINGNAL_EVENT_IND_T*)ind_msg_buf;
+
+                printf("Recv event indication : SIGNAL STRENGTH EVENT\n");
+                
+                if(ind==NULL)
+                {
+                     printf("ind is NULL\n");
+                     break;
+                }
+
+                if(ind->gsm_sig_info_valid)
+                {
+                    printf("gsm_sig_info: rssi=%d\n", 
+                            ind->gsm_sig_info.rssi);
+                } 
+
+                if(ind->wcdma_sig_info_valid)
+                {
+                    printf("wcdma_sig_info: rssi=%d, ecio=%d\n", 
+                            ind->wcdma_sig_info.rssi, 
+                            ind->wcdma_sig_info.ecio);
+                } 
+                if(ind->tdscdma_sig_info_valid)
+                {
+                    printf("tdscdma_sig_info: rssi=%d, rscp=%d, ecio=%d, sinr=%d\n", 
+                            ind->tdscdma_sig_info.rssi, 
+                            ind->tdscdma_sig_info.rscp,
+                            ind->tdscdma_sig_info.ecio,
+                            ind->tdscdma_sig_info.sinr);
+                } 
+                if(ind->lte_sig_info_valid)
+                {
+                    printf("lte_sig_info: rssi=%d, rsrq=%d, rsrp=%d, snr=%d\n", 
+                            ind->lte_sig_info.rssi, 
+                            ind->lte_sig_info.rsrq,
+                            ind->lte_sig_info.rsrp,
+                            ind->lte_sig_info.snr);
+                } 
+                if(ind->cdma_sig_info_valid)
+                {
+                    printf("cdma_sig_info: rssi=%d, ecio=%d\n", 
+                            ind->cdma_sig_info.rssi, 
+                            ind->cdma_sig_info.ecio);
+                } 
+                if(ind->hdr_sig_info_valid)
+                {
+                    printf("hdr_sig_info: rssi=%d, ecio=%d, sinr=%d, io=%d\n", 
+                            ind->hdr_sig_info.rssi, 
+                            ind->hdr_sig_info.ecio,
+                            ind->hdr_sig_info.sinr,
+                            ind->hdr_sig_info.io);
+                }
+                break;
+            }
+        case NW_IND_IMS_REG_EVENT_IND_FLAG:
+            {
+                printf("Recv event indication : IMS REG EVENT\n");               
+                
+                break;
+            }
+        default:
+            break;
+    }
+}
+
+static int test_nw(void)
+{
+    int    cmdIdx  = 0;
+    int    ret     = 0;       
+        
+    while(1)
+    {
+        show_group_help(&t_nw_test);
+        printf("please input cmd index(-1 exit): ");
+        ret = scanf("%d", &cmdIdx);
+        if(ret != 1)
+        {
+            char c;
+            while(((c=getchar()) != '\n') && (c != EOF))
+            {
+                ;
+            }
+            continue;
+        }
+        if(cmdIdx == -1)
+        {
+            break;
+        }
+        switch(cmdIdx)
+        {
+             case 0://"qser_nw_client_init"
+             {
+                 
+                 ret = qser_nw_client_init_p(&h_nw);
+                 printf("qser_nw_client_init ret = %d\n", ret);
+                 break;
+             }
+             case 1://"qser_nw_set_config"
+             {
+                 QSER_NW_CONFIG_INFO_T     t_info = {0};
+                 
+                 int mask = 0;
+                 printf("please input decimal format number,  whose hex format is (TDSCDMA | LTE | EVDO | CDMA | WCDMA | GSM) : \n");
+                 scanf("%d", &mask);
+                 t_info.preferred_nw_mode = mask;
+                 
+                 ret = qser_nw_set_config_p(h_nw, &t_info);
+                 printf("qser_nw_set_config ret = %d\n", ret);
+                 break;
+             }            
+             case 2://"qser_nw_get_operator_name"
+             {
+                 QSER_NW_OPERATOR_NAME_INFO_T  t_info;
+                 ret = qser_nw_get_operator_name_p(h_nw, &t_info);
+                 printf("qser_nw_get_operator_name ret = %d, long_eons=%s, short_eons=%s, mcc=%s, mnc=%s\n", ret,
+                         t_info.long_eons, t_info.short_eons, t_info.mcc, t_info.mnc);
+                 break;
+             }       
+             case 3://"qser_nw_get_reg_status"
+             {
+                 QSER_NW_REG_STATUS_INFO_T         t_info;
+     
+                 memset(&t_info, 0, sizeof(QSER_NW_REG_STATUS_INFO_T));
+                 ret = qser_nw_get_reg_status_p(h_nw, &t_info);
+                 printf("qser_nw_get_reg_status ret = %d, detail info:\n", ret);
+                 if(t_info.voice_registration_valid)
+                 {
+                     printf("voice_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                         tech_domain[t_info.voice_registration.tech_domain], 
+                         radio_tech[t_info.voice_registration.radio_tech],
+                         t_info.voice_registration.roaming,
+                         t_info.voice_registration.registration_state);
+                 }
+                 if(t_info.data_registration_valid)
+                 {
+                     printf("data_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
+                         tech_domain[t_info.data_registration.tech_domain], 
+                         radio_tech[t_info.data_registration.radio_tech],
+                         t_info.data_registration.roaming,
+                         t_info.data_registration.registration_state);
+                 }
+                 if(t_info.voice_registration_details_3gpp_valid)
+                 {
+                     printf("voice_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                         tech_domain[t_info.voice_registration_details_3gpp.tech_domain], 
+                         radio_tech[t_info.voice_registration_details_3gpp.radio_tech],
+                         t_info.voice_registration_details_3gpp.mcc,
+                         t_info.voice_registration_details_3gpp.mnc,
+                         t_info.voice_registration_details_3gpp.roaming,
+                         t_info.voice_registration_details_3gpp.forbidden,                    
+                         t_info.voice_registration_details_3gpp.cid,
+                         t_info.voice_registration_details_3gpp.lac,
+                         t_info.voice_registration_details_3gpp.psc,
+                         t_info.voice_registration_details_3gpp.tac);
+                 }
+                 if(t_info.data_registration_details_3gpp_valid)
+                 {
+                     printf("data_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                         tech_domain[t_info.data_registration_details_3gpp.tech_domain], 
+                         radio_tech[t_info.data_registration_details_3gpp.radio_tech],
+                         t_info.data_registration_details_3gpp.mcc,
+                         t_info.data_registration_details_3gpp.mnc,
+                         t_info.data_registration_details_3gpp.roaming,
+                         t_info.data_registration_details_3gpp.forbidden,                    
+                         t_info.data_registration_details_3gpp.cid,
+                         t_info.data_registration_details_3gpp.lac,
+                         t_info.data_registration_details_3gpp.psc,
+                         t_info.data_registration_details_3gpp.tac);
+                 }
+                 
+                 if(t_info.voice_registration_details_3gpp2_valid)
+                 {
+                     printf("voice_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
+                         tech_domain[t_info.voice_registration_details_3gpp2.tech_domain], 
+                         radio_tech[t_info.voice_registration_details_3gpp2.radio_tech],
+                         t_info.voice_registration_details_3gpp2.mcc,
+                         t_info.voice_registration_details_3gpp2.mnc,
+                         t_info.voice_registration_details_3gpp2.roaming,
+                         t_info.voice_registration_details_3gpp2.forbidden,                    
+                         t_info.voice_registration_details_3gpp2.sid,
+                         t_info.voice_registration_details_3gpp2.nid,
+                         t_info.voice_registration_details_3gpp2.bsid);
+                 }
+                 
+                 if(t_info.data_registration_details_3gpp2_valid)
+                 {
+                     printf("data_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
+                         tech_domain[t_info.data_registration_details_3gpp2.tech_domain], 
+                         radio_tech[t_info.data_registration_details_3gpp2.radio_tech],
+                         t_info.data_registration_details_3gpp2.mcc,
+                         t_info.data_registration_details_3gpp2.mnc,
+                         t_info.data_registration_details_3gpp2.roaming,
+                         t_info.data_registration_details_3gpp2.forbidden,                    
+                         t_info.data_registration_details_3gpp2.sid,
+                         t_info.data_registration_details_3gpp2.nid,
+                         t_info.data_registration_details_3gpp2.bsid);
+                 }
+                             
+                 break;
+             }                 
+             case 12://"qser_nw_client_deinit"
+             {
+                 ret = qser_nw_client_deinit_p(h_nw);
+                 printf("qser_nw_client_deinit ret = %d\n", ret);
+                 break;
+             }       
+             case 4 :
+             {
+                ret = qser_nw_add_rx_msg_handler_p(h_nw, nw_event_ind_handler, NULL);  
+                printf("qser_nw_add_rx_msg_handler, ret=%d\n", ret);
+                break;
+             }
+              case 5 :
+             {
+                QSER_NW_SIGNAL_STRENGTH_INFO_T t_info;
+                ret = qser_nw_get_signal_strength_p(h_nw, &t_info);  
+                printf("qser_nw_get_signal_strength, ret=%d\n", ret);
+                if(ret==0)
+                {                       
+                    printf("qser_solicited_signal_strength gsm_sig_info_valid = %d\n"
+                               "                               gsm_sig_info.rssi = %d\n"
+                               "                               wcdma     _sig_info_valid = %d\n" 
+                               "                               wcdma_sig_info.rssi = %d\n"
+                               "                               wcdma_sig_info.ecio = %d\n"
+                               "                               tdscdma_sig_info_valid = %d\n"
+                               "                               lte_sig_info_valid = %d\n"
+                               "                               lte_sig_info.rssi = %d\n"
+                               "                               lte_sig_info.rsrp = %d\n"
+                               "                               lte_sig_info.rsrq = %d\n"
+                               "                               lte_sig_info.snr = %d\n"
+                               "                               cdma_sig_info_valid = %d\n"
+                               "                               hdr_sig_info_valid = %d\n"
+                               "                               nr_sig_info_valid = %d\n"
+                               "                               nr_sig_info.ssRsrp = %d\n"
+                               "                               nr_sig_info.ssRsrq = %d\n"
+                               "                               nr_sig_info.ssSinr = %d\n"
+                               "                               nr_sig_info.csiRsrp = %d\n"
+                               "                               nr_sig_info.csiRsrq = %d\n"
+                               "                               nr_sig_info.csiSinr = %d\n",
+                              t_info.gsm_sig_info_valid, t_info.gsm_sig_info.rssi,
+                              t_info.wcdma_sig_info_valid, t_info.wcdma_sig_info.rssi,  t_info.wcdma_sig_info.ecio,
+                              t_info.tdscdma_sig_info_valid,
+                              t_info.lte_sig_info_valid, t_info.lte_sig_info.rssi, t_info.lte_sig_info.rsrp, t_info.lte_sig_info.rsrq, t_info.lte_sig_info.snr,
+                              t_info.cdma_sig_info_valid, 
+                              t_info.hdr_sig_info_valid, 
+                              t_info.nr_sig_info_valid, t_info.nr_sig_info.ssRsrp, t_info.nr_sig_info.ssRsrq, t_info.nr_sig_info.ssSinr,
+                              t_info.nr_sig_info.csiRsrp, t_info.nr_sig_info.csiRsrq, t_info.nr_sig_info.csiSinr);
+                        
+                }
+                break;
+             }        
+             case 7 :
+             {
+                QSER_NW_OOS_CONFIG_INFO_T t_info;
+                int type = 0;
+                printf("please input you want query oos config's type (0: fast network scan config; 1: full band network scan config ) : \n");
+                scanf("%d", &type);
+                t_info.type = type;
+                ret = qser_nw_get_oos_config_p(h_nw, &t_info);  
+                printf("qser_nw_get_oos_config, ret=%d\n", ret);
+                if(ret==0)
+                {         
+                    if(t_info.type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+                    {
+                        printf("qser_nw_get_oos_config         t_min = %d\n"
+                               "                               t_step = %d\n"
+                               "                               t_num = %d\n"
+                               "                               t_max = %d\n",
+                              t_info.u.full_band_scan_info.t_min, t_info.u.full_band_scan_info.t_step,                             
+                              t_info.u.full_band_scan_info.t_num, t_info.u.full_band_scan_info.t_max);
+                    }     
+                    else if(t_info.type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
+                    {
+                        printf("qser_nw_get_oos_config         enable = %d\n"
+                               "                               time_interval = %d\n",
+                              t_info.u.fast_can_info.enable, t_info.u.fast_can_info.time_interval); 
+                    }
+                    else
+                    {
+                        printf("qser_nw_get_oos_config tyep is %d, ret is ok",t_info.type);
+                    }
+    
+                }
+                break;
+             }         
+             case 6 :
+             {
+                QSER_NW_OOS_CONFIG_INFO_T t_info;
+                int type = 0;
+                printf("please input you want set oos config's type (0: fast network scan config; 1: full band network scan config ) : \n");
+                scanf("%d", &type);
+                t_info.type = type;
+                if(t_info.type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+                {
+                      printf("please input  t_min: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_min));
+                      printf("please input t_step: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_step));
+                      printf("please input  t_num: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_num));
+                      printf("please input t_max: \n");
+                      scanf("%d", &(t_info.u.full_band_scan_info.t_max));
+                      ret = qser_nw_set_oos_config_p(h_nw, &t_info);  
+                      printf("qser_nw_get_oos_config, ret=%d\n", ret);                      
+                }
+                else if(t_info.type==QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
+                {
+                      printf("please input  enable: \n");
+                      scanf("%d", &(t_info.u.fast_can_info.enable));
+                      printf("please input time_interval: \n");
+                      scanf("%d", &(t_info.u.fast_can_info.time_interval));                      
+                      ret = qser_nw_set_oos_config_p(h_nw, &t_info);  
+                      printf("qser_nw_get_oos_config, ret=%d\n", ret);                    
+                }
+                else 
+                {
+                       ret = qser_nw_set_oos_config_p(h_nw, &t_info);  
+                       printf("qser_nw_get_oos_config, ret=%d\n", ret);            
+                }                
+                break;
+             }         
+             case 9://"qser_nw_get_rf_mode"
+             {
+                 E_QSER_NW_RF_MODE_TYPE_T  rf_mode;
+                 ret = qser_nw_get_rf_mode_p(h_nw, &rf_mode);
+                 printf("qser_nw_get_rf_mode ret = %d, rf mode=%d\n", ret, rf_mode);
+                 break;
+             }       
+             case 8://"qser_nw_set_rf_mode"
+             {
+                 E_QSER_NW_RF_MODE_TYPE_T  rf_mode;
+                 printf("please input you want set rf mode (0: cfun 0;  1: cfun 1; 4: flight mode \n");
+                 scanf("%d", &rf_mode);
+                 ret = qser_nw_set_rf_mode_p(h_nw, rf_mode);
+                 printf("qser_nw_set_rf_mode %d ret = %dn",rf_mode, ret);
+                 break;
+             }       
+             case 10://"qser_nw_set_ims_enable"
+             {
+                 E_QSER_NW_IMS_MODE_TYPE_T  ims_mode;
+                 printf("please input you want set ims mode (0: off;  1: volte enable \n");
+                 scanf("%d", &ims_mode);
+                 ret = qser_nw_set_ims_enable_p(h_nw, ims_mode);
+                 printf("qser_nw_set_ims_enable %d ret = %dn",ims_mode, ret);
+                 break;
+             }       
+             case 11://"qser_nw_get_ims_reg_status"
+             {
+                 QSER_NW_IMS_REG_STATUS_INFO_T         t_info;
+                 memset(&t_info, 0, sizeof(QSER_NW_IMS_REG_STATUS_INFO_T));
+                 ret = qser_nw_get_ims_reg_status_p(h_nw, &t_info);
+                 printf("qser_nw_get_ims_reg_status ret = %d, detail info:\n", ret);
+                 if(ret == 0)
+                 {
+                     printf("ims_registration: registration_state=%d\n",                          
+                         t_info.registration_state);
+                 }                
+                 break;
+             }                 
+             default:
+             {
+                 show_group_help(&t_nw_test);
+             }
+        }
+    }
+    return 0;
+}
+
+
+
+
+
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
new file mode 100755
index 0000000..56e2ce0
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
@@ -0,0 +1,475 @@
+/**
+ *@file     QSER_nw.h
+ *@date     2018-02-22
+ *@author   
+ *@brief    
+ */   
+#ifndef __LYNQ_QSER_NETWORK_H__
+#define __LYNQ_QSER_NETWORK_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint32_t nw_client_handle_type;
+
+
+#define QSER_NW_MODE_NONE     0x00    /**<  No network. */
+#define QSER_NW_MODE_GSM      0x01    /**<  Include GSM networks. */
+#define QSER_NW_MODE_WCDMA    0x02    /**<  Include WCDMA networks. */
+#define QSER_NW_MODE_CDMA     0x04    /**<  Include CDMA networks. */
+#define QSER_NW_MODE_EVDO     0x08    /**<  Include EVDO networks. */
+#define QSER_NW_MODE_LTE      0x10    /**<  Include LTE networks. */
+#define QSER_NW_MODE_TDSCDMA  0x20    /**<  Include TDSCDMA networks. */
+
+typedef enum 
+{
+    E_QSER_NW_ROAM_STATE_OFF  = 0,    /**<  None, or roaming indicator off. */
+    E_QSER_NW_ROAM_STATE_ON   = 1     /**<  Roaming indicator on. */
+}E_QSER_NW_ROAM_STATE_TYPE_T;
+
+/** Configures the settings that define the MCM network interface. */
+typedef struct 
+{
+    /*  Configuration parameters for MCM network registration Network registration details Technology dependent network registration details */
+    uint64_t                        preferred_nw_mode;  /**<   Preferred network mode for connections; a bitmask of QSER_NW_MODE_xxxx.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming_pref;       /**<   Roaming preference.*/
+}QSER_NW_CONFIG_INFO_T;
+
+typedef enum 
+{
+    E_QSER_NW_IMS_MODE_OFF    = 0,     /**<  close ims. */
+    E_QSER_NW_IMS_MODE_VOLTE_ENABLE    = 1,  /**<  support volte. */
+}E_QSER_NW_IMS_MODE_TYPE_T;
+
+/** Configures the OOS (out of service)  settings that define the MCM network interface. */
+#define QSER_NW_OOS_CFG_TYPE_FAST_SCAN          0x00    /**<  fast net scan */
+#define QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN     0x01    /**<  full band scan */
+
+typedef struct 
+{
+    /*    Configuration parameters for MCM network fast network scan when OOS (out of service)*/
+    char                        enable;
+    uint16_t                    time_interval;
+}QSER_NW_OOS_CONFIG_FAST_SCAN_INFO_T;
+
+typedef struct 
+{
+    /*    Configuration parameters for MCM network full band network scan when OOS (out of service)*/
+    int t_min;
+    int t_step;
+    int t_num;
+    int t_max;
+}QSER_NW_OOS_CONFIG_FULL_BAND_SCAN_INFO_T;
+
+
+typedef struct 
+{    
+    char                        type;  /**<   QSER_NW_OOS_CFG_TYPE_xxxx.*/
+    union {
+    QSER_NW_OOS_CONFIG_FAST_SCAN_INFO_T  fast_can_info;       // 00
+    QSER_NW_OOS_CONFIG_FULL_BAND_SCAN_INFO_T full_band_scan_info;     // 01   
+  } u;
+}QSER_NW_OOS_CONFIG_INFO_T;
+
+//defined for QSER_NW_EventRegister
+#define     NW_IND_VOICE_REG_EVENT_IND_FLAG               (1 << 0)    /**< msg format : QSER_NW_VOICE_REG_EVENT_IND_T */
+#define     NW_IND_DATA_REG_EVENT_IND_FLAG                (1 << 1)    /**< msg format : QSER_NW_DATA_REG_EVENT_IND_T */ 
+#define     NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG         (1 << 2)    /**< msg format : QSER_NW_SINGNAL_EVENT_IND_T */ 
+//#define     NW_IND_CELL_ACCESS_STATE_CHG_EVENT_IND_FLAG   (1 << 3)    /**< msg format : QL_MCM_NW_CELL_ACCESS_STATE_EVENT_IND_T */ 
+//#define     NW_IND_NITZ_TIME_UPDATE_EVENT_IND_FLAG        (1 << 4)    /**< msg format : QL_MCM_NW_NITZ_TIME_EVENT_IND_T */ 
+#define     NW_IND_IMS_REG_EVENT_IND_FLAG                 (1 << 5)    /**< msg format : NULL */ 
+
+typedef struct 
+{
+    char long_eons[512 + 1];    /**<   Long EONS.*/
+    char short_eons[512 + 1];   /**<   Short EONS.*/
+    char mcc[3 + 1];            /**<   Mobile country code.*/
+    char mnc[3 + 1];            /**<   Mobile network code.*/
+}QSER_NW_OPERATOR_NAME_INFO_T;
+
+typedef enum 
+{
+    E_QSER_NW_RADIO_TECH_TD_SCDMA = 1,
+    E_QSER_NW_RADIO_TECH_GSM      = 2,    /**<  GSM; only supports voice. */
+    E_QSER_NW_RADIO_TECH_HSPAP    = 3,    /**<  HSPA+. */
+    E_QSER_NW_RADIO_TECH_LTE      = 4,    /**<  LTE. */
+    E_QSER_NW_RADIO_TECH_EHRPD    = 5,    /**<  EHRPD. */
+    E_QSER_NW_RADIO_TECH_EVDO_B   = 6,    /**<  EVDO B. */
+    E_QSER_NW_RADIO_TECH_HSPA     = 7,    /**<  HSPA. */
+    E_QSER_NW_RADIO_TECH_HSUPA    = 8,    /**<  HSUPA. */
+    E_QSER_NW_RADIO_TECH_HSDPA    = 9,    /**<  HSDPA. */
+    E_QSER_NW_RADIO_TECH_EVDO_A   = 10,   /**<  EVDO A. */
+    E_QSER_NW_RADIO_TECH_EVDO_0   = 11,   /**<  EVDO 0. */
+    E_QSER_NW_RADIO_TECH_1xRTT    = 12,   /**<  1xRTT. */
+    E_QSER_NW_RADIO_TECH_IS95B    = 13,   /**<  IS95B. */
+    E_QSER_NW_RADIO_TECH_IS95A    = 14,   /**<  IS95A. */
+    E_QSER_NW_RADIO_TECH_UMTS     = 15,   /**<  UMTS. */
+    E_QSER_NW_RADIO_TECH_EDGE     = 16,   /**<  EDGE. */
+    E_QSER_NW_RADIO_TECH_GPRS     = 17,   /**<  GPRS. */
+    E_QSER_NW_RADIO_TECH_NONE     = 18    /**<  No technology selected. */
+}E_QSER_NW_RADIO_TECH_TYPE_T;
+
+
+typedef enum 
+{
+    E_QSER_NW_TECH_DOMAIN_NONE    = 0,    /**<  None. */
+    E_QSER_NW_TECH_DOMAIN_3GPP    = 1,    /**<  3GPP. */
+    E_QSER_NW_TECH_DOMAIN_3GPP2   = 2,    /**<  3GPP2. */
+}E_QSER_NW_TECH_DOMAIN_TYPE_T;
+
+typedef enum 
+{
+    E_QSER_NW_IMSI_UNKNOWN_HLR_DENY_REASON                    = 1, /**<  IMSI unknown in HLR. */
+    E_QSER_NW_ILLEGAL_MS_DENY_REASON                          = 2, /**<  Illegal MS. */
+    E_QSER_NW_IMSI_UNKNOWN_VLR_DENY_REASON                    = 3, /**<  IMSI unknown in VLR. */
+    E_QSER_NW_IMEI_NOT_ACCEPTED_DENY_REASON                   = 4, /**<  IMEI not accepted. */
+    E_QSER_NW_ILLEGAL_ME_DENY_REASON                          = 5, /**<  Illegal ME. */
+    E_QSER_NW_PLMN_NOT_ALLOWED_DENY_REASON                    = 6, /**<  PLMN not allowed. */
+    E_QSER_NW_LA_NOT_ALLOWED_DENY_REASON                      = 7, /**<  Location area not allowed. */
+    E_QSER_NW_ROAMING_NOT_ALLOWED_LA_DENY_REASON              = 8, /**<  Roaming not allowed in this location area. */
+    E_QSER_NW_NO_SUITABLE_CELLS_LA_DENY_REASON                = 9, /**<  No suitable cells in location area. */
+    E_QSER_NW_NETWORK_FAILURE_DENY_REASON                     = 10, /**<  Network failure. */
+    E_QSER_NW_MAC_FAILURE_DENY_REASON                         = 11, /**<  MAC failure. */
+    E_QSER_NW_SYNCH_FAILURE_DENY_REASON                       = 12, /**<  Sync failure. */
+    E_QSER_NW_CONGESTION_DENY_REASON                          = 13, /**<  Congestion. */
+    E_QSER_NW_GSM_AUTHENTICATION_UNACCEPTABLE_DENY_REASON     = 14, /**<  GSM authentication unacceptable. */
+    E_QSER_NW_NOT_AUTHORIZED_CSG_DENY_REASON                  = 15, /**<  Not authorized in this CSG. */
+    E_QSER_NW_SERVICE_OPTION_NOT_SUPPORTED_DENY_REASON        = 16, /**<  Service option not supported. */
+    E_QSER_NW_REQ_SERVICE_OPTION_NOT_SUBSCRIBED_DENY_REASON   = 17, /**<  Requested service option not subscribed. */
+    E_QSER_NW_CALL_CANNOT_BE_IDENTIFIED_DENY_REASON           = 18, /**<  Call cannot be identified. */
+    E_QSER_NW_SEMANTICALLY_INCORRECT_MSG_DENY_REASON          = 19, /**<  Semantically incorrect message. */
+    E_QSER_NW_INVALID_MANDATORY_INFO_DENY_REASON              = 20, /**<  Invalid mandatory information. */
+    E_QSER_NW_MSG_TYPE_NON_EXISTENT_DENY_REASON               = 21, /**<  Message type non-existent or not implemented. */
+    E_QSER_NW_INFO_ELEMENT_NON_EXISTENT_DENY_REASON           = 22, /**<  Message type not compatible with the protocol state. */
+    E_QSER_NW_CONDITIONAL_IE_ERR_DENY_REASON                  = 23, /**<  Conditional IE error. */
+    E_QSER_NW_MSG_INCOMPATIBLE_PROTOCOL_STATE_DENY_REASON     = 24, /**<  Message not compatible with the protocol state. */
+    E_QSER_NW_PROTOCOL_ERROR_DENY_REASON                      = 25, /**<  Unspecified protocol error. */
+}E_QSER_NW_DENY_REASON_TYPE_T;
+
+
+typedef enum 
+{
+    E_QSER_NW_SERVICE_NONE     = 0x0000,  /**<  Not registered or no data. */
+    E_QSER_NW_SERVICE_LIMITED  = 0x0001,  /**<  Registered; emergency service only. */
+    E_QSER_NW_SERVICE_FULL     = 0x0002,  /**<  Registered, full service. */
+}E_QSER_NW_SERVICE_TYPE_T;
+
+typedef struct 
+{
+    E_QSER_NW_TECH_DOMAIN_TYPE_T  tech_domain;        /**<   Technology, used to determine the structure type  tech: 0 -- None, 1 -- 3GPP, 2 -- 3GPP2.*/
+    E_QSER_NW_RADIO_TECH_TYPE_T   radio_tech;         /**<   Radio technology; see #nw_radio_tech_t_v01.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming;            /**<   0 -- Off, 1 -- Roaming (3GPP2 has extended values).*/
+    E_QSER_NW_DENY_REASON_TYPE_T  deny_reason;        /**<   Set when registration state is #nw_deny_reason_t_v01.*/
+    E_QSER_NW_SERVICE_TYPE_T      registration_state; /**<   Registration state.*/
+}QSER_NW_COMMON_REG_INFO_T;
+
+
+typedef struct 
+{
+    E_QSER_NW_TECH_DOMAIN_TYPE_T  tech_domain;        /**<   Technology, used to determine the structure type  tech: 0 -- None, 1 -- 3GPP, 2 -- 3GPP2.*/
+    E_QSER_NW_RADIO_TECH_TYPE_T   radio_tech;         /**<   Radio technology; see #nw_radio_tech_t_v01.*/
+    char                            mcc[3+1];           /**<   Mobile country code.*/
+    char                            mnc[3+1];           /**<   Mobile network code.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming;            /**<   0 -- Off, 1 -- Roaming (3GPP2 has extended values).*/
+    uint8_t                         forbidden;          /**<   Forbidden: 0 -- No, 1 -- Yes.*/
+    uint32_t                        cid;                /**<   Cell ID for the registered 3GPP system.*/
+    uint16_t                        lac;                /**<   Locatin area code for the registered 3GPP system.*/
+    uint16_t                        psc;                /**<   Primary scrambling code (WCDMA only); 0 -- None.*/
+    uint16_t                        tac;                /**<   Tracking area code information for LTE.*/
+}QSER_NW_3GPP_REG_INFO_T;
+
+
+typedef struct 
+{
+    E_QSER_NW_TECH_DOMAIN_TYPE_T  tech_domain;        /**<   Technology, used to determine structure type  tech: 0 -- None, 1 -- 3GPP, 2 -- 3GPP2.*/
+    E_QSER_NW_RADIO_TECH_TYPE_T   radio_tech;         /**<   Radio technology; see #nw_radio_tech_t_v01.*/
+    char                            mcc[3+1];           /**<   Mobile country code.*/
+    char                            mnc[3+1];           /**<   Mobile network code.*/
+    E_QSER_NW_ROAM_STATE_TYPE_T   roaming;            /**<   Roaming status; see #nw_roam_state_t_v01.*/
+    uint8_t                         forbidden;          /**<   Forbidden: 0 -- No, 1 -- Yes.*/
+    uint8_t                         inPRL;              /**<   0 -- Not in PRL, 1 -- In PRL.*/
+    uint8_t                         css;                /**<   Concurrent services supported: 0 -- No, 1 -- Yes.*/
+    uint16_t                        sid;                /**<   CDMA system ID.*/
+    uint16_t                        nid;                /**<   CDMA network ID.*/
+    uint16_t                        bsid;               /**<   Base station ID. @newpagetable */
+}QSER_NW_3GPP2_REG_INFO_T;
+
+/** Gets the status associated with the connection of \<id\>. */
+typedef struct 
+{
+    uint8_t                         voice_registration_valid;               /**< Must be set to TRUE if voice_registration is being passed. */
+    QSER_NW_COMMON_REG_INFO_T     voice_registration;                     /**<   Voice registration. */
+
+    uint8_t                         data_registration_valid;                /**< Must be set to TRUE if data_registration is being passed. */
+    QSER_NW_COMMON_REG_INFO_T     data_registration;                      /**<   Data registration. */
+
+    uint8_t                         voice_registration_details_3gpp_valid;  /**< Must be set to TRUE if voice_registration_details_3gpp is being passed. */
+    QSER_NW_3GPP_REG_INFO_T       voice_registration_details_3gpp;        /**<   Voice registration details for 3GPP. */
+
+    uint8_t                         data_registration_details_3gpp_valid;   /**< Must be set to TRUE if data_registration_details_3gpp is being passed. */
+    QSER_NW_3GPP_REG_INFO_T       data_registration_details_3gpp;         /**<   Data registration details for 3GPP. */
+
+    uint8_t                         voice_registration_details_3gpp2_valid; /**< Must be set to TRUE if voice_registration_details_3gpp2 is being passed. */
+    QSER_NW_3GPP2_REG_INFO_T      voice_registration_details_3gpp2;       /**<   Voice registration details for 3GPP2. */
+
+    uint8_t                         data_registration_details_3gpp2_valid;  /**< Must be set to TRUE if data_registration_details_3gpp2 is being passed. */
+    QSER_NW_3GPP2_REG_INFO_T      data_registration_details_3gpp2;        /**<   Data registration details for 3GPP2. */
+}QSER_NW_REG_STATUS_INFO_T;
+
+typedef enum 
+{
+    E_QSER_NW_IMS_SERVICE_NONE     = 0x0000,  /**<  Not registered */
+    E_QSER_NW_IMS_SERVICE_REGISTERED     = 0x0001,  /**<  Registered*/
+}E_QSER_NW_IMS_SERVICE_TYPE_T;
+
+typedef struct 
+{   
+    E_QSER_NW_IMS_SERVICE_TYPE_T      registration_state; /**<   Registration state.*/
+}QSER_NW_IMS_REG_STATUS_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates received signal strength. A signed value; -125 or lower indicates no signal.*/
+}QSER_NW_GSM_SIGNAL_INFO_T;
+
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Ec. A signed value; -125 or lower indicates no signal.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+}QSER_NW_WCDMA_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Ec.    a signed value; -125 or lower indicates no signal.*/
+    int8_t      rscp;       /**<   RSCP in dBm.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+    int8_t      sinr;       /**<   Measured SINR in dB. @newpagetable */
+}QSER_NW_TDSCDMA_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Ec. A signed value; -125 or lower indicates no signal.*/
+    int8_t      rsrq;       /**<   RSRQ value in dB (signed integer value), as measured by L1. Range: -3 to -20 (-3 equals -3 dB, -20 equals -20 dB).*/
+    int16_t      rsrp;       /**<   Current RSRP in dBm, as measured by L1. Range: -44 to -140 (-44 equals -44 dBm, -140 equals -140 dBm).*/
+    int16_t      snr;        /**<   SNR level as a scaled integer in units of 0.1 dB; e.g., -16 dB has a value of -160 and 24.6 dB has a value of 246.*/
+}QSER_NW_LTE_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Power (AGC) + Ec/Io. A signed value; -125 or lower indicates no signal.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+}QSER_NW_CDMA_SIGNAL_INFO_T;
+
+typedef struct 
+{
+    int8_t      rssi;       /**<   RSSI in dBm. Indicates forward link pilot Power (AGC) + Ec/Io. A signed value; -125 or lower indicates no signal.*/
+    int16_t     ecio;       /**<   Ec/Io value representing negative 0.5 dB increments, e.g., 2 equals -1 dbm.*/
+    int8_t      sinr;       /**<   SINR level.*/
+    int32_t     io;         /**<   Received IO in dBm. */
+}QSER_NW_HDR_SIGNAL_INFO_T;
+
+typedef struct
+{
+    int16_t     ssRsrp;   /* SS(Synchronization Signal) reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int16_t     ssRsrq;   /* SS reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int16_t     ssSinr;   /* SS signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+    int16_t     csiRsrp;  /* CSI reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int16_t     csiRsrq;  /* CSI reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int16_t     csiSinr;  /* CSI signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+}QSER_NW_NR_SIGNAL_INFO_T;
+
+
+/** Gets signal strength information. */
+typedef struct 
+{
+    uint8_t                         gsm_sig_info_valid;         /**< Must be set to TRUE if gsm_sig_info is being passed. */
+    QSER_NW_GSM_SIGNAL_INFO_T     gsm_sig_info;               /**<   GSM signal information. */
+    uint8_t                         wcdma_sig_info_valid;       /**< Must be set to TRUE if wcdma_sig_info is being passed. */
+    QSER_NW_WCDMA_SIGNAL_INFO_T   wcdma_sig_info;             /**<   WCDMA signal information. */
+    uint8_t                         tdscdma_sig_info_valid;     /**< Must be set to TRUE if tdscdma_sig_info is being passed. */
+    QSER_NW_TDSCDMA_SIGNAL_INFO_T tdscdma_sig_info;           /**<   TDSCDMA signal information. */
+    uint8_t                         lte_sig_info_valid;         /**< Must be set to TRUE if lte_sig_info is being passed. */
+    QSER_NW_LTE_SIGNAL_INFO_T     lte_sig_info;               /**<   LTE signal information. */
+    uint8_t                         cdma_sig_info_valid;        /**< Must be set to TRUE if cdma_sig_info is being passed. */
+    QSER_NW_CDMA_SIGNAL_INFO_T    cdma_sig_info;              /**<   CDMA signal information. */
+    uint8_t                         hdr_sig_info_valid;         /**< Must be set to TRUE if hdr_sig_info is being passed. */
+    QSER_NW_HDR_SIGNAL_INFO_T     hdr_sig_info;               /**<   HDR signal information. */
+    uint8_t                         nr_sig_info_valid;
+    QSER_NW_NR_SIGNAL_INFO_T      nr_sig_info;
+}QSER_NW_SIGNAL_STRENGTH_INFO_T;
+
+
+
+
+
+/* @bridef Callback function registered to QSER_NW_AddRxMsgHandler 
+ * map of ind_flag and ind_msg_buf as bellow :
+ *  NW_IND_VOICE_REG_EVENT_IND_FLAG : QSER_NW_VOICE_REG_EVENT_IND_T
+ *  NW_IND_DATA_REG_EVENT_IND_FLAG : QSER_NW_DATA_REG_EVENT_IND_T
+ *  NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG : QSER_NW_SINGNAL_EVENT_IND_T
+ *  NW_IND_CELL_ACCESS_STATE_CHG_EVENT_IND_FLAG : QSER_NW_CELL_ACCESS_STATE_EVENT_IND_T
+ *  NW_IND_NITZ_TIME_UPDATE_EVENT_IND_FLAG : QSER_NW_NITZ_TIME_EVENT_IND_T 
+ *  NW_IND_IMS_REG_EVENT_IND_FLAG : NULL 
+ * */
+typedef void (*QSER_NW_RxMsgHandlerFunc_t)(
+    nw_client_handle_type h_nw, 
+    uint32_t ind_flag, 
+    void                  *ind_msg_buf, 
+    uint32_t              ind_msg_len, 
+    void                  *contextPtr
+);
+
+
+/** Indication message; Indication for the corresponding registered event flag NW_IND_VOICE_REG_EVENT_IND_FLAG */
+typedef struct {
+
+  uint8_t                         registration_valid;               /**< Must be set to TRUE if voice_registration is being passed. */
+  QSER_NW_COMMON_REG_INFO_T     registration;                     /**< Voice registration. */
+
+  uint8_t                         registration_details_3gpp_valid;  /**< Must be set to TRUE if voice_registration_details_3gpp is being passed. */
+  QSER_NW_3GPP_REG_INFO_T       registration_details_3gpp;        /**< Voice registration details for 3GPP. */
+
+  uint8_t                         registration_details_3gpp2_valid; /**< Must be set to TRUE if voice_registration_details_3gpp2 is being passed. */
+  QSER_NW_3GPP2_REG_INFO_T      registration_details_3gpp2;       /**< Voice registration details for 3GPP2. */
+}QSER_NW_VOICE_REG_EVENT_IND_T; 
+
+/** Indication message; Indication for the corresponding registered event flag NW_IND_DATA_REG_EVENT_IND_FLAG */
+typedef struct {
+
+  uint8_t                         registration_valid;               /**< Must be set to TRUE if data_registration is being passed. */
+  QSER_NW_COMMON_REG_INFO_T     registration;                     /**< Data registration. */
+  
+  uint8_t                         registration_details_3gpp_valid;  /**< Must be set to TRUE if data_registration_details_3gpp is being passed. */
+  QSER_NW_3GPP_REG_INFO_T       registration_details_3gpp;        /**< Data registration details for 3GPP. */
+
+  uint8_t                         registration_details_3gpp2_valid; /**< Must be set to TRUE if data_registration_details_3gpp2 is being passed. */
+  QSER_NW_3GPP2_REG_INFO_T      registration_details_3gpp2;       /**< Data registration details for 3GPP2. */
+}QSER_NW_DATA_REG_EVENT_IND_T;
+
+
+/** Indication message; Indication for the corresponding registered event flag NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG */
+typedef struct {
+    uint8_t gsm_sig_info_valid;                       /**< Must be set to TRUE if gsm_sig_info is being passed. */
+    QSER_NW_GSM_SIGNAL_INFO_T       gsm_sig_info;   /**< GSM singal information. */
+
+    uint8_t wcdma_sig_info_valid;                     /**< Must be set to TRUE if wcdma_sig_info is being passed. */
+    QSER_NW_WCDMA_SIGNAL_INFO_T wcdma_sig_info;     /**< WCDMA singal information. */
+
+    uint8_t tdscdma_sig_info_valid;                   /**< Must be set to TRUE if tdscdma_sig_info is being passed. */
+    QSER_NW_TDSCDMA_SIGNAL_INFO_T tdscdma_sig_info; /**< TDSCDMA singal information. */
+
+    uint8_t lte_sig_info_valid;                       /**< Must be set to TRUE if lte_sig_info is being passed. */
+    QSER_NW_LTE_SIGNAL_INFO_T lte_sig_info;         /**< LTE singal information. */
+
+    uint8_t cdma_sig_info_valid;                      /**< Must be set to TRUE if cdma_sig_info is being passed. */
+    QSER_NW_CDMA_SIGNAL_INFO_T cdma_sig_info;       /**< CDMA singal information. */
+
+    uint8_t hdr_sig_info_valid;                       /**< Must be set to TRUE if hdr_sig_info is being passed. */
+    QSER_NW_HDR_SIGNAL_INFO_T hdr_sig_info;         /**< HDR singal information. */
+    
+    uint8_t                         nr_sig_info_valid;
+    QSER_NW_NR_SIGNAL_INFO_T      nr_sig_info;
+}QSER_NW_SINGNAL_EVENT_IND_T;
+
+typedef enum 
+{
+    E_QSER_NW_RF_MODE_CFUN_0 = 0,    /**<  CFUN 0. */
+    E_QSER_NW_RF_MODE_CFUN_1 = 1,    /**<  CFUN 1. */
+    E_QSER_NW_RF_MODE_FLIGHT = 4,    /**<  Flight Mode, CFUN 4. */
+}E_QSER_NW_RF_MODE_TYPE_T;
+
+int qser_nw_client_init(nw_client_handle_type  *ph_nw);
+
+int qser_nw_client_deinit(nw_client_handle_type  h_nw);
+
+int qser_nw_set_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_set_ims_enable
+(
+    nw_client_handle_type h_nw,
+    E_QSER_NW_IMS_MODE_TYPE_T ims_mode
+);
+
+int qser_nw_set_oos_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_OOS_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_get_oos_config
+(
+    nw_client_handle_type       h_nw,
+    QSER_NW_OOS_CONFIG_INFO_T     *pt_info 
+);
+
+int qser_nw_event_register
+(
+    nw_client_handle_type       h_nw,
+    uint32_t                    bitmask // bit OR of NW_IND_xxxx_EVENT_ON
+);
+
+int qser_nw_get_operator_name
+(
+    nw_client_handle_type           h_nw,
+    QSER_NW_OPERATOR_NAME_INFO_T  *pt_info //You should malloc this or may cause stack overflow
+);
+
+int qser_nw_get_reg_status
+(
+    nw_client_handle_type               h_nw,
+    QSER_NW_REG_STATUS_INFO_T         *pt_info 
+);
+
+int qser_nw_get_ims_reg_status
+(
+    nw_client_handle_type h_nw,
+    QSER_NW_IMS_REG_STATUS_INFO_T *pt_info
+);
+
+int qser_nw_get_signal_strength
+(
+    nw_client_handle_type               h_nw,
+    QSER_NW_SIGNAL_STRENGTH_INFO_T    *pt_info
+);
+
+int qser_nw_add_rx_msg_handler
+(
+    nw_client_handle_type        h_nw,
+    QSER_NW_RxMsgHandlerFunc_t handlerPtr, 
+    void* contextPtr
+);
+
+int qser_nw_set_rf_mode
+(
+    nw_client_handle_type       h_nw,
+    E_QSER_NW_RF_MODE_TYPE_T    rf_mode
+);
+
+int qser_nw_get_rf_mode
+(
+    nw_client_handle_type       h_nw,
+    E_QSER_NW_RF_MODE_TYPE_T    *rf_mode
+);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif//__QSER_NW_H__
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
new file mode 100755
index 0000000..fe01295
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic-selinux/recipes-security/refpolicy/files/policy-mls/policy/modules/system/logging.te
@@ -0,0 +1,677 @@
+policy_module(logging, 1.33.1)
+
+########################################
+#
+# Declarations
+#
+
+attribute logfile;
+
+type auditctl_t;
+type auditctl_exec_t;
+init_system_domain(auditctl_t, auditctl_exec_t)
+role system_r types auditctl_t;
+
+type auditd_etc_t;
+files_security_file(auditd_etc_t)
+
+type auditd_log_t;
+files_security_file(auditd_log_t)
+files_security_mountpoint(auditd_log_t)
+
+type audit_spool_t;
+files_security_file(audit_spool_t)
+files_security_mountpoint(audit_spool_t)
+
+type auditd_t;
+type auditd_exec_t;
+init_daemon_domain(auditd_t, auditd_exec_t)
+
+type auditd_initrc_exec_t;
+init_script_file(auditd_initrc_exec_t)
+
+type auditd_runtime_t alias auditd_var_run_t;
+files_runtime_file(auditd_runtime_t)
+
+type auditd_unit_t;
+init_unit_file(auditd_unit_t)
+
+type audisp_t;
+type audisp_exec_t;
+init_system_domain(audisp_t, audisp_exec_t)
+
+type audisp_remote_t;
+type audisp_remote_exec_t;
+logging_dispatcher_domain(audisp_remote_t, audisp_remote_exec_t)
+
+type audisp_runtime_t alias audisp_var_run_t;
+files_runtime_file(audisp_runtime_t)
+
+type devlog_t;
+files_type(devlog_t)
+mls_trusted_object(devlog_t)
+
+type klogd_t;
+type klogd_exec_t;
+init_daemon_domain(klogd_t, klogd_exec_t)
+
+type klogd_runtime_t alias klogd_var_run_t;
+files_runtime_file(klogd_runtime_t)
+
+type klogd_tmp_t;
+files_tmp_file(klogd_tmp_t)
+
+type syslog_conf_t;
+files_config_file(syslog_conf_t)
+
+type syslogd_t;
+type syslogd_exec_t;
+init_daemon_domain(syslogd_t, syslogd_exec_t)
+init_named_socket_activation(syslogd_t, syslogd_runtime_t)
+mls_trusted_socket(syslogd_t)
+
+type syslogd_initrc_exec_t;
+init_script_file(syslogd_initrc_exec_t)
+
+type syslogd_runtime_t alias syslogd_var_run_t;
+files_runtime_file(syslogd_runtime_t)
+
+type syslogd_tmp_t;
+files_tmp_file(syslogd_tmp_t)
+
+type syslogd_unit_t;
+init_unit_file(syslogd_unit_t)
+
+type syslogd_var_lib_t;
+files_type(syslogd_var_lib_t)
+
+type var_log_t;
+logging_log_file(var_log_t)
+files_mountpoint(var_log_t)
+
+ifdef(`enable_mls',`
+	init_ranged_daemon_domain(auditd_t, auditd_exec_t, mls_systemhigh)
+	init_ranged_daemon_domain(syslogd_t, syslogd_exec_t, mls_systemhigh)
+')
+
+########################################
+#
+# Auditctl local policy
+#
+
+allow auditctl_t self:capability { dac_override dac_read_search fsetid };
+allow auditctl_t self:process getcap;
+allow auditctl_t self:netlink_audit_socket nlmsg_readpriv;
+
+read_files_pattern(auditctl_t, auditd_etc_t, auditd_etc_t)
+allow auditctl_t auditd_etc_t:dir list_dir_perms;
+dontaudit auditctl_t auditd_etc_t:file map;
+
+corecmd_search_bin(auditctl_t)
+
+# Needed for adding watches
+files_getattr_all_dirs(auditctl_t)
+files_getattr_all_files(auditctl_t)
+files_read_etc_files(auditctl_t)
+
+kernel_read_kernel_sysctls(auditctl_t)
+kernel_read_proc_symlinks(auditctl_t)
+kernel_setsched(auditctl_t)
+kernel_getattr_proc(auditctl_t)
+
+domain_read_all_domains_state(auditctl_t)
+domain_use_interactive_fds(auditctl_t)
+
+mls_file_read_all_levels(auditctl_t)
+
+term_use_all_terms(auditctl_t)
+
+init_dontaudit_use_fds(auditctl_t)
+
+logging_set_audit_parameters(auditctl_t)
+logging_send_syslog_msg(auditctl_t)
+
+miscfiles_read_localization(auditctl_t)
+
+ifdef(`init_systemd',`
+	init_rw_stream_sockets(auditctl_t)
+')
+
+optional_policy(`
+	locallogin_dontaudit_use_fds(auditctl_t)
+')
+
+########################################
+#
+# Auditd local policy
+#
+
+allow auditd_t self:capability { chown fsetid sys_nice sys_resource };
+dontaudit auditd_t self:capability sys_tty_config;
+allow auditd_t self:process { getcap signal_perms setcap setpgid setsched };
+allow auditd_t self:file rw_file_perms;
+allow auditd_t self:unix_dgram_socket create_socket_perms;
+allow auditd_t self:fifo_file rw_fifo_file_perms;
+allow auditd_t self:tcp_socket create_stream_socket_perms;
+
+allow auditd_t auditd_etc_t:dir list_dir_perms;
+allow auditd_t auditd_etc_t:file read_file_perms;
+dontaudit auditd_t auditd_etc_t:file map;
+
+allow auditd_t audisp_remote_exec_t:file getattr;
+
+manage_files_pattern(auditd_t, auditd_log_t, auditd_log_t)
+allow auditd_t auditd_log_t:dir setattr;
+manage_lnk_files_pattern(auditd_t, auditd_log_t, auditd_log_t)
+allow auditd_t var_log_t:dir search_dir_perms;
+allow auditd_t var_log_t:lnk_file read_lnk_file_perms;
+
+manage_files_pattern(auditd_t, auditd_runtime_t, auditd_runtime_t)
+manage_sock_files_pattern(auditd_t, auditd_runtime_t, auditd_runtime_t)
+files_runtime_filetrans(auditd_t, auditd_runtime_t, { file sock_file })
+
+kernel_read_kernel_sysctls(auditd_t)
+# Needs to be able to run dispatcher.  see /etc/audit/auditd.conf
+# Probably want a transition, and a new auditd_helper app
+kernel_read_system_state(auditd_t)
+
+dev_read_sysfs(auditd_t)
+
+fs_getattr_all_fs(auditd_t)
+fs_search_auto_mountpoints(auditd_t)
+fs_rw_anon_inodefs_files(auditd_t)
+
+selinux_search_fs(auditctl_t)
+
+corenet_all_recvfrom_netlabel(auditd_t)
+corenet_tcp_sendrecv_generic_if(auditd_t)
+corenet_tcp_sendrecv_generic_node(auditd_t)
+corenet_tcp_bind_generic_node(auditd_t)
+corenet_tcp_bind_audit_port(auditd_t)
+corenet_sendrecv_audit_server_packets(auditd_t)
+
+# Needs to be able to run dispatcher.  see /etc/audit/auditd.conf
+# Probably want a transition, and a new auditd_helper app
+corecmd_exec_bin(auditd_t)
+corecmd_exec_shell(auditd_t)
+
+domain_use_interactive_fds(auditd_t)
+
+files_read_etc_files(auditd_t)
+files_list_usr(auditd_t)
+
+init_telinit(auditd_t)
+
+logging_set_audit_parameters(auditd_t)
+logging_send_syslog_msg(auditd_t)
+logging_domtrans_dispatcher(auditd_t)
+logging_signal_dispatcher(auditd_t)
+
+miscfiles_read_localization(auditd_t)
+
+mls_file_read_all_levels(auditd_t)
+mls_file_write_all_levels(auditd_t) # Need to be able to write to /var/run/ directory
+mls_fd_use_all_levels(auditd_t)
+mls_socket_write_all_levels(auditd_t)
+
+seutil_dontaudit_read_config(auditd_t)
+
+sysnet_dns_name_resolve(auditd_t)
+
+userdom_use_user_terminals(auditd_t)
+userdom_dontaudit_use_unpriv_user_fds(auditd_t)
+userdom_dontaudit_search_user_home_dirs(auditd_t)
+
+ifdef(`distro_ubuntu',`
+	optional_policy(`
+		unconfined_domain(auditd_t)
+	')
+')
+
+optional_policy(`
+	mta_send_mail(auditd_t)
+')
+
+optional_policy(`
+	seutil_sigchld_newrole(auditd_t)
+')
+
+optional_policy(`
+	init_list_unit_dirs(auditd_t)
+	systemd_start_power_units(auditd_t)
+	systemd_status_power_units(auditd_t)
+')
+
+########################################
+#
+# audit dispatcher local policy
+#
+
+allow audisp_t self:capability { dac_override setpcap sys_nice };
+allow audisp_t self:process { getcap signal_perms setcap setsched };
+allow audisp_t self:fifo_file rw_fifo_file_perms;
+allow audisp_t self:unix_stream_socket create_stream_socket_perms;
+allow audisp_t self:unix_dgram_socket create_socket_perms;
+
+allow audisp_t auditd_t:unix_stream_socket rw_socket_perms;
+
+manage_sock_files_pattern(audisp_t, audisp_runtime_t, audisp_runtime_t)
+files_runtime_filetrans(audisp_t, audisp_runtime_t, sock_file)
+
+kernel_read_system_state(audisp_t)
+
+corecmd_exec_bin(audisp_t)
+corecmd_exec_shell(audisp_t)
+
+domain_use_interactive_fds(audisp_t)
+
+files_map_etc_files(audisp_t)
+files_read_etc_files(audisp_t)
+files_read_etc_runtime_files(audisp_t)
+
+mls_file_write_all_levels(audisp_t)
+
+logging_send_syslog_msg(audisp_t)
+
+miscfiles_read_localization(audisp_t)
+
+sysnet_dns_name_resolve(audisp_t)
+
+optional_policy(`
+	dbus_system_bus_client(audisp_t)
+')
+
+########################################
+#
+# Audit remote logger local policy
+#
+
+allow audisp_remote_t self:capability { setpcap setuid };
+allow audisp_remote_t self:process { getcap setcap };
+allow audisp_remote_t self:tcp_socket create_socket_perms;
+allow audisp_remote_t var_log_t:dir search_dir_perms;
+allow audisp_remote_t var_log_t:lnk_file read_lnk_file_perms;
+
+manage_dirs_pattern(audisp_remote_t, audit_spool_t, audit_spool_t)
+manage_files_pattern(audisp_remote_t, audit_spool_t, audit_spool_t)
+files_spool_filetrans(audisp_remote_t, audit_spool_t, { dir file })
+
+corecmd_exec_bin(audisp_remote_t)
+
+corenet_all_recvfrom_netlabel(audisp_remote_t)
+corenet_tcp_sendrecv_generic_if(audisp_remote_t)
+corenet_tcp_sendrecv_generic_node(audisp_remote_t)
+corenet_tcp_bind_audit_port(audisp_remote_t)
+corenet_tcp_bind_generic_node(audisp_remote_t)
+corenet_tcp_connect_audit_port(audisp_remote_t)
+corenet_sendrecv_audit_client_packets(audisp_remote_t)
+
+files_read_etc_files(audisp_remote_t)
+
+logging_send_syslog_msg(audisp_remote_t)
+logging_send_audit_msgs(audisp_remote_t)
+
+miscfiles_read_localization(audisp_remote_t)
+
+sysnet_dns_name_resolve(audisp_remote_t)
+
+########################################
+#
+# klogd local policy
+#
+
+allow klogd_t self:capability sys_admin;
+dontaudit klogd_t self:capability { sys_resource sys_tty_config };
+allow klogd_t self:process signal_perms;
+
+manage_dirs_pattern(klogd_t, klogd_tmp_t, klogd_tmp_t)
+manage_files_pattern(klogd_t, klogd_tmp_t, klogd_tmp_t)
+files_tmp_filetrans(klogd_t, klogd_tmp_t,{ file dir })
+
+manage_files_pattern(klogd_t, klogd_runtime_t, klogd_runtime_t)
+files_runtime_filetrans(klogd_t, klogd_runtime_t, file)
+
+kernel_read_system_state(klogd_t)
+kernel_read_messages(klogd_t)
+kernel_read_kernel_sysctls(klogd_t)
+# Control syslog and console logging
+kernel_clear_ring_buffer(klogd_t)
+kernel_change_ring_buffer_level(klogd_t)
+
+files_read_kernel_symbol_table(klogd_t)
+
+dev_read_raw_memory_cond(klogd_t, allow_raw_memory_access)
+dev_read_sysfs(klogd_t)
+
+fs_getattr_all_fs(klogd_t)
+fs_search_auto_mountpoints(klogd_t)
+
+domain_use_interactive_fds(klogd_t)
+
+files_read_etc_runtime_files(klogd_t)
+# read /etc/nsswitch.conf
+files_read_etc_files(klogd_t)
+
+logging_send_syslog_msg(klogd_t)
+
+miscfiles_read_localization(klogd_t)
+
+mls_file_read_all_levels(klogd_t)
+
+userdom_dontaudit_search_user_home_dirs(klogd_t)
+
+ifdef(`distro_ubuntu',`
+	optional_policy(`
+		unconfined_domain(klogd_t)
+	')
+')
+
+optional_policy(`
+	seutil_sigchld_newrole(klogd_t)
+')
+
+########################################
+#
+# syslogd local policy
+#
+
+# chown fsetid for syslog-ng
+# sys_admin for the integrated klog of syslog-ng and metalog
+# sys_nice for rsyslog
+# cjp: why net_admin!
+allow syslogd_t self:capability { chown dac_override fsetid net_admin setgid setuid sys_admin sys_nice sys_resource sys_tty_config };
+dontaudit syslogd_t self:capability { sys_ptrace };
+# setpgid for metalog
+# setrlimit for syslog-ng
+# getsched for syslog-ng
+# setsched for rsyslog
+# getcap/setcap for syslog-ng
+allow syslogd_t self:process { getcap setcap signal_perms setpgid setrlimit getsched setsched };
+# receive messages to be logged
+allow syslogd_t self:unix_dgram_socket create_socket_perms;
+allow syslogd_t self:unix_stream_socket create_stream_socket_perms;
+allow syslogd_t self:unix_dgram_socket sendto;
+allow syslogd_t self:fifo_file rw_fifo_file_perms;
+allow syslogd_t self:udp_socket create_socket_perms;
+allow syslogd_t self:tcp_socket create_stream_socket_perms;
+
+allow syslogd_t syslog_conf_t:file read_file_perms;
+allow syslogd_t syslog_conf_t:dir list_dir_perms;
+
+# Create and bind to /dev/log or /var/run/log.
+allow syslogd_t devlog_t:sock_file manage_sock_file_perms;
+allow syslogd_t devlog_t:lnk_file manage_lnk_file_perms;
+files_runtime_filetrans(syslogd_t, devlog_t, sock_file)
+init_runtime_filetrans(syslogd_t, devlog_t, sock_file, "dev-log")
+
+# create/append log files.
+manage_files_pattern(syslogd_t, var_log_t, var_log_t)
+allow syslogd_t var_log_t:file map;
+rw_fifo_files_pattern(syslogd_t, var_log_t, var_log_t)
+files_search_spool(syslogd_t)
+
+# Allow access for syslog-ng
+allow syslogd_t var_log_t:dir { create setattr };
+allow syslogd_t var_log_t:lnk_file read_lnk_file_perms;
+
+# for systemd but can not be conditional
+files_runtime_filetrans(syslogd_t, syslogd_tmp_t, dir, "log")
+
+# manage temporary files
+manage_dirs_pattern(syslogd_t, syslogd_tmp_t, syslogd_tmp_t)
+manage_files_pattern(syslogd_t, syslogd_tmp_t, syslogd_tmp_t)
+allow syslogd_t syslogd_tmp_t:file map;
+
+files_tmp_filetrans(syslogd_t, syslogd_tmp_t, { dir file })
+
+manage_files_pattern(syslogd_t, syslogd_var_lib_t, syslogd_var_lib_t)
+allow syslogd_t syslogd_var_lib_t:file map;
+files_search_var_lib(syslogd_t)
+
+# manage runtime files
+allow syslogd_t syslogd_runtime_t:dir create_dir_perms;
+allow syslogd_t syslogd_runtime_t:sock_file { create setattr unlink };
+allow syslogd_t syslogd_runtime_t:file map;
+manage_files_pattern(syslogd_t, syslogd_runtime_t, syslogd_runtime_t)
+files_runtime_filetrans(syslogd_t, syslogd_runtime_t, file)
+
+kernel_read_crypto_sysctls(syslogd_t)
+kernel_read_system_state(syslogd_t)
+kernel_read_network_state(syslogd_t)
+kernel_read_kernel_sysctls(syslogd_t)
+kernel_read_proc_symlinks(syslogd_t)
+# Allow access to /proc/kmsg for syslog-ng
+kernel_read_messages(syslogd_t)
+# rsyslog
+kernel_read_vm_overcommit_sysctl(syslogd_t)
+kernel_clear_ring_buffer(syslogd_t)
+kernel_change_ring_buffer_level(syslogd_t)
+# Read ring buffer for journald
+kernel_read_ring_buffer(syslogd_t)
+# /initrd is not umounted before minilog starts
+kernel_dontaudit_search_unlabeled(syslogd_t)
+
+corenet_all_recvfrom_netlabel(syslogd_t)
+corenet_udp_sendrecv_generic_if(syslogd_t)
+corenet_udp_sendrecv_generic_node(syslogd_t)
+corenet_udp_bind_generic_node(syslogd_t)
+corenet_udp_bind_syslogd_port(syslogd_t)
+# syslog-ng can listen and connect on tcp port 514 (rsh)
+corenet_tcp_sendrecv_generic_if(syslogd_t)
+corenet_tcp_sendrecv_generic_node(syslogd_t)
+corenet_tcp_bind_generic_node(syslogd_t)
+corenet_tcp_bind_rsh_port(syslogd_t)
+corenet_tcp_connect_rsh_port(syslogd_t)
+# Allow users to define additional syslog ports to connect to
+corenet_tcp_bind_syslogd_port(syslogd_t)
+corenet_tcp_connect_syslogd_port(syslogd_t)
+corenet_tcp_connect_postgresql_port(syslogd_t)
+corenet_tcp_connect_mysqld_port(syslogd_t)
+
+# syslog-ng can send or receive logs
+corenet_sendrecv_syslogd_client_packets(syslogd_t)
+corenet_sendrecv_syslogd_server_packets(syslogd_t)
+corenet_sendrecv_postgresql_client_packets(syslogd_t)
+corenet_sendrecv_mysqld_client_packets(syslogd_t)
+
+dev_filetrans(syslogd_t, devlog_t, sock_file)
+dev_read_sysfs(syslogd_t)
+dev_read_urand(syslogd_t)
+# Allow access to /dev/kmsg for journald
+dev_rw_kmsg(syslogd_t)
+
+domain_use_interactive_fds(syslogd_t)
+# Allow access to /proc/ information for journald
+domain_read_all_domains_state(syslogd_t)
+
+files_read_etc_files(syslogd_t)
+files_read_usr_files(syslogd_t)
+files_read_var_files(syslogd_t)
+files_read_etc_runtime_files(syslogd_t)
+# /initrd is not umounted before minilog starts
+files_read_kernel_symbol_table(syslogd_t)
+files_var_lib_filetrans(syslogd_t, syslogd_var_lib_t, { file dir })
+
+fs_getattr_all_fs(syslogd_t)
+fs_search_auto_mountpoints(syslogd_t)
+fs_search_tmpfs(syslogd_t)
+
+mls_file_write_all_levels(syslogd_t) # Need to be able to write to /var/run/ and /var/log directories
+mls_file_read_all_levels(syslogd_t)
+mls_socket_write_all_levels(syslogd_t) # Neet to be able to sendto dgram
+mls_trusted_object(syslogd_t) # Other process need to have the right to connectto/sendto /dev/log
+mls_fd_use_all_levels(syslogd_t)
+
+term_write_console(syslogd_t)
+# Allow syslog to a terminal
+term_write_unallocated_ttys(syslogd_t)
+
+# for sending messages to logged in users
+init_read_utmp(syslogd_t)
+init_dontaudit_write_utmp(syslogd_t)
+term_write_all_ttys(syslogd_t)
+
+auth_use_nsswitch(syslogd_t)
+
+init_use_fds(syslogd_t)
+
+miscfiles_read_localization(syslogd_t)
+
+seutil_read_config(syslogd_t)
+
+userdom_dontaudit_use_unpriv_user_fds(syslogd_t)
+userdom_dontaudit_search_user_home_dirs(syslogd_t)
+
+ifdef(`init_systemd',`
+	# for systemd-journal
+	allow syslogd_t self:netlink_audit_socket connected_socket_perms;
+	allow syslogd_t self:capability2 audit_read;
+	allow syslogd_t self:capability { chown setgid setuid sys_ptrace dac_read_search sys_rawio };
+	allow syslogd_t self:netlink_audit_socket { getattr getopt read setopt write nlmsg_write };
+
+	# remove /run/log/journal when switching to permanent storage
+	allow syslogd_t var_log_t:dir rmdir;
+
+	kernel_getattr_dgram_sockets(syslogd_t)
+	kernel_read_ring_buffer(syslogd_t)
+	kernel_rw_stream_sockets(syslogd_t)
+	kernel_rw_unix_dgram_sockets(syslogd_t)
+	kernel_rw_netlink_audit_sockets(syslogd_t)
+	kernel_use_fds(syslogd_t)
+
+	dev_read_kmsg(syslogd_t)
+	dev_read_urand(syslogd_t)
+	dev_write_kmsg(syslogd_t)
+
+	domain_getattr_all_domains(syslogd_t)
+	domain_read_all_domains_state(syslogd_t)
+
+	init_create_runtime_dirs(syslogd_t)
+	init_daemon_runtime_file(syslogd_runtime_t, dir, "syslogd")
+	init_getattr(syslogd_t)
+	init_rename_runtime_files(syslogd_t)
+	init_delete_runtime_files(syslogd_t)
+	init_dgram_send(syslogd_t)
+	init_read_runtime_pipes(syslogd_t)
+	init_read_runtime_symlinks(syslogd_t)
+	init_read_state(syslogd_t)
+
+	# needed for systemd-initrd case when syslog socket is unlabelled
+	logging_send_syslog_msg(syslogd_t)
+
+	logging_set_loginuid(syslogd_t)
+
+	systemd_manage_journal_files(syslogd_t)
+
+	udev_read_runtime_files(syslogd_t)
+
+	userdom_search_user_runtime(syslogd_t)
+	systemd_search_user_runtime(syslogd_t)
+')
+
+ifdef(`distro_gentoo',`
+	# default gentoo syslog-ng config appends kernel
+	# and high priority messages to /dev/tty12
+	# and chown/chgrp/chmod /dev/tty12, which is denied
+	term_dontaudit_setattr_unallocated_ttys(syslogd_t)
+')
+
+ifdef(`distro_suse',`
+	# suse creates a /dev/log under /var/lib/stunnel for chrooted stunnel
+	files_var_lib_filetrans(syslogd_t, devlog_t, sock_file)
+')
+
+ifdef(`distro_ubuntu',`
+	optional_policy(`
+		unconfined_domain(syslogd_t)
+	')
+')
+
+optional_policy(`
+	bind_search_cache(syslogd_t)
+')
+
+optional_policy(`
+	cron_manage_log_files(syslogd_t)
+	cron_generic_log_filetrans_log(syslogd_t, file, "cron.log")
+')
+
+optional_policy(`
+	inn_manage_log(syslogd_t)
+	inn_generic_log_filetrans_innd_log(syslogd_t, file, "news.crit")
+	inn_generic_log_filetrans_innd_log(syslogd_t, file, "news.err")
+	inn_generic_log_filetrans_innd_log(syslogd_t, file, "news.notice")
+')
+
+optional_policy(`
+	mysql_stream_connect(syslogd_t)
+')
+
+optional_policy(`
+	postgresql_stream_connect(syslogd_t)
+')
+
+optional_policy(`
+	seutil_sigchld_newrole(syslogd_t)
+')
+
+optional_policy(`
+	# log to the xconsole
+	xserver_rw_console(syslogd_t)
+')
+gen_require(`
+    type default_t;
+	type nvserver_t;
+	type mnt_t;
+	type tmpfs_t;
+	type unlabeled_t;
+	type nvserver_t;
+	type mnt_t;
+')
+allow syslogd_t self:netlink_audit_socket nlmsg_write;
+allow syslogd_t self:capability audit_control;
+allow syslogd_t syslogd_var_run_t:sock_file create;
+allow syslogd_t tmpfs_t:dir { remove_name unlink add_name search create write open getattr };
+allow syslogd_t tmpfs_t:file { unlink create write open getattr };
+allow syslogd_t initrc_t:msg { send receive };
+allow syslogd_t initrc_t:msgq { create associate  getattr setattr read write unix_read unix_write };
+allow syslogd_t bin_t:file { map read  execute };
+allow syslogd_t nvserver_t:msgq { create associate getattr setattr read write unix_read unix_write };
+allow syslogd_t nvserver_t:msg { send receive };
+allow syslogd_t default_t:lnk_file { read };
+allow syslogd_t mnt_t:dir { search create };
+manage_chr_files_pattern(klogd_t, bin_t, bin_t)
+manage_dirs_pattern(klogd_t, bin_t, bin_t)
+manage_files_pattern(klogd_t,bin_t, bin_t)
+manage_chr_files_pattern(syslogd_t, var_t, var_t)
+manage_dirs_pattern(syslogd_t, var_t, var_t)
+manage_files_pattern(syslogd_t,var_t, var_t)
+manage_chr_files_pattern(syslogd_t, default_t, default_t)
+manage_dirs_pattern(syslogd_t, default_t, default_t)
+manage_files_pattern(syslogd_t,default_t, default_t)
+allow klogd_t bin_t:file { map execute };
+allow klogd_t default_t:lnk_file { read };
+allow klogd_t mnt_t:dir { search create };
+allow klogd_t tmpfs_t:dir { remove_name unlink add_name search create write open getattr };
+allow klogd_t tmpfs_t:file { unlink create write open getattr };
+manage_chr_files_pattern(syslogd_t, unlabeled_t, unlabeled_t)
+manage_dirs_pattern(syslogd_t, unlabeled_t, unlabeled_t)
+manage_files_pattern(syslogd_t,unlabeled_t, unlabeled_t)
+manage_chr_files_pattern(klogd_t, var_t, var_t)
+manage_dirs_pattern(klogd_t, var_t, var_t)
+manage_files_pattern(klogd_t,var_t, var_t)
+manage_lnk_files_pattern(klogd_t, var_t, var_t)
+manage_chr_files_pattern(klogd_t, unlabeled_t, unlabeled_t)
+manage_dirs_pattern(klogd_t, unlabeled_t, unlabeled_t)
+manage_files_pattern(klogd_t,unlabeled_t, unlabeled_t)
+manage_lnk_files_pattern(klogd_t, unlabeled_t, unlabeled_t)
+allow syslogd_t nvserver_t:msgq { unix_read unix_write associate getattr write read };
+allow syslogd_t nvserver_t:msg { send receive };
+allow syslogd_t default_t:lnk_file { read  };
+allow syslogd_t mnt_t:dir { search };
+allow syslogd_t tmpfs_t:dir { write add_name remove_name search };
+
+allow syslogd_t self:capability { sys_rawio };
+
+
+
diff --git a/patch/17.02_17.09/code/old/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
new file mode 100755
index 0000000..98ea747
--- /dev/null
+++ b/patch/17.02_17.09/code/old/esdk/layers/meta-zxic/recipes-kernel/linux-libc-headers/linux-libc-headers_5.10.bb
@@ -0,0 +1,23 @@
+require linux-libc-headers.inc
+
+SRC_URI_append_libc-musl = "\
+    file://0001-libc-compat.h-fix-some-issues-arising-from-in6.h.patch \
+    file://0003-remove-inclusion-of-sysinfo.h-in-kernel.h.patch \
+    file://0001-libc-compat.h-musl-_does_-define-IFF_LOWER_UP-DORMAN.patch \
+    file://0001-include-linux-stddef.h-in-swab.h-uapi-header.patch \
+   "
+
+SRC_URI_append = "\
+    file://0001-scripts-Use-fixed-input-and-output-files-instead-of-.patch \
+    file://0001-kbuild-install_headers.sh-Strip-_UAPI-from-if-define.patch \
+    file://0001-add-zxic-volte_drv.h.patch \
+    file://0002-add-zxic-rpmsg_zx29.h.patch \
+    file://0003-add-zxic-bsp_api_h.patch \
+    file://0001-mtd-abi.h.patch \
+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+SRC_URI[md5sum] = "753adc474bf799d569dec4f165ed92c3"
+SRC_URI[sha256sum] = "dcdf99e43e98330d925016985bfbc7b83c66d367b714b2de0cbbfcbf83d8ca43"
+
diff --git a/patch/17.02_17.09/code/old/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c b/patch/17.02_17.09/code/old/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
new file mode 100755
index 0000000..f9b23d7
--- /dev/null
+++ b/patch/17.02_17.09/code/old/upstream/linux-5.10/drivers/soc/sc/pcu/pcu-zx297520v3.c
@@ -0,0 +1,978 @@
+/*
+ *
+ * Copyright (C) 2015-2022 ZTE-TSP
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+#include <linux/kernel.h> 
+#include <linux/errno.h>
+#include <linux/irq.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of_device.h>
+#include <linux/of_irq.h>
+#include <linux/of_address.h>
+#include <linux/interrupt.h>
+#include <linux/irqdomain.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/percpu.h>
+#include <linux/refcount.h>
+#include <linux/slab.h>
+#include <linux/irqchip.h>
+#include <linux/suspend.h>
+#include <linux/syscore_ops.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+#include <linux/soc/sc/common.h>
+#include <linux/soc/sc/spinlock.h>
+#include <linux/soc/sc/pcu.h>
+#include <linux/soc/sc/rpmsg.h>
+#include <dt-bindings/soc/zx297520v3-irq.h>
+#include <uapi/linux/sc_bsp/bsp_api.h>
+#include <pub_debug_info.h>
+
+#include "pcu-common.h"
+
+#if 0
+
+#define pm_ram_log(fmt, args...)      	\
+{	\
+	pm_printk("[SLP] " fmt, ##args);	\
+}
+#else
+#define pm_ram_log(fmt, args...)      	\
+{	\
+	printk(KERN_INFO "[SLP] " fmt, ##args);	\
+}
+
+#endif
+
+#define ZX_IRQ_NUM			(IRQ_ZX297520V3_SPI_NUM + 32)
+
+#define PCU_LOCK		reg_spin_lock();
+#define PCU_UNLOCK		reg_spin_unlock();
+
+static struct zx_pcu_int_info zx297520v3_pcu_int_info[] = 
+{
+	{
+		.pcu_index		= PCU_AP_TIMER1_INT,
+	 	.gic_index		= AP_TIMER1_INT,
+		.status_index	= 51,
+	 	.wake_index		= 0,
+	 	.int_name		= "ap_timer1",
+	 	.irq_type		= IRQ_TYPE_EDGE_RISING,
+	 	.wl_type		= PM_WL_EVENT_AP_TIMER1,
+	},
+	{
+		.pcu_index		= PCU_AP_TIMER2_INT,
+	 	.gic_index		= AP_TIMER2_INT,
+	 	.status_index	= 52,	 	
+		.wake_index 	= 1,
+	 	.int_name		= "ap_timer2",
+	 	.irq_type		= IRQ_TYPE_EDGE_RISING,
+	 	.wl_type		= PM_WL_EVENT_AP_TIMER2,
+	},
+	{
+		.pcu_index		= PCU_ICP_PS2AP_INT,
+		.gic_index		= ICP_PS2AP_INT,
+	 	.status_index	= 53,		
+		.wake_index 	= 2,
+		.int_name		= "icp_ps_ap",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_ICP_PS2AP,
+	},
+	{
+		.pcu_index		= PCU_USB_POWERDWN_UP_INT,
+		.gic_index		= USB_POWERDWN_UP_INT,
+	 	.status_index	= 6,		
+		.wake_index 	= 3,
+		.int_name		= "usb_up",
+		.irq_type		= IRQ_TYPE_EDGE_RISING,
+		.wl_type		= PM_WL_EVENT_USB_POWERDWN_UP,
+	},
+	{
+		.pcu_index		= PCU_USB_POWERDWN_DOWN_INT,
+		.gic_index		= USB_POWERDWN_DOWN_INT,
+	 	.status_index	= 7,		
+		.wake_index 	= 4,
+		.int_name		= "usb_down",
+		.irq_type		= IRQ_TYPE_EDGE_FALLING,
+		.wl_type		= PM_WL_EVENT_USB_POWERDWN_DOWN,
+	},
+	{
+		.pcu_index		= PCU_HSIC_POWERDWN_UP_INT,
+		.gic_index		= HSIC_POWERDWN_UP_INT,
+	 	.status_index	= 8,		
+		.wake_index 	= 5,
+		.int_name		= "hsic_up",
+		.irq_type		= IRQ_TYPE_EDGE_RISING,
+		.wl_type		= PM_WL_EVENT_HSIC_POWERDWN_UP,
+	},
+	{
+		.pcu_index		= PCU_HSIC_POWERDWN_DOWN_INT,
+		.gic_index		= HSIC_POWERDWN_DOWN_INT,
+	 	.status_index	= 9,		
+		.wake_index 	= 6,
+		.int_name		= "hsic_down",
+		.irq_type		= IRQ_TYPE_EDGE_FALLING,
+		.wl_type		= PM_WL_EVENT_HSIC_POWERDWN_DOWN,
+	},
+	{
+		.pcu_index		= PCU_ICP_M02AP_INT,
+		.gic_index		= ICP_M02AP_INT,
+	 	.status_index	= 54,		
+		.wake_index 	= 7,
+		.int_name		= "icp_m0_ap",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_ICP_M02AP,
+	},
+	{
+		.pcu_index		= PCU_RTC_ALARM_INT,
+		.gic_index		= RTC_ALARM_INT,
+	 	.status_index	= 12,		
+		.wake_index 	= 8,
+		.int_name		= "rtc_alarm",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_ALARM,
+	},
+	{
+		.pcu_index		= PCU_RTC_TIMER_INT,
+		.gic_index		= RTC_TIMER_INT,
+	 	.status_index	= 13,		
+		.wake_index 	= 9,
+		.int_name		= "rtc_timer",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_RTC_TIMER,
+	},
+	{
+		.pcu_index		= PCU_KEYPAD_INT,
+		.gic_index		= KEYPAD_INT,
+	 	.status_index	= 14,		
+		.wake_index 	= 10,
+		.int_name		= "kpd",
+		.irq_type		= IRQ_TYPE_EDGE_RISING,
+		.wl_type		= PM_WL_EVENT_KEYPAD,
+	},
+	{
+		.pcu_index		= PCU_SD1_DATA1_INT,
+		.gic_index		= SD1_DATA1_INT,
+	 	.status_index	= 15,		
+		.wake_index 	= 11,
+		.int_name		= "sd1_d1",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_SD1_DATA1,
+	},
+	{
+		.pcu_index		= PCU_EX0_INT,
+		.gic_index		= EX0_INT,
+	 	.status_index	= 30,		
+		.wake_index 	= 14,
+		.int_name		= "ext0",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT0,
+	},
+	{
+		.pcu_index		= PCU_EX1_INT,
+		.gic_index		= EX1_INT,
+	 	.status_index	= 31,		
+		.wake_index 	= 15,
+		.int_name		= "ext1",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT1,
+	},
+	{
+		.pcu_index		= PCU_EX2_INT,
+		.gic_index		= EX2_INT,
+	 	.status_index	= 32,		
+		.wake_index 	= 16,
+		.int_name		= "ext2",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT2,
+	},
+	{
+		.pcu_index		= PCU_EX3_INT,
+		.gic_index		= EX3_INT,
+	 	.status_index	= 33,		
+		.wake_index 	= 17,
+		.int_name		= "ext3",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT3,
+	},
+	{
+		.pcu_index		= PCU_EX4_INT,
+		.gic_index		= EX4_INT,
+	 	.status_index	= 34,		
+		.wake_index 	= 18,
+		.int_name		= "ext4",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT4,
+	},
+	{
+		.pcu_index		= PCU_EX5_INT,
+		.gic_index		= EX5_INT,
+	 	.status_index	= 35,		
+		.wake_index 	= 19,
+		.int_name		= "ext5",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT5,
+	},
+	{
+		.pcu_index		= PCU_EX6_INT,
+		.gic_index		= EX6_INT,
+	 	.status_index	= 36,		
+		.wake_index 	= 20,
+		.int_name		= "ext6",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT6,
+	},
+	{
+		.pcu_index		= PCU_EX7_INT,
+		.gic_index		= EX7_INT,
+	 	.status_index	= 37,		
+		.wake_index 	= 21,
+		.int_name		= "ext7",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT7,
+	},
+	{
+		.pcu_index		= PCU_EX8_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 38,		
+		.wake_index 	= 22,
+		.int_name		= "ext8",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT8,
+	},
+	{
+		.pcu_index		= PCU_EX9_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 39,
+		.wake_index 	= 23,
+		.int_name		= "ext9",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT9,
+	},
+	{
+		.pcu_index		= PCU_EX10_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 40,		
+		.wake_index 	= 24,
+		.int_name		= "ext10",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT10,
+	},
+	{
+		.pcu_index		= PCU_EX11_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 41,		
+		.wake_index 	= 25,
+		.int_name		= "ext11",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT11,
+	},
+	{
+		.pcu_index		= PCU_EX12_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 42,		
+		.wake_index 	= 26,
+		.int_name		= "ext12",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT12,
+	},
+	{
+		.pcu_index		= PCU_EX13_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 43,		
+		.wake_index 	= 27,
+		.int_name		= "ext13",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT13,
+	},
+	{
+		.pcu_index		= PCU_EX14_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 44,		
+		.wake_index 	= 28,
+		.int_name		= "ext14",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT14,
+	},
+	{
+		.pcu_index		= PCU_EX15_INT,
+		.gic_index		= EX8IN1_INT,
+	 	.status_index	= 45,		
+		.wake_index 	= 29,
+		.int_name		= "ext15",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_EXT15,
+	},
+	{
+		.pcu_index		= PCU_SD0_DATA1_INT,
+		.gic_index		= SD0_DATA1_INT,
+	 	.status_index	= 2,		
+		.wake_index 	= 30,
+		.int_name		= "sd0_d1",
+		.irq_type		= IRQ_TYPE_LEVEL_LOW,
+		.wl_type		= PM_WL_EVENT_SD0_DATA1,
+	},
+	{
+		.pcu_index		= PCU_ICP_PHY2AP_INT,
+		.gic_index		= ICP_PHY2AP_INT,
+		.status_index	= 55,		
+		.wake_index 	= 31,
+		.int_name		= "icp_phy_ap",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= PM_WL_EVENT_ICP_PHY2AP,
+	},
+	{
+		.pcu_index		= PCU_GMACPHY_WAKE_INT,
+		.gic_index		= GMACPHY_WAKE_INT,
+		.status_index	= 60,		
+		.wake_index 	= 0xff,
+		.int_name		= "gmacphy_wake",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= 0xff,
+	},
+	{
+		.pcu_index		= PCU_UART0_RXD_INT,
+		.gic_index		= UART0_RXD_INT,
+		.status_index	= 59,		
+		.wake_index 	= 42,
+		.int_name		= "uart0_rxd",
+		.irq_type		= IRQ_TYPE_EDGE_FALLING,
+		.wl_type		= 0xff,
+
+	},
+	{
+		.pcu_index		= PCU_GMAC_INT,
+		.gic_index		= GMAC_INT,
+		.status_index	= 16,		
+		.wake_index 	= 0xff,
+		.int_name		= "gmac",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= 0xff,
+	},
+	{
+		.pcu_index		= PCU_GMACPHY_INT,
+		.gic_index		= GMACPHY_INT,
+		.status_index	= 61,		
+		.wake_index 	= 0xff,
+		.int_name		= "gmacphy",
+		.irq_type		= IRQ_TYPE_LEVEL_HIGH,
+		.wl_type		= 0xff,
+	},
+};
+
+static int zx_pcu_get_irqchip_state(struct irq_data *data,
+				     enum irqchip_irq_state which, bool *val)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_get_irqchip_state)
+		return data->chip->irq_get_irqchip_state(data, which, val);
+
+	return -ENOSYS;
+}
+
+static int zx_pcu_set_irqchip_state(struct irq_data *data,
+				     enum irqchip_irq_state which, bool val)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_set_irqchip_state)
+		return data->chip->irq_set_irqchip_state(data, which, val);
+
+	return -ENOSYS;
+}
+
+static int zx_pcu_nmi_setup(struct irq_data *data)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_nmi_setup)
+		return data->chip->irq_nmi_setup(data);
+
+	return -ENOSYS;
+}
+
+static void zx_pcu_nmi_teardown(struct irq_data *data)
+{
+	data = data->parent_data;
+
+	if (data->chip->irq_nmi_teardown)
+		data->chip->irq_nmi_teardown(data);
+}
+
+static int zx_pcu_set_wake(struct irq_data *data, unsigned int on)
+{
+	pcu_set_irq_wake(data->hwirq, on);
+
+/*	pr_info("irq:%d, onoff:%d", data->hwirq, on);*/
+	
+	return 0;
+}
+
+static void zx_pcu_eoi_irq(struct irq_data *data)
+{
+	pcu_clr_irq_pending(data->hwirq);
+
+	irq_chip_eoi_parent(data);
+}
+
+static int zx_pcu_set_type(struct irq_data *data, unsigned int type)
+{
+	unsigned int new_type = type;
+
+	if(!pcu_set_irq_type(data->hwirq, type))
+		new_type = IRQ_TYPE_LEVEL_HIGH;
+
+	return irq_chip_set_type_parent(data, new_type);
+}
+
+static int zx_pcu_set_affinity(struct irq_data *data,
+				 const struct cpumask *dest, bool force)
+{
+/*
+	if (data->hwirq == IRQ_ZX298501_AP_TIMER1)
+		return irq_chip_set_affinity_parent(data, cpumask_of(0), force); // ???
+	else
+*/		return irq_chip_set_affinity_parent(data, dest, force);
+}
+
+static struct irq_chip zx_pcu_chip = {
+	.name			= "PCU",
+	.irq_eoi		= zx_pcu_eoi_irq,
+	.irq_mask		= irq_chip_mask_parent,
+	.irq_unmask		= irq_chip_unmask_parent,
+	.irq_set_wake	= zx_pcu_set_wake,
+	.irq_set_type	= zx_pcu_set_type,
+	
+	.irq_set_affinity		= zx_pcu_set_affinity,
+	.irq_get_irqchip_state	= zx_pcu_get_irqchip_state,
+	.irq_set_irqchip_state	= zx_pcu_set_irqchip_state,
+	.irq_set_vcpu_affinity	= irq_chip_set_vcpu_affinity_parent,
+	.irq_nmi_setup			= zx_pcu_nmi_setup,
+	.irq_nmi_teardown		= zx_pcu_nmi_teardown,	
+	.flags					= IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SET_TYPE_MASKED,
+};
+
+static int zx_pcu_domain_translate(struct irq_domain *d,
+					struct irq_fwspec *fwspec,
+					unsigned long *hwirq,
+					unsigned int *type)
+{
+	if (is_of_node(fwspec->fwnode)) {
+		if (fwspec->param_count != 3)
+			return -EINVAL;
+
+		/* No PPI should point to this domain */
+		if (fwspec->param[0] != 0)
+			return -EINVAL;
+
+		*hwirq = fwspec->param[1];
+		*type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+static int zx_pcu_domain_alloc(struct irq_domain *domain,
+				    unsigned int virq,
+				    unsigned int nr_irqs, void *data)
+{
+	struct irq_fwspec *fwspec = data;
+	struct irq_fwspec parent_fwspec;
+	struct zx_pcu_dev *pcu = domain->host_data;
+	irq_hw_number_t hwirq;
+	unsigned int i;
+
+	if (fwspec->param_count != 3)
+		return -EINVAL;	/* Not GIC compliant */
+	if (fwspec->param[0] != GIC_SPI)
+		return -EINVAL;	/* No PPI should point to this domain */
+
+	hwirq = fwspec->param[1];
+	if (hwirq >= ZX_IRQ_NUM)
+		return -EINVAL;
+
+	for (i = 0; i < nr_irqs; i++) {
+		irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i,
+					      &zx_pcu_chip,
+					      (void __force *)pcu->top_reg_base);
+	}
+
+	parent_fwspec = *fwspec;
+	parent_fwspec.fwnode = domain->parent->fwnode;
+	return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs,
+					    &parent_fwspec);
+}
+
+static const struct irq_domain_ops zx_pcu_domain_ops = {
+	.translate	= zx_pcu_domain_translate,
+	.alloc		= zx_pcu_domain_alloc,
+	.free		= irq_domain_free_irqs_common,
+};
+
+static int __init zx_pcu_init(struct device_node *node,
+				   struct device_node *parent)
+{
+	struct irq_domain *parent_domain, *domain;
+	struct zx_pcu_dev *pcu;
+
+	if (!parent) {
+		pr_err("%pOF: no parent found\n", node);
+		return -ENODEV;
+	}
+
+	parent_domain = irq_find_host(parent);
+	if (!parent_domain) {
+		pr_err("%pOF: unable to obtain parent domain\n", node);
+		return -ENXIO;
+	}
+
+	pcu = &pcu_dev;
+	pcu->np				= node;
+	pcu->top_reg_base	= of_iomap(node, 0);
+	WARN(!pcu->top_reg_base, "unable to map top pcu registers\n");
+
+	pcu->int_info = zx297520v3_pcu_int_info;
+	pcu->int_count = ARRAY_SIZE(zx297520v3_pcu_int_info);
+
+	pcu_init();
+
+	domain = irq_domain_add_hierarchy(parent_domain, 0, ZX_IRQ_NUM,
+					  node, &zx_pcu_domain_ops,
+					  pcu);
+	if (!domain) {
+		pr_err("%pOF: failed to allocated domain\n", node);
+		return -ENOMEM;
+	}
+
+//	set_smp_cross_call();
+	pm_pcu_init();
+
+	return 0;
+}
+
+IRQCHIP_DECLARE(zx297520v3_pcu, "zte,zx297520v3-pcu", zx_pcu_init);
+
+/* pcu debug */
+#ifdef CONFIG_PM
+#define PCU_TOP						(pcu_dev.top_reg_base)
+
+#define ARM_AP_CONFIG_REG           (PCU_TOP + 0x0)
+#define ARM_AP_SLEEP_TIME_REG       (PCU_TOP + 4*0x3C)
+#define AP_INT_WAKE_DIS_REG        	(PCU_TOP + 4*0xD)
+#define CORE_SWITCH_CONFIG_REG    	(PCU_TOP + 4*0x2b)
+
+#define M0_INT_WAKE_DIS_REG        	(PCU_TOP + 4*0xE)
+#define PCU_INT_READOUT_REG1		(PCU_TOP + 4*0x1EB)
+#define PCU_INT_READOUT_REG2		(PCU_TOP + 4*0x1EC)
+#define PCU_INT_READOUT_REG3		(PCU_TOP + 4*0x1ED)
+
+
+/*ARM_AP_CONFIG_REG*/
+#define	PCU_SLEEP_MODE				(1U << 0)
+#define	PCU_POWEROFF_MODE			(1U << 1)
+#define	PCU_L2_CLK_GATE				(1U << 2)		/*1-can turn off*/
+#define PCU_SLEEP_2M0               (1U << 3)
+#define	PCU_SLEEP_DONE_BYPASS		(1U << 4)	 	
+#define	PCU_SW_CONFIG_MASK			(1U << 5)	 	/* ?????  */
+
+#define	PCU_MODE_MASK				(0x3U << 0)
+
+/*ARM_AP_SLEEP_TIME_REG*/
+#define	PCU_AP_SLEEP_TIME_DIS       (1U << 31)
+
+
+
+/* low power function */
+extern unsigned int pm_get_wakesource(void);
+
+/**
+ * clear pcu sleep mode.
+ * 
+ */
+void pm_clear_pcu(void)
+{
+	zx_clr_reg(ARM_AP_CONFIG_REG, PCU_MODE_MASK);
+}
+
+void pm_pcu_init(void)
+{
+	zx_clr_reg(ARM_AP_CONFIG_REG, PCU_MODE_MASK);
+	zx_set_reg(ARM_AP_CONFIG_REG, PCU_L2_CLK_GATE);
+	zx_write_reg(AP_INT_WAKE_DIS_REG, ~(pm_get_wakesource()));
+}
+
+void zx_apmgclken_set(unsigned en)
+{
+	unsigned tmp;
+	if(en){
+		//set ps_clk_switch=1
+		tmp = zx_read_reg(CORE_SWITCH_CONFIG_REG);
+		tmp |= (0x1<<2);
+		zx_write_reg(CORE_SWITCH_CONFIG_REG, tmp);
+	} else{
+		//set ps_clk_switch=0
+		tmp = zx_read_reg(CORE_SWITCH_CONFIG_REG);
+		tmp &= ~(0x1<<2);
+		zx_write_reg(CORE_SWITCH_CONFIG_REG, tmp);
+	}
+}
+
+
+/**
+ * config pcu before poweroff
+ * 
+ */
+void pm_set_pcu_poweroff(u32 sleep_time)
+{
+	zx_set_reg(ARM_AP_CONFIG_REG, PCU_POWEROFF_MODE);
+	zx_write_reg(ARM_AP_SLEEP_TIME_REG, sleep_time);
+}
+EXPORT_SYMBOL(pm_set_pcu_poweroff);
+
+
+/**
+ * config pcu before sleep
+ * 
+ */
+void pm_set_pcu_sleep(u32 sleep_time)
+{
+	zx_set_reg(ARM_AP_CONFIG_REG, PCU_SLEEP_MODE);
+	zx_write_reg(ARM_AP_SLEEP_TIME_REG, sleep_time);
+}
+
+/**
+ * get wakeup setting.
+ * 
+ */
+unsigned int pcu_get_wakeup_setting(void)
+{
+	return zx_read_reg(AP_INT_WAKE_DIS_REG);
+}
+/**
+ * set wakeup enable by gic.
+ * 
+ * 
+ */
+unsigned int  gic_wake_enable[3]=
+{
+	(1<<ICP_PS2AP_INT) |(1<<ICP_M02AP_INT) | (1<<AP_TIMER1_INT) | (1<<EX8IN1_INT),
+	0, 
+	0
+};
+
+extern void show_icp_state(T_RpMsg_CoreID actorID);
+void pm_get_wake_cause(void)
+{
+	unsigned int	int_status[2];
+	int 			i = 0;
+	int 			index_found = 0xff;
+	unsigned int	pcu_wake_setting[2];
+		
+	/* when wake up, the level is high&the value is 0*/
+	int_status[0] = zx_read_reg(PCU_INT_READOUT_REG1);
+	int_status[1] = zx_read_reg(PCU_INT_READOUT_REG2);
+
+	pcu_wake_setting[0] = zx_read_reg(AP_INT_WAKE_DIS_REG);
+	pcu_wake_setting[1] = zx_read_reg(M0_INT_WAKE_DIS_REG);
+
+	for(i=0; i<ARRAY_SIZE(zx297520v3_pcu_int_info); i++)
+	{
+		if (zx297520v3_pcu_int_info[i].wake_index == 0xff)
+			continue;
+
+		if(pcu_wake_setting[0]&BIT(zx297520v3_pcu_int_info[i].wake_index))	
+			continue;
+
+		if(int_status[zx297520v3_pcu_int_info[i].status_index/32]&(1<<(zx297520v3_pcu_int_info[i].status_index%32)))
+			continue;
+
+		index_found = i;
+		break;
+	}
+	
+	if(index_found != 0xff)
+	{
+		pm_ram_log(" wake: %d  [%s]\n", zx297520v3_pcu_int_info[index_found].gic_index, zx297520v3_pcu_int_info[index_found].int_name);
+		sc_debug_info_record(MODULE_ID_CAP_PM, " wake: %d  [%s]\n", zx297520v3_pcu_int_info[index_found].gic_index, zx297520v3_pcu_int_info[index_found].int_name);
+
+		if(zx297520v3_pcu_int_info[index_found].gic_index ==ICP_PS2AP_INT) {
+			show_icp_state(CORE_PS0);
+		}
+		pm_ram_log(" pcu int status:0x%x 0x%x\n",int_status[0], int_status[1]);
+
+		pm_wl_set_event(pcu_get_wl_index_by_gic(zx297520v3_pcu_int_info[index_found].gic_index));
+	}
+	else
+	{
+		pm_ram_log(" wake abnormal\n");
+		pm_ram_log(" pcu int status:0x%x 0x%x\n",int_status[0], int_status[1]);
+	}
+}
+
+static struct wakeup_source *zx_main_ws;
+static int zx_pcu_pm_callback(struct notifier_block *nb,
+			unsigned long action, void *ptr)
+{
+	switch (action) {
+
+	case PM_POST_SUSPEND:
+		__pm_wakeup_event(zx_main_ws, 1000);		
+		break;
+
+	default:
+		return NOTIFY_DONE;
+	}
+
+	return NOTIFY_OK;
+}
+
+static int pcu_pm_suspend(void)
+{
+	int ret = 0;
+
+	return ret;
+}
+
+static void pcu_pm_resume(void)
+{
+//	pcu_get_wake_cause();
+}
+
+static struct syscore_ops pcu_pm_syscore_ops = {
+	.suspend = pcu_pm_suspend,
+	.resume = pcu_pm_resume,
+};
+
+static int pcu_pm_init(void)
+{
+	zx_main_ws = wakeup_source_register(NULL, "zx_main");
+	if (!zx_main_ws)
+		return -ENOMEM;
+
+	pm_notifier(zx_pcu_pm_callback, 0);
+
+	register_syscore_ops(&pcu_pm_syscore_ops);
+	return 0;
+}
+core_initcall(pcu_pm_init);
+#endif
+
+/* --------------------------------------------------------------------
+ * extint_8in1
+ * -------------------------------------------------------------------- */
+
+struct ext8in1_info {
+	struct irq_domain   *domain;
+	struct regmap 		*regmap;
+	int                 parent_irq;
+	
+};
+
+struct ext8in1_info ext8in1_dev = {0};
+
+/*
+ * return external interrupt number from ex8-ex15,
+ * return value is 0-7
+ */
+static unsigned int pcu_get_8in1_int_source(void)
+{  
+	unsigned int vector_8in1 = 0;
+ 
+	vector_8in1 = zx_read_reg(pcu_dev.top_reg_base+0x12C);	 
+	
+	return 	(vector_8in1&0x7);
+}
+ 
+
+/*external int 8-15 need extra clear*/
+static void pcu_int_clear_8in1(unsigned int pcu_index)
+{	
+	unsigned int vector=0;
+	
+	if ( (pcu_index >= PCU_EX8_INT)&&(pcu_index <= PCU_EX15_INT) )
+	{
+		/*
+		 *in 7510 platform, 8in1 interrupt would be used by different cores.
+		 *when any core installs a new 8in1 interrupt, another core may be 
+		 * responding another 8in1 interrupt, so  8in1 interrupt shouldn't be 
+		 *cleared. in this case, nothing to be done. but a new problem comes,
+		 * the core install new  8in1 interrupt will receive a fake interrupt.
+		 */
+		vector = pcu_get_8in1_int_source();
+		if (pcu_index != (vector + PCU_EX8_INT) )
+			return;
+
+		PCU_LOCK
+   		zx_write_reg(pcu_dev.top_reg_base+0x128, 0x1);
+		PCU_UNLOCK
+
+		pcu_int_clear(pcu_index);
+	}
+}
+
+static void ext8in1_irq_lock(struct irq_data *data){}
+static void ext8in1_irq_sync_unlock(struct irq_data *data){}
+static void ext8in1_irq_mask(struct irq_data *data){}
+static void ext8in1_irq_unmask(struct irq_data *data){}
+static int ext8in1_irq_set_wake(struct irq_data *data, unsigned int on)
+{
+	if (!data)
+		return -EINVAL;
+
+	pcu_set_irq_wake_by_pcu(data->hwirq + PCU_EX8_INT, on);
+
+	return 0;
+}
+
+static int ext8in1_irq_set_type(struct irq_data *data, unsigned int type)
+{
+	if (!data)
+		return -EINVAL;
+
+	pcu_int_set_type(data->hwirq + PCU_EX8_INT, type);
+
+	pcu_int_clear_8in1(data->hwirq + PCU_EX8_INT);
+
+	return 0;
+}
+
+static struct irq_chip ext8in1_irq_chip =
+{
+    .name           		= "ext8in1",
+
+	.irq_set_wake			= ext8in1_irq_set_wake,
+	.irq_set_type			= ext8in1_irq_set_type,
+	.irq_mask				= ext8in1_irq_mask,
+	.irq_unmask				= ext8in1_irq_unmask,
+	.irq_bus_lock			= ext8in1_irq_lock,
+	.irq_bus_sync_unlock	= ext8in1_irq_sync_unlock,
+};
+
+static void ext8in1_handle_irq(struct irq_desc *desc)
+{
+	struct ext8in1_info *data = irq_desc_get_handler_data(desc);
+	struct irq_chip *chip = irq_desc_get_chip(desc);
+	int virq;
+	int hwirq, new_hwirq;
+
+	chained_irq_enter(chip, desc);
+   
+    hwirq = pcu_get_8in1_int_source();
+
+	while(1) {
+		pcu_int_clear_8in1(hwirq + PCU_EX8_INT);
+
+		virq = irq_find_mapping(data->domain, hwirq);
+		if (virq > 0)
+			generic_handle_irq(virq);
+
+		new_hwirq = pcu_get_8in1_int_source();
+        if (hwirq == new_hwirq)
+            break;
+        else
+            hwirq = new_hwirq;
+	}
+
+	chained_irq_exit(chip, desc);
+}
+
+extern void mask_irq(struct irq_desc *desc);
+extern void unmask_irq(struct irq_desc *desc);
+static int ext8in1_irq_resume(struct device *dev)
+{
+	unmask_irq(irq_to_desc(ext8in1_dev.parent_irq));
+
+	return 0;
+}
+
+static int ext8in1_irq_suspend(struct device *dev)
+{
+	mask_irq(irq_to_desc(ext8in1_dev.parent_irq));
+
+	return 0;
+}
+
+static int zx_ext8in1_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct device_node *parent_np;
+	struct regmap *regmap;
+	struct ext8in1_info *data = &ext8in1_dev;
+	int i;
+
+	parent_np = of_parse_phandle(pdev->dev.of_node, "parent-syscon", 0);
+	if (!parent_np) {
+		dev_err(&pdev->dev, "Can't get parent-syscon\n");
+		return -EINVAL;
+	}
+	
+	regmap = syscon_node_to_regmap(parent_np);
+	if (IS_ERR(regmap)) {
+		of_node_put(parent_np);
+		return PTR_ERR(regmap);
+	}	
+	data->regmap = regmap;
+
+	data->parent_irq = platform_get_irq(pdev, 0);
+	if (data->parent_irq <= 0)
+		return -EPROBE_DEFER;
+
+	data->domain = irq_domain_add_linear(np, 8, &irq_domain_simple_ops, NULL);
+	if (!data->domain)
+		return -ENODEV;
+
+	for (i = EX8_INT; i <= EX15_INT; i++) {
+		int virq = irq_create_mapping(data->domain, i);
+
+		irq_set_chip_and_handler(virq, &ext8in1_irq_chip,
+					 handle_simple_irq);
+		irq_set_chip_data(virq, data);
+	}
+
+	irq_set_chained_handler_and_data(data->parent_irq,
+					 ext8in1_handle_irq, data);
+	enable_irq_wake(data->parent_irq);
+
+	pr_info("zx_ext8in1 init OK. \n");
+
+	return 0;
+}
+
+static const struct of_device_id zx_ext8in1_match[] = {
+	{ .compatible = "zte,zx297520v3-ext8in1" },
+	{ }
+};
+
+static const struct dev_pm_ops ext8in1_irq_pm_ops = {
+	.resume = ext8in1_irq_resume,
+	.suspend = ext8in1_irq_suspend,
+};
+
+static struct platform_driver zx_ext8in1_driver = {
+	.probe = zx_ext8in1_probe,
+	.driver = {
+		.name = "zx_ext8in1_drv",
+		.of_match_table = zx_ext8in1_match,
+		.pm = &ext8in1_irq_pm_ops,
+	},
+};
+
+static int __init zx_ext8in1_driver_init(void)
+{
+	return platform_driver_register(&zx_ext8in1_driver);
+}
+core_initcall(zx_ext8in1_driver_init);
+
