#!/bin/busybox sh

echo "=== Initial: MOUNT Start ===" > /dev/kmsg

BLK_PATH=/dev/disk/by-partlabel
NVDATA_PATH=/mnt/vendor/nvdata
PROTECT1_PATH=/mnt/vendor/protect_f
PROTECT2_PATH=/mnt/vendor/protect_s

#you.chen@2023-06-08 add for load oemapp begin
ROOT_MTD=`cat /proc/cmdline | tr " " "\n" | grep -v "," | grep -e "^ubi.mtd=" | awk -F "=" '{print $2}'`
if [ ! "$ROOT_MTD" == "" ]; then
	AVB_SLOT_FLAG=`grep "mtd$ROOT_MTD" /proc/mtd | sed 's/.*\("system_.*"\)/\1/g' | awk -F '"' '{print $2}' | awk -F "system_" '{print $2}'`
fi
#you.chen@2023-06-08 add for load oemapp end

mnt_folder(){
	BLK_NAME=$1
	MNT_FOLDER=$2

	echo "=== Initial: new, need format ===" > /dev/kmsg
	if [ -f "/dev/disk/by-partlabel/$BLK_NAME" ]; then
		mntdone=`mount -t ubifs $BLK_PATH/$BLK_NAME $MNT_FOLDER 2>&1`
		echo "mount: mount by partlabel"
	elif [ $BLK_NAME == "nvdata" ]; then
		mntdone=`mount -t ubifs /dev/ubi2_0 $MNT_FOLDER 2>&1`
		echo "mount: mount nvdata"
	elif [ $BLK_NAME == "protect_a" ]; then
		mntdone=`mount -t ubifs /dev/ubi3_0 $MNT_FOLDER 2>&1`
		echo "mount: mount protect_a"
	elif [ $BLK_NAME == "protect_b" ]; then
		mntdone=`mount -t ubifs /dev/ubi4_0 $MNT_FOLDER 2>&1`
		echo "mount: mount protect_b"
	elif [ $BLK_NAME == "log" ]; then
		mntdone=`mount -t ubifs /dev/ubi6_0 $MNT_FOLDER 2>&1`
		echo "mount: mount log"
	#you.chen@2023-06-08 add for load oemapp begin
	elif [ $BLK_NAME == "db" ]; then
		ubi_num=`ubiattach /dev/ubi_ctrl -m 48 -d 10 -b 1`
		mntdone=`mount -t ubifs /dev/ubi10_0 $MNT_FOLDER 2>&1`
		echo "mount: mount db"
	elif [ $BLK_NAME == "oemdata" ]; then
		ubi_num=`ubiattach /dev/ubi_ctrl -m 50 -d 11 -b 1`
		mntdone=`mount -t ubifs /dev/ubi11_0 $MNT_FOLDER 2>&1`
		echo "mount: mount oemdata"
	elif [ $BLK_NAME == "oemapp_a" ]; then
		mntdone=`mount -t squashfs /dev/mtdblock28 $MNT_FOLDER 2>&1`
		echo "mount: mount oemapp"
	elif [ $BLK_NAME == "oemapp_b" ]; then
		mntdone=`mount -t squashfs /dev/mtdblock49 $MNT_FOLDER 2>&1`
		echo "mount: mount oemapp"
	#you.chen@2023-06-08 add for load oemapp end
	fi

	if [ ! "$mntdone" == "" ]; then
		if  [ $BLK_NAME == "nvdata" ]; then
			ubidetach -m 5
			ubiformat /dev/mtd5
			ubiattach /dev/ubi_ctrl -m 5 -b 1
			ubimkvol /dev/ubi2 -m -N nvdata
			mount -t ubifs /dev/ubi2_0 $MNT_FOLDER
			echo "mount: format mount nvdata"
		elif [ $BLK_NAME == "protect_a" ]; then
			ubidetach -m 9
			ubiformat /dev/mtd9
			ubiattach /dev/ubi_ctrl -m 9 -b 1
			ubimkvol /dev/ubi3 -m -N protect_a
			mount -t ubifs /dev/ubi3_0 $MNT_FOLDER
			echo "mount: format mount protect_a"
		elif [ $BLK_NAME == "protect_b" ]; then
			ubidetach -m 10
			ubiformat /dev/mtd10
			ubiattach /dev/ubi_ctrl -m 10 -b 1
			ubimkvol /dev/ubi4 -m -N protect_b
			mount -t ubifs /dev/ubi4_0 $MNT_FOLDER
			echo "mount: format mount protect_b"
		elif [ $BLK_NAME == "log" ]; then
			ubidetach -m 40
			ubiformat /dev/mtd40
			ubiattach /dev/ubi_ctrl -m 40 -b 1
			ubimkvol /dev/ubi6 -m -N log
			mount -t ubifs /dev/ubi6_0 $MNT_FOLDER
			echo "mount: format mount log"
		#you.chen@2023-06-08 add for load oemapp begin
		elif [ $BLK_NAME == "db" ]; then
			ubidetach -m 48
			echo -e "y\n" | ubiformat /dev/mtd48
			ubiattach /dev/ubi_ctrl -m 48 -d 10 -b 1
			ubimkvol /dev/ubi10 -m -N db
			mount -t ubifs /dev/ubi10_0 $MNT_FOLDER 2>&1
			echo "mount: format mount db"
		elif [ $BLK_NAME == "oemdata" ]; then
			ubidetach -m 50
			echo -e "y\n" | ubiformat /dev/mtd50
			ubiattach /dev/ubi_ctrl -m 50 -d 11 -b 1
			ubimkvol /dev/ubi11 -m -N oemdata
			mount -t ubifs /dev/ubi11_0 $MNT_FOLDER 2>&1
			echo "mount: format mount oemdata"
		#you.chen@2032-06-08 add for load oemapp end
		fi
	fi
}

