[Feature][T108][system][task-view-1640]optimize sdk boot time

Only Configure: No
Affected branch: GSW_V1453
Affected module: sys
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no

Change-Id: Ifdb7019430a2ec751cfb931ef034a107019afe28
diff --git a/mbtk/libgsw_lib/gsw_pm_interface.c b/mbtk/libgsw_lib/gsw_pm_interface.c
index f16b5da..0d1aec4 100755
--- a/mbtk/libgsw_lib/gsw_pm_interface.c
+++ b/mbtk/libgsw_lib/gsw_pm_interface.c
@@ -13,6 +13,7 @@
 #include <sys/ioctl.h>

 #include <dlfcn.h>

 #include <stdint.h>

+#include <sys/time.h>

 #include "gsw_pm_interface.h"

 

 #ifndef LOG_ERR_LEVEL

@@ -105,6 +106,11 @@
     

 

 #define LOCK_MAX_SIZE 129

+#define SDK_READY_CMD "uci get persist.mbtk.sdk__state"

+#define CHECK_SYSTEM(cmd) do { \

+    int _ret = system(cmd); \

+    if (_ret == -1) perror("system error"); \

+} while(0)

 typedef void (*GSW_PM_WAKEUPCALLBACK)(int32_t wakeup_in);

 typedef void (*mbtk_lpm_handler_t)(int32_t wakeup_in);

 typedef void (*mbtk_log)(int level, const char *format,...);

@@ -128,6 +134,42 @@
 static void *dlHandle_sleep = NULL;

 char *lynqLib_sleep = "/lib/libmbtk_lib.so";

 

+//0 success,1 timeout,the timeout is 60s

+static int wait_sdk_ready()

+{

+    char buffer[8] = {0};

+    int sdk_value = -1;

+    int timeout = 0;

+    const char *s_kmsg = "echo \"check_sdk_ready ready\" > /dev/kmsg";

+    const char *f_kmsg = "echo \"check_sdk_ready timeout\" > /dev/kmsg";

+    while(timeout < 500)   // ~= 60s

+    {

+        timeout++;

+        FILE *fp = popen(SDK_READY_CMD, "r");

+        if(NULL == fp)

+        {

+            continue;

+        }

+        memset(buffer,0,sizeof(buffer));

+        if(fgets(buffer, sizeof(buffer), fp) == NULL)

+        {

+            pclose(fp);

+            perror("fgets failed:");

+            continue;

+        }

+        pclose(fp);

+        printf("gsw wait_sdk_ready:%s",buffer);

+        sdk_value = atoi(buffer);

+        if(sdk_value == 0)  //sdk ready

+        {

+           CHECK_SYSTEM(s_kmsg);

+           return 0;

+        }

+        usleep(1000*100);//100ms

+    }

+    CHECK_SYSTEM(f_kmsg);

+    return 1;

+}

 

 /**

 * @brief Enable autosleep

@@ -191,7 +233,9 @@
 */

 int32_t gsw_pm_sdk_init(GSW_PM_WAKEUPCALLBACK wakeup_callback)

 {

-    int ret;

+    int ret = 0;

+    ret = wait_sdk_ready();                 //Continue to execute even if timed out

+    printf("wait_sdk_ready ret:%d\n",ret);  //due to the LOG* can not use

     if (handle())

         return GSW_HAL_NORMAL_FAIL;

     mbtk_lpm_init=(int(*)(mbtk_lpm_handler_t))dlsym(dlHandle_sleep, "mbtk_lpm_init");

diff --git a/mbtk/rootfs/etc/init.d/gsw_start b/mbtk/rootfs/etc/init.d/gsw_start
index 3fe84d2..0fe39dd 100755
--- a/mbtk/rootfs/etc/init.d/gsw_start
+++ b/mbtk/rootfs/etc/init.d/gsw_start
@@ -1,10 +1,12 @@
 #!/bin/sh /etc/rc.common
 # Copyright (C) 2006-2011 OpenWrt.org
-START=20
+START=12
 start_service() {
         echo "gsw start--" > /dev/kmsg
         rmmod mfp #temp for gsw
 	echo 255 > /sys/class/leds/red/brightness #when start oemapp up GPIO08
+	ifconfig eth0 up
+	ifconfig eth0 mtu 1500
 	if [ -f /etc/gsw_oemapp_start.sh ]
         then
 		/etc/gsw_oemapp_start.sh &