#!/bin/sh
# Useage: ./load [ -r|-i|-a ][type]
#         -r : rmmod all modules
#         -i : insmod all modules
#    default : rmmod all moules and then insmod them
#

report_error()
{
    echo "******* Error!! Shell exit for error *****"
    exit 1
}

insert_audio()
{
    insmod extdrv/tlv_320aic31.ko > /dev/null
    insmod acodec.ko
    insmod hi3535_aio.ko
    insmod hi3535_ai.ko
    insmod hi3535_ao.ko
    insmod hi3535_aenc.ko
    insmod hi3535_adec.ko
}

remove_audio()
{
    rmmod hi3535_adec
    rmmod hi3535_aenc
    rmmod hi3535_ao
    rmmod hi3535_ai
    rmmod hi3535_aio
    rmmod acodec
    rmmod tlv_320aic31
}

insert_netdrv()
{
		echo 16384 > /proc/sys/vm/min_free_kbytes
		echo 200 > /proc/sys/vm/vfs_cache_pressure
	
		echo 0 > /proc/sys/net/ipv4/tcp_sack
		echo 1 > /proc/sys/net/ipv4/tcp_low_latency
		echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
	
		
		IS_NVR_USE_POE=`grep -i '(nvp' /proc/cmdline`
		IS_NVR_USE_POE_TYPE2=`grep -i '(nep' /proc/cmdline`
		if [ "$IS_NVR_USE_POE" == "" ];then
			if [ "$IS_NVR_USE_POE_TYPE2" == "" ];then
				insmod extdrv/stmmac.ko hitoe=1 tnk_threshold=0 macsorts=1 tvtflag=1 phy0type=0 phy1type=0 phyid0=2 phyid1=17
			else
				insmod extdrv/stmmac.ko hitoe=1 tnk_threshold=0 macsorts=1 tvtflag=1 tvtpoe=1 phy0type=0 phy1type=0 phyid0=1 phyid1=17
				insmod extdrv/net-pnp.ko
				insmod extdrv/rtl8309.ko
				insmod extdrv/ip1826d.ko
				#3535 poe 10M Ӱ poe
				himm 0x12028150 0x78
			fi
		else 
			insmod extdrv/stmmac.ko hitoe=1 tnk_threshold=0 macsorts=1 tvtflag=1 tvtpoe=0 phy0type=1 phy1type=0 phyid0=0 phyid1=17
			insmod extdrv/net-pnp.ko
			insmod extdrv/rtl8309.ko
			insmod extdrv/ip1826d.ko
			#3535 poe 10M Ӱ poe
			himm 0x12028150 0x78
		fi

}

