Merge "[Bugfix][API-619][SMS]Fixing memory leaks" into MR3.0
diff --git a/meta-sdk/meta-sdk.tar.gz b/meta-sdk/meta-sdk.tar.gz
index 7274568..dee47fc 100644
--- a/meta-sdk/meta-sdk.tar.gz
+++ b/meta-sdk/meta-sdk.tar.gz
Binary files differ
diff --git a/meta/meta-mediatek-mt2735/recipes-extended/thermal_core/thermal-core/thermal.conf b/meta/meta-mediatek-mt2735/recipes-extended/thermal_core/thermal-core/thermal.conf
index 7ffd0ee..96298cf 100755
--- a/meta/meta-mediatek-mt2735/recipes-extended/thermal_core/thermal-core/thermal.conf
+++ b/meta/meta-mediatek-mt2735/recipes-extended/thermal_core/thermal-core/thermal.conf
@@ -23,16 +23,16 @@
 mode= enabled
 policy= step_wise
 critical_temp= 115000
-cooler= [mutt-pa1, tx-pwr-pa1, mutt-pa1-no-ims]
-cooler_trip_temp= [82000, 85000, 90000]
+cooler= [tx-pwr-pa1]
+cooler_trip_temp= [85000]
 
 [LTF]
 thermal_zone= nrpa_ntc
 mode= enabled
 policy= step_wise
 critical_temp= 115000
-cooler= [mutt-pa2, tx-pwr-pa2, mutt-pa2-no-ims]
-cooler_trip_temp= [82000, 85000, 90000]
+cooler= [tx-pwr-pa2, scg_off_pa2]
+cooler_trip_temp= [85000, 95000]
 
 [LTF]
 thermal_zone= rf_ntc
diff --git a/meta/poky/meta/classes/kernel.bbclass b/meta/poky/meta/classes/kernel.bbclass
index c72d1fe..afc2532 100644
--- a/meta/poky/meta/classes/kernel.bbclass
+++ b/meta/poky/meta/classes/kernel.bbclass
@@ -157,9 +157,10 @@
 export OS = "${TARGET_OS}"
 export CROSS_COMPILE = "${TARGET_PREFIX}"
 export KBUILD_BUILD_VERSION = "1"
-export KBUILD_BUILD_USER ?= "oe-user"
-export KBUILD_BUILD_HOST ?= "oe-host"
-
+#LXF 2022.10.10 modify for T8TSK-91 start
+#export KBUILD_BUILD_USER ?= "oe-user"
+#export KBUILD_BUILD_HOST ?= "oe-host"
+#LXF 2022.10.10 modify for T8TSK-91 end
 KERNEL_RELEASE ?= "${KERNEL_VERSION}"
 
 # The directory where built kernel lies in the kernel tree
diff --git a/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c b/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
index f488f43..88300aa 100644
--- a/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
+++ b/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
@@ -813,18 +813,19 @@
 	mt_set_gpio_dir(GPIO25, GPIO_DIR_OUT);
 	mt_set_gpio_out(GPIO25, GPIO_OUT_ZERO);
 	
