#!/bin/bash

KERNEL_VERSION=`uname -r`
MODULE_DIR=`uname -r | awk -F '-' '{print $1}'`
CHECK_KYLIN=`grep -q "kylin" /etc/os-release && echo "true"`
CHECK_ARCH=`arch`
GENBU_SERVICE="/lib/systemd/system/genbu.service"
# Save the target kernel version to a file, which will be used for prerm script.
uname -r > /usr/local/sietium/KERNEL_VERSION

function install_gb_config() {
if [ "uos25" == "kylinv4" ]; then
    cp /usr/local/genbu/rules/91-pulseaudio-custom.rules /lib/udev/rules.d/ -rf
else
    cp /usr/local/genbu/rules/91-pulseaudio-custom.rules /usr/lib/udev/rules.d/ -rf
fi
}

## clean gb01 driver
#rm -f /lib/modules/$KERNEL_VERSION/updates/gb.ko
#rm -f /lib/modules/$KERNEL_VERSION/kernel/kylin/gpu/sietium/genbu01/gb.ko
## clean modules.order configure of gb01
#sed -i '/updates\/gb.ko/d' /lib/modules/$KERNEL_VERSION/modules.dep
#sed -i '/updates\/gb.ko/d' /lib/modules/$KERNEL_VERSION/modules.order
#sed -i '/genbu01\/gb.ko/d' /lib/modules/$KERNEL_VERSION/modules.dep
#sed -i '/genbu01\/gb.ko/d' /lib/modules/$KERNEL_VERSION/modules.order

CHECK_INITRD=`lsinitramfs /boot/initrd.img-$KERNEL_VERSION |grep -qi genbu02 && echo "true"`
if test -n "$CHECK_INITRD"
then
        echo "Clear sietium drv from initrd.img"
        # clean gb02 driver
        rm -rf /lib/modules/`uname -r`/kernel/kylin/gpu/sietium/genbu02
        rm -rf /lib/modules/`uname -r`/kernel/gpu/sietium/genbu02
        rm -rf /lib/modules/$KERNEL_VERSION/kernel/drivers/gpu/drm/sietium/genbu02
        sudo update-initramfs -u -k $KERNEL_VERSION
fi

mkdir -p /lib/modules/$KERNEL_VERSION/kernel/drivers/gpu/drm/sietium/genbu02
cp /usr/local/sietium/$MODULE_DIR/gb02.ko     /lib/modules/$KERNEL_VERSION/kernel/drivers/gpu/drm/sietium/genbu02/gb02.ko

#cp /usr/local/sysconf/genbu.conf /etc/modules-load.d/genbu.conf
#cp /usr/local/sysconf/blacklist-genbu.conf /etc/modprobe.d/

depmod -a

function update_sietium_pciids() {
    # export Sietium's pci.ids in system file(If exist)
    sed -n "/Sietium/,$ {
    /Sietium/ {
        :loop
        p
        n
        /\t+*/ {
            b loop
        }
    }
    }" $1 > pci.sietium.ids.old

	# export Sietium's pci.ids in local file(If exist)
	sed -n "/Sietium/,$ {
    /Sietium/ {
        :loop
        p
        n
        /\t+*/ {
            b loop
        }
    }
    }" /usr/local/sysconf/pci.ids > pci.sietium.ids.new

    # compare file exclude white space
    if diff -B pci.sietium.ids.new pci.sietium.ids.old&>/dev/null; then
        # echo "sietium pci.ids no update required. >> ESC"
		rm pci.sietium.ids.old
		rm pci.sietium.ids.new
    else
        echo "sietium pci.ids update required. >> UPDATE"
        # remove exist Sietium's pci.ids in system pci.ids file
        sed "/8510  Sietium/,$ {
            /8510  Sietium/d
            :loop
            /\t+*/ {
                d
                b loop
            }
            :loop {
                n
                b loop
            }
        }
        " $1 > pci.ids.system

        # append new line at end of pci.ids.system file
        if [ $(tail -n1 pci.ids.system | wc -l) -eq 0 ];then
            echo "" >> pci.ids.system
        fi

        # append new Sietium's pci.ids to pci.ids file
        cat pci.sietium.ids.new >> pci.ids.system
        # replace pci.ids file
        mv pci.ids.system $1
		rm pci.sietium.ids.old
		rm pci.sietium.ids.new
    fi
}

update_sietium_pciids /usr/share/misc/pci.ids

# grep -q Sietium /usr/share/misc/pci.ids || #   cat /usr/local/sysconf/pci.ids >> /usr/share/misc/pci.ids

# add audio start
install_gb_config
udevadm control --reload-rules
# add audio end
if test -n "$CHECK_KYLIN"; then
    . /etc/default/grub
    GRUB_DEFAULT=`echo $GRUB_CMDLINE_LINUX_DEFAULT | sed 's/video=efifb:on//g'`
    sed -i "/GRUB_CMDLINE_LINUX_DEFAULT/s/=.*/=\"${GRUB_DEFAULT} video=efifb:on\"/" /etc/default/grub
    if test "$CHECK_ARCH" == "aarch64"; then
        update-grub-ftefi
    fi
    if [ -e $GENBU_SERVICE ];then
        systemctl enable -q $GENBU_SERVICE
    fi
    grep -qE '^gb02$|^gb02\s|^gb02\t' /etc/initramfs-tools/modules ||         echo "gb02" >> /etc/initramfs-tools/modules
    echo "KYLIN install update-initramfs......"
    update-initramfs -u -k $KERNEL_VERSION >/dev/null 2>&1
else
    CHECK_UOS="uos"
    UOS_VER="/etc/os-release"
    if [ -e $UOS_VER ];then
        result=$(cat $UOS_VER|grep $CHECK_UOS)
        if test -n "$result"; then
            cp /usr/local/sysconf/genbu.conf /etc/modules-load.d/genbu.conf
            grep -qE '^gb02$|^gb02\s|^gb02\t' /etc/initramfs-tools/modules ||                 echo "gb02" >> /etc/initramfs-tools/modules
            echo "update-initramfs......"
            update-initramfs -u -k $KERNEL_VERSION >/dev/null 2>&1
        fi
    fi
fi

#update mcu firmware
chmod 700 /usr/local/sietium/mcu_upgrade.sh
/usr/local/sietium/mcu_upgrade.sh

# make sure every change write back to disk
sync