insert_ko()
{
    sh ./clkcfg_hi3535.sh > /dev/null
    sh ./sysctl_hi3535.sh > /dev/null
    sh ./pinctrl_hi3535_aic31.sh > /dev/null

		BSYS_MEM_192M=`grep -i 'mem=192M' /proc/cmdline`
		BSYS_MEM_128M=`grep -i 'mem=128M' /proc/cmdline`
		BOOT_224M_CMD=`grep -i 'mem=224M' /proc/cmdline`
		BOOT_240M_CMD=`grep -i 'mem=240M' /proc/cmdline`
		BOOT_280M_CMD=`grep -i 'mem=280M' /proc/cmdline`
		BOOT_304M_CMD=`grep -i 'mem=304M' /proc/cmdline`
		BOOT_432M_CMD=`grep -i 'mem=432M' /proc/cmdline`
		BOOT_496M_CMD=`grep -i 'mem=496M' /proc/cmdline`
			
		if [ "$BOOT_224M_CMD" != "" ]; then
			echo "current system used mem=224M"
    	insmod mmz.ko mmz=anonymous,0,0x8E000000,786M:jpeg,0,0xbfa00000,5M anony=1 || report_error
    else
    	if [ "$BOOT_240M_CMD" != "" ]; then
				echo "current system used mem=240M"
    		insmod mmz.ko mmz=anonymous,0,0x8f000000,770M:jpeg,0,0xbfa00000,5M anony=1 || report_error
			else
    	if [ "$BOOT_280M_CMD" != "" ]; then
				echo "current system used mem=280M"
    		insmod mmz.ko mmz=anonymous,0,0x91800000,222M:jpeg,0,0x9fe00000,1M anony=1 || report_error
			else
				if [ "$BOOT_304M_CMD" != "" ]; then
					echo "current system used mem=304M"
					insmod mmz.ko mmz=anonymous,0,0x93000000,706M:jpeg,0,0xbfa00000,5M anony=1 || report_error
				else
					if [ "$BOOT_432M_CMD" != "" ]; then
						echo "current system used mem=432M"
						insmod mmz.ko mmz=anonymous,0,0x9b000000,578M:jpeg,0,0xbfa00000,5M anony=1 || report_error
					else	
						if [ "$BSYS_MEM_192M" != "" ]; then
							insmod mmz.ko mmz=anonymous,0,0x8C000000,306M:jpeg,0,0x9fa00000,5M anony=1 || report_error
						else
							if [ "$BSYS_MEM_128M" != "" ]; then
				    		insmod mmz.ko mmz=anonymous,0,0x88000000,370M:jpeg,0,0x9fa00000,5M anony=1 || report_error
							else
								if [ "$BOOT_496M_CMD" != "" ]; then
									echo "current system used mem=496M"
									insmod mmz.ko mmz=anonymous,0,0x9f000000,514M:jpeg,0,0xbfa00000,5M anony=1 || report_error
								else
				    			insmod mmz.ko mmz=anonymous,0,0x88000000,370M:jpeg,0,0x9fa00000,5M anony=1 || report_error
				    		fi
				    	fi
						fi
					fi
				fi
			fi			
		fi
	fi
		
    insmod hi3535_base.ko
    insmod hi3535_sys.ko
    insmod hi3535_tde.ko
    insmod hi3535_vgs.ko
    insmod hi3535_venc.ko
    insmod hi3535_chnl.ko
    insmod hi3535_h264e.ko
    insmod hi3535_rc.ko
    insmod hi3535_jpege.ko
    insmod hi3535_vou.ko
    insmod hi3535_vpss.ko
    insmod hi3535_ive.ko
    insmod hi3535_vda.ko
    insmod hi3535_region.ko
    # hifb: G0:1080P-ARGB1555,G1:1080P-ARGB1555,G2:D1-ARGB1555,G3(HC):128x128-ARGB1555.
    insmod hifb.ko video="hifb:vram0_size:8100,vram1_size:8100,vram2_size:1620,vram3_size:32" softcursor="off"
    insmod hi3535_vdec.ko VBSource=0
    insmod hiuser.ko
    insmod hi3535_vfmw.ko
    insmod hi3535_hdmi.ko
    insmod hi3535_jpegd.ko
    
    insmod extdrv/ehci-hcd.ko
    insmod extdrv/ohci-hcd.ko
    insmod extdrv/usb-storage.ko
    insmod extdrv/usbserial.ko
    insmod extdrv/usb_wwan.ko
    insmod extdrv/option.ko
    insmod extdrv/pl2303.ko
    
    sleep 2
    
    insmod extdrv/gpioi2c.ko
    insmod extdrv/nvp1918.ko
    insmod extdrv/wdt.ko
    insmod extdrv/fgpio.ko
    insmod extdrv/hi_ir.ko
    insmod extdrv/hi_rtc.ko
    insmod extdrv/crypto_memory.ko
    
    #insmod extdrv/sil9024.ko norm=5;  #720P60
    #insmod extdrv/sil9024.ko norm=6;   #720P50
    #insmod extdrv/sil9024.ko norm=7;  #1080I60
    #insmod extdrv/sil9024.ko norm=8;  #1080I50
    #insmod extdrv/sil9024.ko norm=9;  #1080P60
    #insmod extdrv/sil9024.ko norm=10;  #1080P50
    #insmod extdrv/sil9024.ko norm=11;  #1080P25
    #insmod extdrv/sil9024.ko norm=12;  #1080P30
    
    insert_audio
}

remove_ko()
{
    remove_audio
    rmmod sil9024
    rmmod gpioi2c
    rmmod hifb
    rmmod hi3535_region
    rmmod hi3535_ive
    rmmod hi3535_vda
    rmmod hi3535_vpss
    rmmod hi3535_vou
    rmmod hi3535_jpegd
    rmmod hi3535_hdmi.ko
    rmmod hi3535_vfmw.ko
    rmmod hiuser.ko
    rmmod hi3535_vdec.ko   
    rmmod hi3535_jpege
    rmmod hi3535_rc
    rmmod hi3535_h264e
    rmmod hi3535_chnl
    rmmod hi3535_venc
    rmmod hi3535_vgs
    rmmod hi3535_tde
    rmmod hi3535_sys
    rmmod hi3535_base
    rmmod mmz
}

# load module.
if [ "$1" = "-i" ]
then
    insert_ko
    insert_netdrv
fi

if [ "$1" = "-r" ]
then
    remove_ko
fi

if [ $# -eq 0 ] || [ "$1" = "-a" ]
then
    remove_ko
    insert_ko
    insert_netdrv
fi