-	/*
+//you.chen@20220606 modify for wifi begin
 	mt_set_gpio_mode(GPIO67, 0);
 	mt_set_gpio_dir(GPIO67, GPIO_DIR_OUT);
 	mt_set_gpio_out(GPIO67, GPIO_OUT_ZERO);
 	
 	mt_set_gpio_mode(GPIO68, 0);
-	mt_set_gpio_dir(GPIO68, GPIO_DIR_OUT);
-	mt_set_gpio_out(GPIO68, GPIO_OUT_ZERO);
+	mt_set_gpio_pull_enable(GPIO68, GPIO_PULL_ENABLE);
+	mt_set_gpio_pull_select(GPIO68, GPIO_PULL_UP);
 	
 	mt_set_gpio_mode(GPIO69, 0);
-	mt_set_gpio_dir(GPIO69, GPIO_DIR_OUT);
-	mt_set_gpio_out(GPIO69, GPIO_OUT_ZERO);*/
+	mt_set_gpio_pull_enable(GPIO69, GPIO_PULL_ENABLE);
+	mt_set_gpio_pull_select(GPIO69, GPIO_PULL_UP);
+//you.chen@20220606 modify for wifi end
 	
 //tianyan@2021.12.1 modify for DTR/RI gpio start		
 	mt_set_gpio_mode(GPIO6, 1);
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi
index da98129..bb47281 100644
--- a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi
@@ -1638,40 +1638,53 @@
 			thermal-sensors = <&tboard_thermistor2>;
 
 			trips {
-				nrpa_ntc_target: nrpa_ntc_trip@0 {
+				/*nrpa_ntc_target: nrpa_ntc_trip@0 {
 					temperature = <82000>;
 					hysteresis = <2000>;
 					type = "passive";
 				};
-				nrpa_ntc_tx_pwr: nrpa_ntc_trip@1 {
+				*/
+				nrpa_ntc_tx_pwr: nrpa_ntc_trip@0 {
 					temperature = <85000>;
 					hysteresis = <2000>;
 					type = "passive";
 				};
-				nrpa_ntc_no_ims: nrpa_ntc_trip@2 {
+				/*nrpa_ntc_no_ims: nrpa_ntc_trip@2 {
 					temperature = <90000>;
 					hysteresis = <2000>;
 					type = "passive";
 				};
-				nrpa_ntc_crit: nrpa_ntc_trip@3 {
+				*/
+				nrpa_ntc_scg_off: nrpa_ntc_trip@1 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				nrpa_ntc_crit: nrpa_ntc_trip@2 {
 					temperature = <115000>;
 					hysteresis = <2000>;
 					type = "critical";
 				};
 			};
 			cooling-maps {
-				map0 {
+				/*map0 {
 					trip = <&nrpa_ntc_target>;
 					cooling-device = <&mutt_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
 				};
-				map1 {
+				*/
+				map0 {
 					trip = <&nrpa_ntc_tx_pwr>;
 					cooling-device = <&tx_pwr_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
-				};
-				map2 {
+				};	
+				/*map2 {
 					trip = <&nrpa_ntc_no_ims>;
 					cooling-device = <&mutt_pa2_no_ims THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
 				};
+				*/
+				map1 {
+				trip = <&nrpa_ntc_scg_off>;
+				cooling-device = <&scg_off_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};			
 			};
 		};
 
@@ -1681,21 +1694,23 @@
 			thermal-sensors = <&tboard_thermistor3>;
 
 			trips {
-				ltepa_ntc_target: ltepa_ntc_trip@0 {
+				/*ltepa_ntc_target: ltepa_ntc_trip@0 {
 					temperature = <82000>;
 					hysteresis = <2000>;
 					type = "passive";
 				};
+				*/
 				ltepa_ntc_tx_pwr: ltepa_ntc_trip@1 {
 					temperature = <85000>;
 					hysteresis = <2000>;
 					type = "passive";
 				};
-				ltepa_ntc_no_ims: ltepa_ntc_trip@2 {
+				/*ltepa_ntc_no_ims: ltepa_ntc_trip@2 {
 					temperature = <90000>;
 					hysteresis = <2000>;
 					type = "passive";
 				};
+				*/
 				ltepa_ntc_crit: ltepa_ntc_trip@3 {
 					temperature = <115000>;
 					hysteresis = <2000>;
@@ -1703,18 +1718,20 @@
 				};
 			};
 			cooling-maps {
-				map0 {
+				/*map0 {
 					trip = <&ltepa_ntc_target>;
 					cooling-device = <&mutt_pa1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
 				};
+				*/
 				map1 {
 					trip = <&ltepa_ntc_tx_pwr>;
 					cooling-device = <&tx_pwr_pa1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
 				};
-				map2 {
+				/*map2 {
 					trip = <&ltepa_ntc_no_ims>;
 					cooling-device = <&mutt_pa1_no_ims THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
 				};
+				*/
 			};
 		};
 
diff --git a/src/kernel/linux/v4.19/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/src/kernel/linux/v4.19/drivers/net/ethernet/mediatek/mtk_eth_soc.c
old mode 100644
new mode 100755
index 6dd83e1..724193d
--- a/src/kernel/linux/v4.19/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/src/kernel/linux/v4.19/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1237,8 +1237,13 @@
 
 #if defined(CONFIG_HW_NAT)
 		/* fast path FP is QDMA. default uses mac1(eth0) */
-		if (mac > 1)
-			mac = netif_running(eth->netdev[1]) ? 1 : 0;
+		/*Lxf modify for api-604 20220930 start*/
+		if (mac > 1) {
+			netdev = eth->netdev[1];
+			mac = (netdev && netif_running(netdev)) ?
+			       eth->mac[1]->id : eth->mac[0]->id;
+		}
+		/*Lxf modify for api-604 20220930 end*/
 #endif
 		if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
 			     !eth->netdev[mac]))
diff --git a/src/kernel/linux/v4.19/drivers/pci/controller/pcie-mediatek-gen3.c b/src/kernel/linux/v4.19/drivers/pci/controller/pcie-mediatek-gen3.c
index de627f9..95d7104 100644
--- a/src/kernel/linux/v4.19/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/src/kernel/linux/v4.19/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -466,16 +466,20 @@
 	val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB;
 	writel(val, port->base + PCIE_RST_CTRL_REG);
 
+	//you.chen@202221011 add mtk patch for pcie reset sequence begin
+	msleep(100);
+
 	/* De-assert reset signals*/
-	val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB);
+	val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB);
 	writel(val, port->base + PCIE_RST_CTRL_REG);
 
 	/* Delay 100ms to wait the reference clocks become stable */
-	usleep_range(100 * 1000, 120 * 1000);
+	//usleep_range(100 * 1000, 120 * 1000);
 
 	/* De-assert pe reset*/
-	val &= ~PCIE_PE_RSTB;
-	writel(val, port->base + PCIE_RST_CTRL_REG);
+	//val &= ~PCIE_PE_RSTB;
+	//writel(val, port->base + PCIE_RST_CTRL_REG);
+	//you.chen@202221011 add mtk patch for pcie reset sequence end
 
 	/* Check if the link is up or not */
 	err = readl_poll_timeout(port->base + PCIE_LINK_STATUS_REG, val,
diff --git a/src/kernel/linux/v4.19/scripts/mkcompile_h b/src/kernel/linux/v4.19/scripts/mkcompile_h
index 87f1fc9..aebd613 100755
--- a/src/kernel/linux/v4.19/scripts/mkcompile_h
+++ b/src/kernel/linux/v4.19/scripts/mkcompile_h
@@ -39,7 +39,9 @@
 	TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
 fi
 if test -z "$KBUILD_BUILD_USER"; then
-	LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
+#LXF 2022.10.10 modify for T8TSK-91 start
+	LINUX_COMPILE_BY=${USER}
+#LXF 2022.10.10 modify for T8TSK-91 end
 else
 	LINUX_COMPILE_BY=$KBUILD_BUILD_USER
 fi
@@ -48,13 +50,15 @@
 else
 	LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
 fi
+#LXF 2022.10.10 modify for T8TSK-91 start
+COMMITID=$(git rev-parse --short HEAD)
 
 UTS_VERSION="#$VERSION"
 CONFIG_FLAGS=""
 if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
 if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
-UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
-
+UTS_VERSION="$COMMITID $UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
+#LXF 2022.10.10 modify for T8TSK-91 end
 # Truncate to maximum length
 
 UTS_LEN=64
@@ -68,8 +72,10 @@
   echo \#define UTS_MACHINE \"$ARCH\"
 
   echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
-
-  echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
+#LXF 2022.10.10 modify for T8TSK-91 start
+  printf '#define LINUX_COMPILE_BY "%s"\n' "$LINUX_COMPILE_BY"
+  #echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
+#LXF 2022.10.10 modify for T8TSK-91 end
   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
 
   echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//'`\"
diff --git a/src/kernel/modules/netsys_driver/nat/hw_nat/hnat_common.c b/src/kernel/modules/netsys_driver/nat/hw_nat/hnat_common.c
old mode 100644
new mode 100755
index 09360ce..c4e9b0e
--- a/src/kernel/modules/netsys_driver/nat/hw_nat/hnat_common.c
+++ b/src/kernel/modules/netsys_driver/nat/hw_nat/hnat_common.c
@@ -1026,10 +1026,13 @@
 	}
 
 	if (debug_level >= 10)
-		pr_notice("%s, send to ppe via ETH tx\n", __func__);
+/*Lxf modify for api-604 20220930 start*/
+		pr_notice("%s, send to ppe via %s tx\n", __func__, skb->dev->name);
+		
 
-	dev_queue_xmit(skb);
-
+	//dev_queue_xmit(skb);
+	skb->dev->netdev_ops->ndo_start_xmit(skb, skb->dev);
+/*Lxf modify for api-604 20220930 end*/
 	return 0;
 }
 
