#!/bin/sh
##########################################################################
# HOTPLUG Script
# Only USB automount implement
# Auto Mount Program must be existing in both places which are BOOT partition and RFS
# Version 5.0.0 (2012-05-07) : VFS option change.
# Version 5.0.1 (2012-07-04) : Internal HDD Flag setting "/dtv/.internal_hdd"
# Version 5.0.2 (2012-08-01) : 1. Support tntfs for NVT568. 2. NFS umount bug patch - umount nfs exported device on USB unplug.
# Version 5.0.3 (2012-08-21) : Support automount exFAT & EXT4.
# Version 5.0.3 (2012-09-17) : change scripit usb_hotplug.sh to hotplug, refactoring ver 0.9
# Version 5.0.4 (2012-10-23) : Add to VFS option for NFS server option & When inode cache eviction, rebuild to disk inode.
# Version 5.0.5 (2012-10-23) : support to exportfs & increase shrinker.batch value to avoid inode cache eviction.
# Version 5.0.6 (2012-10-31) : Add tntfs option for "nfs_max_length"
# Version 5.0.7 (2012-12-12) : Add to delay(300ms) to avoid to missing mount hotplug at FOXB
# Version 5.0.8 (2013-03-04) : Modified automount option - EXT4, TNTFS - remove write barrier
# Version 6.0.0 (2013-08-27) : New Branch for 2014 ARM Projects
# Version 6.0.1 (2013-11-01) : Change toolchain revisionv3(arm-v7a15v4r3-20131011,arm-v7a8v4r3-20131011)
# Version 6.0.2 (2013-11-04) : Add sntfs file system, Requested Linux team(namjae.jeon@samsung.com, 20131104)
# Version 6.0.3 (2013-11-06) : Add stop_automount for STR project (sm79.bae@samsung.com)
# Version 6.0.4 (2013-11-11) : Temporary remove "SUPPORT_NFS", tntfs option rollback(namjae.jeon@samsung.com)
# Version 6.0.5 (2013-11-12) : modify sntfs support_file_system(sm79.bae@samsung.com)
# Version 6.0.6 (2013-11-14) : remove sntfs support_file_system(sm79.bae@samsung.com)
# Version 6.0.7 (2013-11-26) : Enforced DAC for BDP(kh82.lee@samsung.com)
# Version 6.0.8 (2013-12-04) : Support Case INSENSITIVE mount option for BDP(hohyun.kang@samsung.com)
# Version 6.0.9 (2013-12-09) : Enforced DAC for All Project(check /.enforce)(kh82.lee@samsung.com)
# Version 6.1.0 (2013-12-26) : Bugfix mount read only file system for tntfs(sm79.bae)
# Version 6.1.1 (2013-12-31) : Remove enforce option file, Always support enforce(/.enforce)(sm79.bae@samsung.com)
# Version 6.1.2 (2014-01-07) : Bugfix for crash when enter wrong argument for usb_cmd(kanak.priey@samsung.com)
# Version 6.1.3 (2014-04-27) : Bugfix for create usb_message file under stop_automount condition(sm79.bae@samsung.com)
###########################################################################
# Setting
# mounted directory : $MOUNTDIR/$PREFIX1 ~ $PREFIX$MAXNUM (ex /usb/usb1 ~ /usb/usb15)
ENABLE=1
DEBUG_MESSAGE=0
MOUNTBASEDIR=/dtv/usb
STOP_AUTOMOUNT=/dtv/stop_automount
RFS_PROGRAMDIR=/sbin/usb_mount
MOUNTPROGRAM=usb_mount
CMDPROGRAM=usb_cmd
MOIPCMDPROGRAM=usb_moip_cmd
UNKNOWNDEVPROGRAM=unknownDev_cmd
LOCKFILE=$MOUNTBASEDIR/lock
DEBUG_MESSAGE_FILE=/dtv/usb_message
DEBUG_MODE_FILE=/dtv/debug_on
CHANGE_IOMODE=0
IOSCHEDULE_MODE=anticipatory
SCSIPATH=/sys/block
IO_MODE_FILE=/dtv/anticipatory_on
# Program Directory setting
PROGRAMDIR=$RFS_PROGRAMDIR
HDD_MODEL_FILE=/dtv/.internal_hdd