mnt_bind_folder(){
	DST_FOLDER=$1
	SRC_FOLDER=$2
	#echo "=== Initial: mount bind $DST_FOLDER to $SRC_FOLDER ===" > /dev/kmsg
	mntdone=`mount -o bind $DST_FOLDER $SRC_FOLDER 2>&1`
	if [ ! "$mntdone" == "" ]; then
		#echo "=== Initial: new, need create state folder and copy ===" > /dev/kmsg
		mkdir -p $DST_FOLDER

		if test "$(ls -A "$SRC_FOLDER")"; then
			cp -a $SRC_FOLDER/* $DST_FOLDER
		else
			echo The directory $SRC_FOLDER is empty '(or non-existent)'
		fi

		mount -o bind $DST_FOLDER $SRC_FOLDER
	fi
}

mnt_bind_file(){
	DST_FILE=$1
	SRC_FILE=$2

	#echo "=== Initial: mount bind $DST_FILE to $SRC_FILE ===" > /dev/kmsg
	mntdone=`mount -o bind $DST_FILE $SRC_FILE 2>&1`
	if [ ! "$mntdone" == "" ]; then
		#echo "=== Initial: new, need copy ===" > /dev/kmsg
		cp -a $SRC_FILE $DST_FILE
		sync
		mount -o bind $DST_FOLDER $SRC_FOLDER
	fi
}

init_log() {
	#you.chen@2023-09-27 add for console log level
	cat /proc/cmdline | grep " loglevel=7 " > /dev/null 
	if [ $? -ne 0 ]; then
		echo 0 > /proc/sys/kernel/printk
		setconsole /dev/tty30
	fi

	mnt_folder log /log
	if [ -e /dev/mmcblk1p1 ]; then
		if [ ! -e /run/media/mmcblk1p1 ]; then
			mkdir -p /run/media/mmcblk1p1
		fi
		mount -t exfat /dev/mmcblk1p1 /run/media/mmcblk1p1
		rm -rf /var/log
		ln -sf /run/media/mmcblk1p1 /var/log
	else
		allink=`ls -al /var | grep 'log ->' 2>&1`
		if [ ! "$allink" == "" ]; then
			#echo "=== /var/log is already link, unlink it ===" > /dev/kmsg
			unlink /var/log
			mkdir /var/log
		fi
		mnt_bind_folder /log /var/log
	fi

	# link /var/log --> /data/local for MET
	#if [ ! -e /data/local ] ; then
	#	ln -sf /var/log /data/local
	#fi
}
init_log &

init_nvram() {
	mkdir -p /data/vendor

	mnt_folder nvdata $NVDATA_PATH
	mkdir -p /data/nvram

	[ ! -f  "/mnt/vendor/nvram/raw" ] && /bin/dd if=/dev/zero of=/mnt/vendor/nvram/raw bs=1024 count=16384

	mnt_folder protect_a $PROTECT1_PATH
	mnt_folder protect_b $PROTECT2_PATH
}
init_nvram &

init_log2() {
	# link /var/log --> /run/media/mmcblk1p1 for legacy AP/MD/Network logging storage
	mkdir -p /run/media
	if [ ! -e /run/media/mmcblk1p1 ] ; then
		ln -sf /var/log /run/media/mmcblk1p1
	fi
	# Link /var/log --> /mnt/sdcard for MD logging storage
	if [ ! -e /mnt/sdcard ] ; then
		#rm -rf /mnt/sdcard
		ln -sf /var/log /mnt/sdcard
	fi
}
#init_log2 &

#you.chen@2023-06-08 add for load oemapp begin
init_oemapp() {

	mnt_folder db /db
	mnt_folder oemdata /oemdata

	if [ "$AVB_SLOT_FLAG" == "a" ]; then
		mnt_folder oemapp_a /oemapp
	elif [ "$AVB_SLOT_FLAG" == "b" ]; then
		mnt_folder oemapp_b /oemapp
	else
		echo "unkown ab slot, not mount oemapp"
	fi
}

init_oemapp &
#you.chen@2023-06-08 add for load oemapp end

init_partlabel() {
	mkdir -p /dev/disk/by-partlabel
	if [ -d "/dev/disk/by-partlabel" ]; then
		cd /dev/disk/by-partlabel
		ln -s ../../mtd6 hsm_bl
		ln -s ../../mtd7 hsm_os_a
		ln -s ../../mtd43 hsm_os_b
		ln -s ../../mtd8 boot_para
		ln -s ../../mtd9 protect_a
		ln -s ../../mtd10 protect_b
		ln -s ../../mtd12 boot_a
		ln -s ../../mtd13 boot_b
		ln -s ../../mtd14 system_a
		ln -s ../../mtd15 system_b
		ln -s ../../mtd16 md1img_a
		ln -s ../../mtd17 md1img_b
		ln -s ../../mtd18 md1dsp_a
		ln -s ../../mtd19 md1dsp_b
		ln -s ../../mtd20 mcf1_a
		ln -s ../../mtd21 mcf1_b
		ln -s ../../mtd22 mcf2_a
		ln -s ../../mtd23 mcf2_b
		ln -s ../../mtd24 misc
		ln -s ../../mtd25 tee_a
		ln -s ../../mtd26 tee_b
		ln -s ../../mtd28 oemapp_a
		ln -s ../../mtd36 vbmeta_a
		ln -s ../../mtd37 vbmeta_b
		ln -s ../../mtd39 expdb
		ln -s ../../mtd0 bl2_a
		ln -s ../../mtd41 bl2_b
		ln -s ../../mtd1 bl33_a
		ln -s ../../mtd42 bl33_b
		ln -s ../../mtd29 mcupm_a
		ln -s ../../mtd44 mcupm_b
		ln -s ../../mtd30 sspm_a
		ln -s ../../mtd45 sspm_b
		ln -s ../../mtd31 dpm_a
		ln -s ../../mtd46 dpm_b
		ln -s ../../mtd32 medmcu_a
		ln -s ../../mtd33 medmcu_b
		ln -s ../../mtd2 spm_a
		ln -s ../../mtd3 spm_b
		ln -s ../../mtd49 oemapp_b
	fi

	mount -t tmpfs /dev/disk/by-partlabel/misc /misc
}
init_partlabel &

wait

echo "=== Initial: MOUNT Configuration End ===" > /dev/kmsg