@@ -1300,8 +1303,10 @@
 
 	if (debug_level >= 7)
 		pr_notice("%s, bind to cpu done if name = %s\n",  __func__, skb->dev->name);
-
-	dev_queue_xmit(skb);
+/*Lxf modify for api-604 20220930 start*/
+	//dev_queue_xmit(skb);
+	skb->dev->netdev_ops->ndo_start_xmit(skb, skb->dev);
+/*Lxf modify for api-604 20220930 end*/
 
 	return 0;
 }
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
index f771062..e854df8 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -85,7 +85,7 @@
 /*Warren add for t103 szzt atsvc 2022/1/5 start*/
 int lynqUpdateApnStatus(char *apn,char *apntype,int pdnState,char *ifname)
 {
-    char BUF[32] = {};
+    char BUF[256] = {};
     int len = -1;
     if(pdnState==PDN_CONNECTED)
     {
diff --git a/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp b/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp
index ac7cd11..9006096 100755
--- a/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp
@@ -106,19 +106,6 @@
     return;
 }
 
-#if 0
-static void lynq_get_sim_state(RIL_SIM_COUNT id){
-    char *argv[MAX_ARGS];
-    if(utils::is_support_dsds()) {
-        id = (RIL_SIM_COUNT)get_default_sim_all_except_data();
-    } else if(utils::is_suppport_dsss()) {
-        id = (RIL_SIM_COUNT)Phone_utils::get_enable_sim_for_dsss();
-    }
-    RequestInfo *pRI  = creatRILInfoAndInit(RIL_REQUEST_GET_SIM_STATUS, UDP, (RIL_SOCKET_ID)(id));
-    getIccCardStatus(RIL_REQUEST_GET_SIM_STATUS,argv,(RIL_SOCKET_ID)id,pRI);
-}
-#endif
-
 void *thread_test(void *arg){
     char gnss_buf[128] = {0};
     lynq_factory_response_ttyGS3("+GPS OPEN:OK\n");
@@ -183,47 +170,6 @@
 }
 
 void *thread_test_RGMII(void *arg){
-    #if 0
-    FILE *fp;
-    char ipv4[128] = {0};
-    fp= popen("ifconfig 'eth1' | grep \"inet addr\" | cut -f 2 -d \":\" | cut -f 1 -d \" \" 2>&1", "r");
-    if(NULL == fp){
-        lynq_factory_response_ttyGS3("popen errorn\n");
-        return 0;
-    }
-    fgets(ipv4,sizeof(ipv4),fp);
-    if(strstr(ipv4, "error"))
-    {
-        lynq_factory_response_ttyGS3("SGMII don't insert\n");
-        return 0;
-    }
-    else
-    {
-        parse_ipv4(ipv4);
-        char cmd[128] = {0};
-        sprintf(cmd, "%s %s %s %s", "ping -I eth1", ipv4, "-c4", "2>&1");
-        fp=popen(cmd, "r");
-        if(NULL == fp){
-            lynq_factory_response_ttyGS3("popen errorn\n");
-            return 0;
-        }
-        char lynq_factory_buf[1024] = {0};
-        while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
-        {
-            if(strstr(lynq_factory_buf, "Usage"))
-            {
-                lynq_factory_response_ttyGS3("SGMII cannot recognize IP addresses\n");
-                lynq_factory_response_ttyGS3("ERROR\n");
-                pclose(fp);
-                return 0;
-            }
-            lynq_factory_response_ttyGS3(lynq_factory_buf);
-        }
-        lynq_factory_response_ttyGS3("OK\n");
-        pclose(fp);
-        return 0;
-    }
-    #endif
     char cmd[128] = {0};
     FILE *fp;
     sprintf(cmd, "%s %s %s %s", "ping -I eth2", rgmii, "-c4", "2>&1");
@@ -272,47 +218,6 @@
  * 
  */
 void *thread_test_SGMII_wtf(void *arg){
-    #if 0
-    FILE *fp;
-    char ipv4[128] = {0};
-    fp= popen("ifconfig 'eth1' | grep \"inet addr\" | cut -f 2 -d \":\" | cut -f 1 -d \" \" 2>&1", "r");
-    if(NULL == fp){
-        lynq_factory_response_ttyGS3("popen errorn\n");
-        return 0;
-    }
-    fgets(ipv4,sizeof(ipv4),fp);
-    if(strstr(ipv4, "error"))
-    {
-        lynq_factory_response_ttyGS3("SGMII don't insert\n");
-        return 0;
-    }
-    else
-    {
-        parse_ipv4(ipv4);
-        char cmd[128] = {0};
-        sprintf(cmd, "%s %s %s %s", "ping -I eth1", ipv4, "-c4", "2>&1");
-        fp=popen(cmd, "r");
-        if(NULL == fp){
-            lynq_factory_response_ttyGS3("popen errorn\n");
-            return 0;
-        }
-        char lynq_factory_buf[1024] = {0};
-        while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
-        {
-            if(strstr(lynq_factory_buf, "Usage"))
-            {
-                lynq_factory_response_ttyGS3("SGMII cannot recognize IP addresses\n");
-                lynq_factory_response_ttyGS3("ERROR\n");
-                pclose(fp);
-                return 0;
-            }
-            lynq_factory_response_ttyGS3(lynq_factory_buf);
-        }
-        lynq_factory_response_ttyGS3("OK\n");
-        pclose(fp);
-        return 0;
-    }
-    #endif
     FILE *fp;
     char cmd[128] = {0};
     sprintf(cmd, "%s %s %s %s", "ping -I eth1", sgmii, "-c4", "2>&1");
@@ -385,42 +290,9 @@
 }
 
 static void lynq_gps_enable(void){
-    #if 1
+   
     enable_nema = 1;
-    // sustain = 1;
-    // int res = -1;
-    // res = pthread_cancel(lynq_gps_tid);
-    // if(res){
-    //     lynq_factory_response_ttyGS3("pthread cancel fail\n");
-    //     return;
-    // }
-    // pthread_join(lynq_gps_tid,NULL);
-    // int ret = system("killall mnld_test");
     lynq_factory_response_ttyGS3("+GPS ENABLE:OK\n");
-    // if(!ret){
-    //     lynq_factory_response_ttyGS3("GPS CLOSE SUCCESS\n");
-    // }
-    // else{
-    //     lynq_factory_response_ttyGS3("GPS CLOSE Failed\n");
-    // }
-    #endif
-    #if 0
-    system("killall mnld_test");
-    FILE *fp;
-    char test[100] = {0};
-    sleep(1);
-    sprintf(test, "cat /etc/gnss/*.nma %s", "2>&1");
-    char lynq_factory_buf[1024] = {0};
-    fp=popen(test, "r");
-    if(NULL == fp){
-        lynq_factory_response_ttyGS3("popen errorn\n");
-        return;
-    }
-    while(NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
-        lynq_factory_response_ttyGS3(lynq_factory_buf);
-    }
-    pclose(fp);
-    #endif
     return;
 }
 
@@ -435,55 +307,12 @@
 {
     already_gps = 0;
     enable_nema = 0;
+    sustain = 0;
     system("killall lynq-gnss-test");
     lynq_factory_response_ttyGS3("+GPS CLOSE:OK\n");
     return;
 }
 
-#if 0
-static void lynq_wifi_open(void){
-    FILE *fp;
-    char test[100] = {0};
-    sprintf(test, "connmanctl enable wifi %s", "2>&1");
-    char lynq_factory_buf[1024] = {0};
-    fp=popen(test, "r");
-    if(NULL == fp){
-        lynq_factory_response_ttyGS3("popen errorn\n");
-        return;
-    }
-    while(NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
-        if(strlen(lynq_factory_buf) > 0)
-        {
-            lynq_factory_response_ttyGS3(lynq_factory_buf);
-        }else{
-            lynq_factory_response_ttyGS3("+CME: ERROR TIMEOUT\n");
-        }
-    }
-    pclose(fp);
-}
-
-static void lynq_wifi_close(void){
-    FILE *fp;
-    char test[100] = {0};
-    sprintf(test, "connmanctl disable wifi %s", "2>&1");
-    char lynq_factory_buf[1024] = {0};
-    fp=popen(test, "r");
-    if(NULL == fp){
-        lynq_factory_response_ttyGS3("popen errorn\n");
-        return;
-    }
-    while(NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
-        if(strlen(lynq_factory_buf) > 0)
-        {
-            lynq_factory_response_ttyGS3(lynq_factory_buf);
-        }else{
-            lynq_factory_response_ttyGS3("+CME: ERROR TIMEOUT\n");
-        }
-    }
-    pclose(fp);
-}
-#endif
-
 int lynq_dispose_factory_adc(int num,char *argv[MAX_ARGS])
 {
     if(num != 5)
@@ -602,26 +431,6 @@
     return 0;
 }
 
-#if 0
-static void lynq_gpsinfo(char *argv){
-    if(argv ==NULL)
-        return;
-    // pthread_mutex_lock(&s_gps_state_change_mutex);
-    enable_nema = atoi(argv);
-    // pthread_cond_signal(&s_gps_change_cond);
-    // pthread_mutex_unlock(&s_gps_state_change_mutex);
-    if(enable_nema == 1){
-        lynq_factory_response_ttyGS3("enable neam\n"); 
-    }
-    else if(enable_nema == 0){
-        lynq_factory_response_ttyGS3("disable neam\n"); 
-    }
-    else{
-        lynq_factory_response_ttyGS3("invalid value\n"); 
-    }
-}
-#endif
-
 int lynq_check_gpio()
 {
     #if 1
@@ -711,22 +520,6 @@
     }
     return 0;
     #endif
-    #if 0
-    FILE *fp;
-    char lynq_usb_dev[52] = {0};
-    sprintf(lynq_usb_dev,"source /data/gpio/T800_GPIO_TEST.sh  2>&1");
-    fp=popen(lynq_usb_dev, "r");
-    char lynq_usb_buf[512];
-    if(NULL == fp){
-        lynq_factory_response_ttyGS3("popen errorn\n");
-        return 0;
-    }
-    while(NULL != fgets(lynq_usb_buf,sizeof(lynq_usb_buf),fp)){
-        lynq_factory_response_ttyGS3(lynq_usb_buf);
-    }
-    pclose(fp);
-    return 0;
-    #endif
 }
 
 int lynq_test_sink(){
@@ -882,16 +675,9 @@
         {
             lynq_sendRequestToMd(RIL_REQUEST_DEVICE_IDENTITY,i);
         }
-        //lynq_get_imei(num, argv);
     }
     if(num < 4)
         return -1;
-    // if(!strcmp(argv[3], "wifi")){
-    //     lynq_wifi_open();
-    // }
-    // else if(!strcmp(argv[3], "wifi_close")){
-    //     lynq_wifi_close();
-    // }
     else if(!strcmp(argv[3], "gps_open")){
         lynq_gps_open(argv[4]);
     }
@@ -907,17 +693,6 @@
     else if(!strcmp(argv[3], "sink")){
         lynq_test_sink();
     }
-    #if 0
-    else if(!strcmp(argv[3], "gpsinfo")){
-        lynq_gpsinfo(argv[4]);
-    }
-    else if(!strcmp(argv[3], "sim1")){
-        lynq_get_sim_state(sim1);
-    }
-    else if(!strcmp(argv[3], "sim2")){
-        lynq_get_sim_state(sim2);
-    }
-    #endif
     else if(!strcmp(argv[3], "rgmii")){
         lynq_test_RGMII(argv[4]);
     }
@@ -932,10 +707,6 @@
     {
          lynq_dispose_factory_usb(num,argv);
     }
-    // else if((!strcmp(argv[3],"audio")))
-    // {
-    //     lynq_dispose_factory_audio(num,argv);
-    // }
     else if((!strcmp(argv[3], "emmc")))
     {
         lynq_check_emmc();
diff --git a/src/lynq/framework/lynq-ril-service/src/ril.cpp b/src/lynq/framework/lynq-ril-service/src/ril.cpp
index 3a0ff1d..8e0bbb1 100755
--- a/src/lynq/framework/lynq-ril-service/src/ril.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ril.cpp
@@ -82,6 +82,7 @@
 #include "lynq_user.h"
 #include "lynq_rndis.h"
 #include "lynq_factory.h"
+#include <sys/stat.h>
 /*lei add*/
 /*rita add start*/
 #include "lynq_at_temp.h"
@@ -6466,6 +6467,44 @@
     return NULL;
 }
 
+static void wait_reset_mipc_response(void)
+{
+    int outfd = open("/data/tp",O_RDONLY);
+    if(outfd == -1){
+        RLOGD("open error");
+        return;
+    }
+    char rst[1024];
+    char response[2048];
+    int s;
+    s = read(outfd,rst,sizeof(rst));
+    if (s>0)
+    {
+        RLOGD("lei buf: %s \n", rst);
+        /*respone ok or error*/
+        if(rst[0] = '0')
+        {
+            sprintf(response,"%s%s","+LRSTMD:",rst);
+            /*check fd can or can't write*/
+            write(ttyGS3_fd,response,strlen(response));
+            write(ttyGS3_fd,"\nOK\n",4);
+        }
+        else
+        {
+            sprintf(response,"%s%s","+CME ERROR:",rst);
+            /*check fd can or can't write*/
+            write(ttyGS3_fd,response,strlen(response));
+        }
+    }
+    else
+    {
+        RLOGD("wait_reset_mipc_response unknow error\n");
+    }
+    usleep(1);
+    close(outfd);
+    return;
+}
+
 void startUsbLoop(void)
 {
     /*lei add*/
@@ -6564,6 +6603,11 @@
                 {
                     RLOGD("LYNQ send ATCMD:%s!!!",argv[1]);
                     lynqSendAt(argc,argv,1010);
+                    usleep(50*1000);
+                    if(!strcmp(buffer, "AT+LRSTMD"))
+                    {
+                        wait_reset_mipc_response();
+                    }
                     continue;
                 }
                 if(!((1<<atoi(argv[2])) & (atCmd->support)))
diff --git a/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h b/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
index 8f6d0af..f1cf502 100755
--- a/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
+++ b/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
@@ -137,11 +137,13 @@
 /*set*/

 int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode); 

 int lynq_set_remote_rtp_ip(const char* ip, const int ip_length);

+int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length);

 int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port);

 int lynq_set_rtp_param(const int clock_rate,const int channels,const int latency); //only for client

 /*get*/

 LYNQ_Audio_Mode lynq_get_voice_audio_mode();

 int lynq_get_remote_rtp_ip(char* ip, const int ip_length);