#Check whether Internal HDD or Not
if [ -f $HDD_MODEL_FILE ]; then
       echo "HDD model"
	MOUNTPROGRAM=usb_mount_hdd
	CMDPROGRAM=usb_cmd_hdd
else
	echo "Non-internal HDD model"
	MOUNTPROGRAM=usb_mount
	CMDPROGRAM=usb_cmd
fi

# Input argument
#ACTION=$1
#DEVPATH=$2
#PRODUCT=$3
#INTERFACE=$4
#TYPE=$5


# Debug Mode setting
if [ -f $DEBUG_MODE_FILE ]; then
        DEBUG_MESSAGE=1
fi
# Mode setting for IO Scheduler with usb storage 
if [ -f $IO_MODE_FILE ]; then
        CHANGE_IOMODE=1
fi

#if [ "$ENABLE" -eq 1 ]
if [ ! -f $STOP_AUTOMOUNT ]
then
# RUN
	CLASS=`echo $DEVPATH | sed 's/^\///g' | sed 's/\/.*//g'`

	if [ "$CLASS" = "block" ]
	then
		DEVICE=`echo $DEVPATH | sed 's/^\/[^\/]*\///g' | sed 's/\/.*//g'`
		PARTITION=`echo $DEVPATH | sed 's/^\/[^\/]*\///g' | sed 's/^[^\/]*\///g'`

		$PROGRAMDIR/$CMDPROGRAM $ACTION $DEVICE $PARTITION

		if [ $DEBUG_MESSAGE -eq 1 ]; then
			echo ">> MSC Hotplug Message : \"$ACTION\" \"$DEVPATH\" \"$PRODUCT\" \"$INTERFACE\" \"$TYPE\"" >> $DEBUG_MESSAGE_FILE
			echo ">> MSC Hotplug Message : $PROGRAMDIR/$CMDPROGRAM $ACTION $DEVICE $PARTITION" >> $DEBUG_MESSAGE_FILE
		fi				

		if [ ! -f $LOCKFILE ]; then
			mkdir -p $MOUNTBASEDIR
			touch $LOCKFILE
			$PROGRAMDIR/$MOUNTPROGRAM
		fi
		
		if [ $CHANGE_IOMODE -eq 1 ]; then
			echo $IOSCHEDULE_MODE > $SCSIPATH/$DEVICE/queue/scheduler
			if [ $DEBUG_MESSAGE -eq 1 ]; then
				echo ">> MSC Hotplug Message : set $IOSCHEDULE_MODE mode with $DEVICE" >> $DEBUG_MESSAGE_FILE
			fi
		fi
		
	else
		if [ $DEBUG_MESSAGE -eq 1 ]; then
			echo ">> Hotplug Message : \"$ACTION\" \"$DEVPATH\" \"$PRODUCT\" \"$INTERFACE\" \"$TYPE\"" >> $DEBUG_MESSAGE_FILE
		fi
		
		# BRCM_WIFI_HOTPLUG
		BRCM_WIFI_HOTPLUG_DIR=/mtd_cmmlib/WIFI_LIB
		BRCM_WIFI_HOTPLUG_SCRIPT=brcm_hotplug.sh
		if [ -f $BRCM_WIFI_HOTPLUG_DIR/$BRCM_WIFI_HOTPLUG_SCRIPT ]; then
			$BRCM_WIFI_HOTPLUG_DIR/$BRCM_WIFI_HOTPLUG_SCRIPT
		fi

	fi

else
	
	if [ "$CLASS" = "block" ]
        then
#		DEVICE=`echo $DEVPATH | sed 's/^\/[^\/]*\///g' | sed 's/\/.*//g'`
#		PARTITION=`echo $DEVPATH | sed 's/^\/[^\/]*\///g' | sed 's/^[^\/]*\///g'`

#		$PROGRAMDIR/$CMDPROGRAM stop_automount $DEVICE $PARTITION

		$PROGRAMDIR/$CMDPROGRAM stop_automount

		if [ $DEBUG_MESSAGE -eq 1 ]; then
			echo ">> MSC Hotplug Message : stop_automount \"$DEVPATH\" \"$PRODUCT\" \"$INTERFACE\" \"$TYPE\"" >> $DEBUG_MESSAGE_FILE
			echo ">> MSC Hotplug Message : $PROGRAMDIR/$CMDPROGRAM stop_automount $DEVICE $PARTITION" >> $DEBUG_MESSAGE_FILE
		fi

	fi	
fi
