if serial --port=0x3F8 --speed=115200;then
        set has_serial=true
        terminal_input --append serial
        terminal_output --append serial
else
        clear
fi

terminal_input --append console
terminal_output --append console

if [ x"${grub_platform}" = xefi ]; then
        insmod efi_gop
        insmod efi_uga
else
        insmod vbe
fi

set extra_initrd="extra.lzma"
set info="info.txt"

set vid=0x05E3
set pid=0x0751
set sn=A8ODN02468
set mac1=E839351420A6
set mac2=E839351420A7
set rootdev=/dev/md0
set netif_num=1
set extra_args_3617=''

set common_args_3617='syno_hdd_powerup_seq=0 HddHotplug=0 syno_hw_version=DS3617xs vender_format_version=2 console=ttyS0,115200n8 withefi elevator=elevator quiet syno_port_thaw=1'

set sata_args='sata_uid=1 sata_pcislot=5 synoboot_satadom=1 DiskIdxMap=0C SataPortMap=1 SasIdxMap=0'

set default='0'
set timeout='3'
set fallback='1'

if [ -s $prefix/grubenv ]; then
        load_env
        if [ -n "$saved_entry" ]; then
                set default="${saved_entry}"
        fi
fi

VERSION="with Jun's Mod v1.02b"

search --file -s /zImage

function savedefault {
        if [ -s $prefix/grubenv  ]; then
                saved_entry="${chosen}"
                save_env saved_entry
        fi
}

function do_option {
        if [ $# -lt 2 ]; then
                eval "set value=\"\$$1\""
                echo "current $1: $value"; return;
        fi
        set key=$1
        shift
        set $key="$*"
        if [ -s $prefix/grubenv  ]; then
                save_env $key
        fi
}

function vid { do_option vid $@; }
function pid { do_option pid $@; }
function sn { do_option sn $@; }
function mac1 { do_option mac1 $@; }
function mac2 { do_option mac2 $@; }
function mac3 { do_option mac3 $@; }
function mac4 { do_option mac4 $@; }
function rootdev { do_option rootdev $@; }
function append { do_option extra_args_3617 $@; }

function vidpid {
        if [ $# -lt 2 ]; then
                echo "usage: vidpid 0xVVVV 0xPPPP"; return;
        fi
        set usb_args="vid=$1 pid=$2"
        if [ -s $prefix/grubenv  ]; then
                save_env usb_args
        fi
}

function showtips {
        if [ -n "$has_serial" ]; then
                terminal_output --remove serial
        fi
        echo "Screen will stop updating shortly, please open http://find.synology.com to continue."
        echo
        echo
        if [ -n "$has_serial" ]; then
                terminal_output --append serial
        fi
}

function loadinitrd {
        if [ -s $img/$info ]; then
                if [ -n "$has_serial" ]; then
                        terminal_output --remove serial
                fi
                cat $img/$info
                if [ -n "$has_serial" ]; then
                        terminal_output --append serial
                fi
        fi
        if [ -s $img/$extra_initrd ]; then
                initrd $img/rd.gz $img/$extra_initrd
        else
                initrd $img/rd.gz
        fi
}

function common_add_option {
        eval "set value=\"\$$1\""
        if [ -z $value ]; then return 1; fi
        set common_args="$common_args $1=$value"
}

function common_add_option_ex {
        eval "set value=\"\$$1\""
        if [ -z $value ]; then return 1; fi
        set common_args="$common_args $2=$value"
}

function loadlinux {
        set model=$1
        set bootdev=$2
        shift 2
        if [ -n $vid -a -n $pid ]; then
                set usb_args="vid=$vid pid=$pid"
        fi
        eval "set common_args=\"\$common_args_$model\""
        eval "set extra_args=\"\$extra_args_$model\""
        eval "set bootdev_args=\"\$${bootdev}_args\""
        common_add_option_ex rootdev root
        common_add_option sn
        if common_add_option mac1; then set netif_num=1; fi
        if common_add_option mac2; then set netif_num=2; fi
        if common_add_option mac3; then set netif_num=3; fi
        if common_add_option mac4; then set netif_num=4; fi
        common_add_option netif_num
	if [ -z $zImage ]; then
		set zImage=zImage
	fi
        linux $img/$zImage $common_args $bootdev_args $extra_args $@
}

menuentry "DS3617xs 6.1 Baremetal $VERSION" --class os {
        set img=
        savedefault
        loadlinux 3617 usb
        loadinitrd
        showtips
}

menuentry "DS3617xs 6.1 Baremetal $VERSION Reinstall" --class os {
        set img=
        loadlinux 3617 usb mfg
        loadinitrd
        showtips
}

#menuentry "DS3617xs 6.1 Baremetal AMD $VERSION" --class os {
#        set img=
#        set zImage=bzImage
#        savedefault
#        loadlinux 3617 usb
#        loadinitrd
#        showtips
#}

menuentry "DS3617xs 6.1 VMWare/ESXI $VERSION" --class os {
        set img=
        savedefault
        loadlinux 3617 sata
        loadinitrd
        showtips
}