+int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length);

 int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port);

 int lynq_get_rtp_param(int* clock_rate,int* channels, int* latency);//only for client

 /*Audio Path setting end*/

diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index 98f01bd..0e46e6e 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -28,8 +28,10 @@
 #define LYQN_SEDN_BUF 1024*8+sizeof(int)*3

 #define INVALID_ID (-1)

 #define RTP_FROM_CMD "gst-launch-1.0 -v udpsrc port=%d caps=\'application/x-rtp, media=(string)audio, clock-rate=(int)%d, channels=(int)%d\' ! rtpjitterbuffer latency=%d ! rtppcmadepay ! alawdec ! audioresample ! audioconvert ! alsasink device=\'hw:0,2\'"

-#define RTP_TO_CMD   "gst-launch-1.0 -v alsasrc device=\'hw:0,6\' ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s auto-multicast=true port=%d"

+#define RTP_TO_CMD   "gst-launch-1.0 -v alsasrc device=\'hw:0,6\' ! audioconvert ! audioresample ! alawenc ! rtppcmapay ! udpsink host=%s %s auto-multicast=true port=%d"

+#define RTP_VLAN_INFO_FORMAT "multicast-iface=\"%s\""

 #define MAX_IP_LENGTH 128

+#define MAX_VLAN_INFO_LENGTH 128

 #define USER_LOG_TAG "LYNQ_CALL"

 

 using ::android::Parcel;

