Home | History | Annotate | Download | only in SUNWamr
      1 #!/sbin/sh
      2 #
      3 # Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
      4 # Use is subject to license terms.
      5 #
      6 # ident	"%Z%%M%	%I%	%E% SMI"
      7 #
      8 
      9 # Function: check_add_drv()
     10 #
     11 # This function will check if the module has an entry in etc/name_to_major
     12 # If not simply calls add_drv with the arguments given. If there is
     13 # such an entry in name_to_major file, it adds entries in driver_aliases
     14 # driver_classes and minor_perm if necessary.
     15 # The syntax of this function is the same as add_drv. 
     16 
     17 check_add_drv()
     18 {
     19 	if [ "$BASEDIR" = "" ]
     20 	then
     21 		BASEDIR=/  
     22 	fi
     23 	alias=""
     24 	class=""
     25 	ADD_ALIAS=0
     26 	ADD_CLASS=0
     27 	ADD_MINOR=0
     28 	OPTIND=1
     29 	IS_NET_DRIVER=0
     30 
     31 	cmd="add_drv"
     32 
     33 	NO_CMD=
     34 	while getopts i:b:m:c:N  opt
     35 	do
     36 		case $opt in
     37 			N )	NO_CMD=1;;
     38 			i )	ADD_ALIAS=1	
     39 				alias=$OPTARG
     40 				cmd=$cmd" -i '$alias'"
     41 				;;
     42 			m )	ADD_MINOR=1
     43 				minor=$OPTARG
     44 				cmd=$cmd" -m '$minor'"
     45 				;;
     46 			c)	ADD_CLASS=1
     47 				class=$OPTARG
     48 				cmd=$cmd" -c $class"
     49 				;;
     50 			b)	BASEDIR=$OPTARG
     51 				cmd=$cmd" -b $BASEDIR"
     52 				;;
     53 			\?) 	echo "check_add_drv can not handle this option"
     54 				return
     55 				;;
     56 			esac
     57 	done 
     58 	shift `/usr/bin/expr $OPTIND - 1`
     59 	
     60 	drvname=$1
     61 
     62 	cmd=$cmd" "$drvname
     63 
     64 	drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`
     65 
     66 	/usr/bin/grep "^$drvname[ 	]" $BASEDIR/etc/name_to_major >  /dev/null 2>&1
     67 
     68 	if [ "$NO_CMD" = "" -a $? -ne 0 ] 
     69 	then
     70 		eval $cmd
     71 	else	
     72 		# entry already in name_to_major, add alias, class, minorperm
     73 		# if necessary
     74 		if [ $ADD_ALIAS = 1 ]	
     75 		then
     76 			for i in $alias
     77 			do
     78 				/usr/bin/egrep "^$drvname[ 	]+$i" $BASEDIR/etc/driver_aliases>/dev/null 2>&1
     79 				if [ $? -ne 0 ]
     80 				then
     81 					echo "$drvname $i" >> $BASEDIR/etc/driver_aliases	
     82 				fi
     83 			done
     84 		fi
     85 
     86 		if [ $ADD_CLASS = 1 ]
     87 		then
     88 			/usr/bin/egrep "^$drvname[ 	]+$class( |	|$)" $BASEDIR/etc/driver_classes > /dev/null 2>&1
     89 			if [ $? -ne 0 ]
     90 			then 
     91 				echo "$drvname\t$class" >> $BASEDIR/etc/driver_classes
     92 			fi
     93 		fi
     94 
     95 		if [ $ADD_MINOR = 1 ]
     96 		then
     97 			/usr/bin/grep "^$drvname:" $BASEDIR/etc/minor_perm > /dev/null 2>&1
     98 			if [ $? -ne 0 ]
     99 			then 
    100 				minorentry="$drvname:$minor"
    101 				echo $minorentry >> $BASEDIR/etc/minor_perm
    102 			fi
    103 		fi
    104 
    105 	fi
    106 
    107 
    108 }
    109 
    110 
    111 check_add_drv -i '"pci1000,532" "pci1028,e" "pci1028,f" "pci1028,493" "pci1028,518" "pci1028,520"' -b "$BASEDIR" -c scsi amr
    112