#!/sbin/sh
#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"@(#)postinstall	1.21	08/11/14 SMI"	

# Function: check_add_drv()
#
# This function will check if the module has an entry in etc/name_to_major
# If not simply calls add_drv with the arguments given. If there is
# such an entry in name_to_major file, it adds entries in driver_aliases
# driver_classes and minor_perm if necessary.
# The syntax of this function is the same as add_drv. 

check_add_drv()
{
	if [ "$BASEDIR" = "" ]
	then
		BASEDIR=/  
	fi
	alias=""
	class=""
	ADD_ALIAS=0
	ADD_CLASS=0
	ADD_MINOR=0
	OPTIND=1
	IS_NET_DRIVER=0

	cmd="add_drv"

	NO_CMD=
	while getopts i:b:m:c:N  opt
	do
		case $opt in
			N )	NO_CMD=1;;
			i )	ADD_ALIAS=1	
				alias=$OPTARG
				cmd=$cmd" -i '$alias'"
				;;
			m )	ADD_MINOR=1
				minor=$OPTARG
				cmd=$cmd" -m '$minor'"
				;;
			c)	ADD_CLASS=1
				class=$OPTARG
				cmd=$cmd" -c $class"
				;;
			b)	BASEDIR=$OPTARG
				cmd=$cmd" -b $BASEDIR"
				;;
			\?) 	echo "check_add_drv can not handle this option"
				return
				;;
			esac
	done 
	shift `/usr/bin/expr $OPTIND - 1`
	
	drvname=$1

	cmd=$cmd" "$drvname

	drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`

	/usr/bin/grep "^$drvname[ 	]" $BASEDIR/etc/name_to_major >  /dev/null 2>&1

	if [ "$NO_CMD" = "" -a $? -ne 0 ] 
	then
		eval $cmd
	else	
		# entry already in name_to_major, add alias, class, minorperm
		# if necessary
		if [ $ADD_ALIAS = 1 ]	
		then
			for i in $alias
			do
				/usr/bin/egrep "^$drvname[ 	]+$i" $BASEDIR/etc/driver_aliases>/dev/null 2>&1
				if [ $? -ne 0 ]
				then
					echo "$drvname $i" >> $BASEDIR/etc/driver_aliases	
				fi
			done
		fi

		if [ $ADD_CLASS = 1 ]
		then
			/usr/bin/egrep "^$drvname[ 	]+$class( |	|$)" $BASEDIR/etc/driver_classes > /dev/null 2>&1
			if [ $? -ne 0 ]
			then 
				echo "$drvname\t$class" >> $BASEDIR/etc/driver_classes
			fi
		fi

		if [ $ADD_MINOR = 1 ]
		then
			/usr/bin/grep "^$drvname:" $BASEDIR/etc/minor_perm > /dev/null 2>&1
			if [ $? -ne 0 ]
			then 
				minorentry="$drvname:$minor"
				echo $minorentry >> $BASEDIR/etc/minor_perm
			fi
		fi

	fi

	
}

SPARCALIAS='"pci8086,1000"
"pci8086,1001"
"pci8086,1004"
"pci8086,1008"
"pci8086,1009"
"pci8086,100c"
"pci8086,100d"
"pci8086,100e"
"pci8086,100f"
"pci8086,1010"
"pci8086,1011"
"pci8086,1012"
"pci8086,1013"
"pci8086,1014"
"pci8086,1015"
"pci8086,1016"
"pci8086,1017"
"pci8086,1018"
"pci8086,1019"
"pci8086,101a"
"pci8086,101d"
"pci8086,101e"
"pci8086,1026"
"pci8086,1027"
"pci8086,1028"
"pci8086,1049"
"pci8086,104a"
"pci8086,104b"
"pci8086,104c"
"pci8086,104d"
"pci8086,105a"
"pci8086,105b"
"pci8086,105c"
"pci8086,1060"
"pci8086,1061"
"pci8086,1062"
"pci8086,1063"
"pci8086,1075"
"pci8086,1076"
"pci8086,1077"
"pci8086,1078"
"pci8086,1079"
"pci8086,107a"
"pci8086,107b"
"pci8086,107c"
"pci8086,107d"
"pci8086,107e"
"pci8086,107f"
"pci8086,108a"
"pci8086,108b"
"pci8086,108c"
"pci8086,1096"
"pci8086,1098"
"pci8086,1099"
"pci8086,109a"
"pci8086,10a4"
"pci8086,10a5"
"pci8086,10b5"
"pci8086,10b9"
"pci8086,10ba"
"pci8086,10bb"
"pci8086,10bc"
"pci8086,10bd"
"pci8086,10bf"
"pci8086,10c0"
"pci8086,10c2"
"pci8086,10c3"
"pci8086,10c4"
"pci8086,10c5"
"pci8086,10cb"
"pci8086,10cc"
"pci8086,10cd"
"pci8086,10ce"
"pci8086,10d3"
"pci8086,10d5"
"pci8086,10d9"
"pci8086,10da"
"pci8086,10de"
"pci8086,10df"
"pci8086,10e5"
"pci8086,10f5"
"pci8086,294c"
"pciex8086,1049"
"pciex8086,104a"
"pciex8086,104b"
"pciex8086,104c"
"pciex8086,104d"
"pciex8086,1060"
"pciex8086,107d"
"pciex8086,107e"
"pciex8086,107f"
"pciex8086,108b"
"pciex8086,108c"
"pciex8086,1096"
"pciex8086,1098"
"pciex8086,109a"
"pciex8086,10a4"
"pciex8086,10a5"
"pciex8086,10b9"
"pciex8086,10ba"
"pciex8086,10bb"
"pciex8086,10bc"
"pciex8086,10bd"
"pciex8086,10bf"
"pciex8086,10c0"
"pciex8086,10c2"
"pciex8086,10c3"
"pciex8086,10c4"
"pciex8086,10c5" 
"pciex8086,10cb"
"pciex8086,10cc"
"pciex8086,10cd"
"pciex8086,10ce"
"pciex8086,10d3"
"pciex8086,10d5"
"pciex8086,10d9"
"pciex8086,10da"
"pciex8086,10de"
"pciex8086,10df"
"pciex8086,10e5"
"pciex8068,10f5"
"pciex8086,294c"'

# aliases for Intel Ophir chipset
NEWALIAS='"pciex8086,105e"
"pciex8086,105f"
"pci8086,105e"
"pci8086,105f"'

CMPLALIAS="$SPARCALIAS $NEWALIAS"

if [ ${ARCH} = "sparc" ]
then
    
    if grep "\<ipge\>" $BASEDIR/etc/name_to_major > /dev/null 2>&1
	then
	# if ipge driver exists, add the original set of SPARCALIAS
	check_add_drv -b "${BASEDIR}" -i "$SPARCALIAS" \
	    -m '* 0666 root root' e1000g
    else
	check_add_drv -b "${BASEDIR}" -i "$CMPLALIAS" \
	    -m '* 0666 root root' e1000g
    fi
else if [ ${ARCH} = "i386" ]
    then
    check_add_drv -b "${BASEDIR}" -i "$CMPLALIAS" \
	-m '* 0666 root root' e1000g
    fi
fi