@@ -140,6 +142,7 @@
 {   

     char ip[MAX_IP_LENGTH];

     int port;   

+    char vlan_info[MAX_VLAN_INFO_LENGTH];

 }lynq_rtp_server_info;

 

 typedef struct

@@ -2079,6 +2082,7 @@
     }

     int* rtp_mode= (int*) arg;

     char cmd[384];

+	char vlan_para_string[sizeof(RTP_VLAN_INFO_FORMAT)+MAX_VLAN_INFO_LENGTH-2/*sizeof "%s"*/]={0};

     LYINFLOG("lynq_start_rtp_cmd: rtp_mode is %d",(*rtp_mode));    

     if ((*rtp_mode) == RTP_CLIENT)

     {

@@ -2090,8 +2094,12 @@
     }

     else if ((*rtp_mode) == RTP_SERVER)

     {

+        if(strlen(g_rtp_server_info.vlan_info)>0)

+        {

+           sprintf(vlan_para_string,RTP_VLAN_INFO_FORMAT,g_rtp_server_info.vlan_info);

+        }

         sprintf(cmd,RTP_TO_CMD,   \

-            g_rtp_server_info.ip,g_rtp_server_info.port);

+        g_rtp_server_info.ip,vlan_para_string,g_rtp_server_info.port); 

     //  LYINFLOG("start to rtp play: cmd is %s",cmd);

         system(cmd);    

     }

