#!/bin/bash
#set -x

# update kernel files so driver can compile in Red Hat kernels

driver_name="mpt2sas"
current_path=`pwd`

for KERNEL in /lib/modules/*; do
	echo "updating kernel=${KERNEL}"
	build_folder="${KERNEL}/build"
	scsi_folder="${build_folder}/drivers/scsi"

	if [ ! -d ${scsi_folder} ]; then
		continue;
	fi;

	if [ ! -d ${build_folder} ]; then
		continue;
	fi;

	if [ ! -f ${build_folder}/.config ]; then
		continue;
	fi;

	# copy in mpt2sas Makefile and Kconfig
	mkdir -p ${scsi_folder}/${driver_name}
	cp -f Kconfig ${scsi_folder}/${driver_name}
	cp -f Makefile ${scsi_folder}/${driver_name}

	# update scsi-mid Makefile
	if [ `grep -c CONFIG_SCSI_MPT2SAS ${scsi_folder}/Makefile` -eq 0 ]; then
		cp -f ${scsi_folder}/Makefile ${scsi_folder}/Makefile.original
		sed -e "/CONFIG_MEGARAID_SAS/ a\obj-\$(CONFIG_SCSI_MPT2SAS)      += mpt2sas\/" ${scsi_folder}/Makefile > ${scsi_folder}/Makefile.append
		mv ${scsi_folder}/Makefile.append ${scsi_folder}/Makefile
	fi;

	#update scsi-mid Kconfig
	if [ `grep -c mpt2sas ${scsi_folder}/Kconfig` -eq 0 ]; then
		cp -f ${scsi_folder}/Kconfig ${scsi_folder}/Kconfig.original
		sed -e "/Kconfig.megaraid/ a\source \"drivers\/scsi\/mpt2sas\/Kconfig\"" ${scsi_folder}/Kconfig > ${scsi_folder}/Kconfig.append
		mv ${scsi_folder}/Kconfig.append ${scsi_folder}/Kconfig
	fi;

	# update kernel .config
	if [ `grep -c CONFIG_SCSI_MPT2SAS ${build_folder}/.config` -eq 0 ]; then
		sed -e "/CONFIG_MEGARAID_SAS/ a\CONFIG_SCSI_MPT2SAS=m" ${build_folder}/.config > ${build_folder}/.config.append
		sed -e "/CONFIG_SCSI_MPT2SAS/ a\CONFIG_SCSI_MPT2SAS_MAX_SGE=128" ${build_folder}/.config.append > ${build_folder}/.config.append.1
		sed -e "/CONFIG_SCSI_MPT2SAS_MAX_SGE/ a\CONFIG_SCSI_MPT2SAS_LOGGING=y" ${build_folder}/.config.append.1 > ${build_folder}/.config.append.2
		mv ${build_folder}/.config.append.2 ${build_folder}/.config
		rm -f ${build_folder}/.config.append*
	fi;

	cd ${build_folder}
	cp include/config/kernel.release include/config/kernel.release.original
	make oldconfig > /dev/null
	make prepare > /dev/null
	mv include/config/kernel.release.original include/config/kernel.release
	cd ${current_path}
done;
