#!/bin/sh

function fn_msc313_evn()
{
    mkdir -p /data/audio
    mkdir -p /data/cfg
    mkdir -p /data/misc
    mkdir -p /data/property

    cp -rf /ipc/data/audio/* /data/audio
    cp -rf /ipc/data/cfg/* /data/cfg
    cp -rf /ipc/data/misc/* /data/misc

    ### param
    ## TCP/IP configuration
    echo 163840 > /proc/sys/net/core/rmem_max
    echo 327680 > /proc/sys/net/core/wmem_max
    echo '1488 1984 2976' > /proc/sys/net/ipv4/tcp_mem
    echo '4096 87380 325120' > /proc/sys/net/ipv4/tcp_rmem
    echo '16384 327680 1048576' > /proc/sys/net/ipv4/tcp_wmem

    ulimit -c unlimited
    echo /ipc/app/core.%e.%t > /proc/sys/kernel/core_pattern
    echo 2 > /sys/class/mstar/mvhe/rct
    #echo 3 > /sys/class/mstar/mmfe/rct
    echo 1 > /sys/class/mstar/msys/dmem_realloc

    # stack size 6M
    ulimit -s 6144

    #disable overcommit
    echo 0 > /proc/sys/vm/overcommit_memory
    echo 50 > /proc/sys/vm/overcommit_ratio

    ### platform
    chip=`cat /sys/devices/soc0/machine | awk '{print $2}'`

    ### MSC313E
    setprop mi.vi.src 2
    setprop mi.sys.shrink_mem 1
    setprop mi.vi.img.sub 0
    setprop mi.venc.bufcnt 2
    setprop mi.venc.sub.bufcnt 2
    
    setprop mi.vi.bufcnt 3
    setprop mi.vi.sub.bufcnt 3
    setprop mi.vi.sub.width 640
    setprop mi.vi.sub.height 480
   
    # SW OSD
    #setprop mi.osd.stretch 1
    setprop mi.osd.gop.use 0
    setprop mstar.omx.gop.disable 1
    
    echo D > /sys/class/mstar/mhvsp1/fbmg
    echo 9 > /sys/class/mstar/mhvsp1/fbmg
    #echo 0 > /sys/class/mstar/mscldma1/db
    #echo D40 > /sys/class/mstar/mhvsp1/dbgmg
	
    if [ -f /opt/iqserver.sh ]; then
        /opt/iqserver.sh
    else
        # 固定编码内存不做它用
        # 根据 cat /sys/class/mstar/msys/dmem 这个info来配置
        #echo "Not fix memory"
        setprop mi.venc.bufratio 50
        setprop mi.venc.img.bufratio 40
        setprop mi.video.height.force.aligned32 1
			
        dmem -req 0x00016800 VSPL-I0P3B2
        dmem -req 0x00016800 VSPL-I0P3B1
        dmem -req 0x00016800 VSPL-I0P3B0
        dmem -req 0x00025800 VENC-49
        dmem -req 0x00025800 VENC-48
        dmem -req 0x00070800 VSPL-I0P1B2
        dmem -req 0x00070800 VSPL-I0P1B1
        dmem -req 0x00070800 VSPL-I0P1B0
        dmem -req 0x000FF000 VENC-33
        dmem -req 0x000FF000 VENC-32
        dmem -req 0x00357000 MS-02
        dmem -req 0x00357000 MS-01
        dmem -req 0x00357000 MS-00
        dmem -req 0x00070800 VSPL-I0P0B2
        dmem -req 0x00070800 VSPL-I0P0B1
        dmem -req 0x00070800 VSPL-I0P0B0
        dmem -req 0x000FF000 SCL_MCNR_M
        dmem -req 0x003FC000 SCL_MCNR_YC
        dmem -req 0x00000400 DLC_MEM
        dmem -req 0x000088E0 ISP_MLOAD
        dmem -req 0x00014000 pcmC0D0c
        dmem -req 0x00018000 pcmC0D0p
        dmem -req 0x00000100 BDMA_FSP_WBUFF
        dmem -req 0x0001B120 ISP_base
        dmem -req 0x00002000 EMAC_BUFF

        echo "VSPL-I0P3B2" > /sys/class/mstar/msys/fixed_dmem
        echo "VSPL-I0P3B1" > /sys/class/mstar/msys/fixed_dmem
        echo "VSPL-I0P3B0" > /sys/class/mstar/msys/fixed_dmem
        echo "VENC-49" > /sys/class/mstar/msys/fixed_dmem  
        echo "VENC-48" > /sys/class/mstar/msys/fixed_dmem   
        echo "VSPL-I0P1B2" > /sys/class/mstar/msys/fixed_dmem 
        echo "VSPL-I0P1B1" > /sys/class/mstar/msys/fixed_dmem
        echo "VSPL-I0P1B0" > /sys/class/mstar/msys/fixed_dmem
        echo "VENC-33" > /sys/class/mstar/msys/fixed_dmem
        echo "VENC-32" > /sys/class/mstar/msys/fixed_dmem 
        echo "MS-02" > /sys/class/mstar/msys/fixed_dmem     
        echo "MS-01" > /sys/class/mstar/msys/fixed_dmem     
        echo "MS-00" > /sys/class/mstar/msys/fixed_dmem     
        echo "VSPL-I0P0B2" > /sys/class/mstar/msys/fixed_dmem
        echo "VSPL-I0P0B1" > /sys/class/mstar/msys/fixed_dmem
        echo "VSPL-I0P0B0" > /sys/class/mstar/msys/fixed_dmem
        echo "SCL_MCNR_M" > /sys/class/mstar/msys/fixed_dmem
        echo "SCL_MCNR_YC" > /sys/class/mstar/msys/fixed_dmem
        echo "DLC_MEM" > /sys/class/mstar/msys/fixed_dmem    
        echo "ISP_MLOAD" > /sys/class/mstar/msys/fixed_dmem  
        echo "pcmC0D0c" > /sys/class/mstar/msys/fixed_dmem   
        echo "pcmC0D0p" > /sys/class/mstar/msys/fixed_dmem   
        echo "BDMA_FSP_WBUFF" > /sys/class/mstar/msys/fixed_dmem 
        echo "ISP_base" > /sys/class/mstar/msys/fixed_dmem       
        echo "EMAC_BUFF" > /sys/class/mstar/msys/fixed_dmem      

        echo 1 > /sys/class/mstar/msys/fixed_dmem
        echo 0 > /sys/class/mstar/msys/dmem_realloc
    fi
}

function fn_setip() 
{
    if grep -q 'root=/dev/nfs' /proc/cmdline; then
        echo "run on nfs, no flash mount!"
        return 0
    fi

    if [ -f /opt/conf/config.xml ]; then
        dev_ip=`xml_shuttle -cr -k /cfg/eth/ip /opt/conf/config.xml`
        dev_ip=`echo $dev_ip| awk -F' ' '{print $3}'`
        ifconfig eth0 $dev_ip
    fi
}

function fn_hwclock() 
{
    test -e /var/run/hwclock
    if [ 1 -eq $? ]; then
        busybox hwclock -s
        echo $? > /var/run/hwclock
    fi
}

function fn_reboot()
{
    logger -t autorun "exit jco_server"
    cp /tmp/messages /opt/log/messages.reboot
    sync
    echo "reboot as jco_server exit"
    reboot -f
}

function fn_load_drv()
{
    insmod /ipc/drv/gd25q.ko
}

function fn_main()
{
    # init mac
    # macmac=`ifconfig eth7 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1`
    # macmac=`echo $macmac | sed -e 's/^192/8/g' -e 's/\.//g'  | xargs printf "%012d"`
    # echo $macmac | sed 's/../&-/g' | sed 's/-$//g'
    # /sbin/ifconfig eth0 down
    # /sbin/ifconfig eth0 hw ether `/usr/bin/fw_printenv -n ethaddr`

    # init ip when no bootip
    bootip=`ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1`
    [ -z "${bootip}" ] && { ifconfig eth0 192.168.1.217; ifconfig lo up; } 

    echo "PATH: ${PATH}"
    echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}"

    # sync ubifs_bgt0_0 block with high-cpu-usage, 
    # reboot in client_fee_watchdog(), reboot here will block
    # speed of I/O write() is .33M/s, after ENCODE exit 21M/14 -> 1.5M/s
    # flush when dirty upto 1.2M or .6M, freeTotal is 60M
    echo   5 >/proc/sys/vm/dirty_ratio
    echo   3 >/proc/sys/vm/dirty_background_ratio       # 1.8M
    #cho 300 >/proc/sys/vm/dirty_writeback_centisecs    # 0.9M default 500
    #cho 500 >/proc/sys/vm/dirty_expire_centisecs       # 1.8M default 3000

    test -x /opt/etc/local.rc && /opt/etc/local.rc
    if ! ps | grep '[t]elnetd'; then
        telnetd -p9527
        (sleep 300; ps|awk '/[p]9527/ {print $1}' | xargs kill -9) &
    fi

    fn_load_drv

    #/sbin/udevadm trigger
    fn_setip
    fn_hwclock
    
    while :; do
        echo "
        +------------------------------------------------+
             Hello Server World @`date +%F.%T`!!
        +------------------------------------------------+
        "
        
        logger -t autorun "start jco_server @${count:-0}" 
        rm -rf /opt/upgrade/*
        /ipc/app/jco_server 
	    let count++
	    sleep 2
        [ "${count:-0}" -ge 5 ] && reboot -f && fn_reboot
    done
}

fn_msc313_evn
fn_main $@