@@ -2200,6 +2208,28 @@
     

     return 0;

 }

+int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length)

+{

+    if (NULL == vlan_info)

+    {

+        LYERRLOG("vlan_info is NULL!!!");

+        return -1;

+    }

+    

+    if ((vlan_info_length < strlen(vlan_info)+1) || (vlan_info_length > MAX_VLAN_INFO_LENGTH))

+    {

+        LYERRLOG("incoming vlan_info error, vlan info length %d", vlan_info_length);

+        return -1;

+    }    

+

+    

+    bzero(g_rtp_server_info.vlan_info,MAX_VLAN_INFO_LENGTH);

+    strcpy(g_rtp_server_info.vlan_info,vlan_info);

+   

+    LYINFLOG("lynq_set_vlan_info suc: vlan is %s, length is %d", vlan_info,vlan_info_length);

+    

+    return 0;  

+}

 int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port)

 {  

     if (port < 0)

@@ -2263,6 +2293,25 @@
     strcpy(ip,g_rtp_server_info.ip);

     return 0;

 }

+int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length)

+{

+    if(vlan_info==NULL) 

+    {

+        LYERRLOG("vlan info is NULL");

+        return -1;

+    }

+

+    if(vlan_info_length < strlen(g_rtp_server_info.vlan_info)+1)

+    {

+        LYERRLOG("vlan info length %d is shorter than saved vlan info length %d",vlan_info_length,strlen(g_rtp_server_info.vlan_info)+1);

+        return -1;

+    }

+   

+    bzero(vlan_info,vlan_info_length);

+    strcpy(vlan_info,g_rtp_server_info.vlan_info);        

+   

+    return 0;  

+}

 int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port)

 {

     if(g_lynq_call_init_flag == 0)

diff --git a/src/lynq/lib/liblynq-sim/include/lynq_sim.h b/src/lynq/lib/liblynq-sim/include/lynq_sim.h
index 923d03b..1ebec79 100755
--- a/src/lynq/lib/liblynq-sim/include/lynq_sim.h
+++ b/src/lynq/lib/liblynq-sim/include/lynq_sim.h
@@ -72,6 +72,11 @@
  */
 int lynq_sim_power(int mode);
 
+/**
+ * @brief reset modem
+ * 
+ */
+int lynq_reset_modem(void);
 
 
 #ifdef __cplusplus
diff --git a/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp b/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
index 0d36320..65ea97f 100755
--- a/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/src/lynq/lib/liblynq-sim/src/lynq_sim.cpp
@@ -21,6 +21,8 @@
 #include <netinet/in.h>   
 #include <arpa/inet.h>
 #include <errno.h> /*add for get recvfrom errorid on 20220921*/
+#include <sys/stat.h>
+#include <fcntl.h>
 #define MAX_BUF 20
 #define MAX_NUM 80
 #define RIL_REQUEST_GET_SIM_STATUS 1
@@ -161,7 +163,8 @@
     send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -169,6 +172,7 @@
     if(recv_num < 0 || recv_num == 0)
     {
         RLOGD("recvfrom step2 fail:");
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return recv_num;
     }
     pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
@@ -210,7 +214,8 @@
     send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -263,7 +268,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -314,7 +320,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
 
@@ -361,7 +368,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return ret;
     }
      //get data msg
@@ -413,7 +421,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -458,7 +467,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);  
         return send_num;
     }
     //get data msg
@@ -513,7 +523,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
    //get data msg
@@ -562,7 +573,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -607,7 +619,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -714,7 +727,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return ret;
     }
      //get data msg
@@ -789,7 +803,8 @@
     send_num = sendto(sock_fd, &client_t1, sizeof(client_t1), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     //get data msg
@@ -849,7 +864,7 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)  
     {  
-        RLOGD("sendto error:");  
+        RLOGD("function %s sendto error:", __FUNCTION__);  
         return send_num;
     }
     pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
@@ -885,6 +900,7 @@
     if(send_num < 0)
     {
         RLOGD("sendto error:\n");
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     for(int i=0;i<2;i++)
@@ -1019,7 +1035,8 @@
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
     if(send_num < 0)
     {
-        RLOGD("sendto error:");
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
         return send_num;
     }
     recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
@@ -1052,6 +1069,48 @@
     return error1;
 }
 
+static void wait_reset_mipc_response(int *response)
+{
+    int outfd = open("/data/tp",O_RDONLY);
+    if(outfd == -1){
+        RLOGD("open error");
+        return;
+    }
+    char rst[1024];
+    int s;
+    s = read(outfd,rst,sizeof(rst));
+    sscanf(rst,"%d",response);
+    usleep(1);
+    close(outfd);
+    return;
+}
+
+int lynq_reset_modem(void)
+{
+    if(g_lynq_sim_init_flag == 0)
+    {
+        return -1;
+    }
+    int ret = -1;
+    int send_num = 0;
+    client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
+    client_t.paramLen = 1;
+    client_t.uToken = Global_uToken;
+    sprintf(client_t.param, "%s\n", "AT+LRSTMD");
+    pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
+    send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
+    if(send_num < 0)  
+    {  
+        RLOGD("function %s sendto error:", __FUNCTION__);
+        pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+        return ret;
+    }
+    wait_reset_mipc_response(&ret);
+    pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+    RLOGD("function %d ret %d",__FUNCTION__, ret);
+    return ret;
+}
+
 /**
  * @brief                   handle shutdown buf
  * @param  options          type: [IN]My Param doc
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 03fc67a..cc14e8a 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -2410,8 +2410,12 @@
     char lynq_cmd_ret[MAX_RET]={0};
 
 //    CHECK_IDX(idx, CTRL_AP);
-
-    if((fp=popen("wl rssi","r"))==NULL)
+/*******change other cmd to get rssi*******
+ *
+ *wl rssi ---> wl -i wlan0 rssi
+ *
+ ***** change by qs.xiong 20221011*******/
+    if((fp=popen("wl -i wlan0 rssi","r"))==NULL)
         {
             perror("popen error!");
             return -1;
@@ -2422,6 +2426,11 @@
         return -1;
     }
     *rssi = atoi(lynq_cmd_ret) * -1;
+/****** if got rssi is 0,means sta didn't connected any device****/
+    if(*rssi == 0)
+    {
+        printf("sta didn't connected any ap device,please check connection\n");
+    }
 
     return 0;
 }
diff --git a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sys_api.c b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sys_api.c
old mode 100644
new mode 100755
index 6daedfd..219031d
--- a/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sys_api.c
+++ b/src/telephonyware/3.0/hardware/ril/platformlib/libmipc/lib/src/api/mipc_sys_api.c
@@ -22,6 +22,15 @@
 #include "mtk_log.h"
 #define LOG_TAG "MIPC_SYS_API"
 
+/*lei add for reset modem 2022/9/28*/
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+/*lei add for reset modem 2022/9/28*/
+
 mipc_api_result_enum mipc_sys_init(const char *client_name_ptr)
 {
     if (mipc_init(client_name_ptr) == 0) {
@@ -84,8 +93,49 @@
     cb((mipc_sim_ps_id_enum)msg_ptr->hdr.msg_sim_ps_id, &result_ptr, cb_priv_ptr);
 }
 
+/*lei add for reset modem 2022/9/29*/
+static void response_to_ril_service(int res)
+{
+    int rt_value=access("/data/tp",F_OK);
+    if(rt_value==0)
+    {
+        mtkLogD(LOG_TAG,"File:%s   exist   rt_value=%d\n","/data/tp",rt_value);
+    }
+    else
+    {
+        mtkLogD(LOG_TAG,"File:%s not exist  rt_value=%d \n","/data/tp",rt_value);
+        int ret = mkfifo("/data/tp",0644);
+        mtkLogD(LOG_TAG,"result ret = %d \n", ret);
+    }
+    int outfd = open("/data/tp", O_WRONLY);
+    
+    if(outfd == -1){
+        mtkLogD(LOG_TAG,"open");
+        return 2;
+    }
+    char buf[1024] = {0};
+    sprintf(buf,"%d",res);
+    write(outfd,buf,sizeof(buf));
+    usleep(1);
+    close(outfd);
+}
+
+/*lei add for reset modem 2022/9/29*/
+
 static mipc_api_result_enum mipc_sys_at_req(MIPC_SYS_AT_CB cb, void *cb_priv_ptr, mipc_sim_ps_id_enum sim_ps_id, mipc_sys_at_struct *result_ptr, const char *atcmd_ptr)
 {
+    /*lei add for reset modem 2022/9/28*/
+    if(!strcmp(atcmd_ptr,"AT+LRSTMD"))
+    {
+
+        int res = mipc_reset();
+        /*send response to Host/AP*/
+        mtkLogD(LOG_TAG, "mipc_reset res is %d\n", res);
+        response_to_ril_service(res);
+        return MIPC_API_RESULT_SUCCESS;
+    }
+    /*lei add for reset modem 2022/9/28*/
+
     mipc_msg_t *msg_req_ptr;
     mipc_msg_t *msg_cnf_ptr;
     mipc_api_result_enum ret;