# # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 1997 Sun Microsystems, Inc. # All Rights Reserved. # # postinstall script for SUNWpsdir package. # #ident "%Z%%M% %I% %E% SMI" # # # 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() { basedir=/ alias="" class="" ADD_ALIAS=0 ADD_CLASS=0 ADD_MINOR=0 OPTIND=1 IS_NET_DRIVER=0 cmd="add_drv" while getopts i:b:m:c:n opt do case $opt in 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" ;; n) IS_NET_DRIVER=1 ;; \?) 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 [ $? -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 # The following clone device/dev is needed for Custom Jumpstart if [ $IS_NET_DRIVER -eq 1 ] then CLONE_DEVICE=devices/pseudo/clone@0:$drvname set `/usr/bin/grep "^clone[ ]" $basedir/etc/name_to_major` CLONE_MAJ=$2 set `/usr/bin/grep "^$drvname[ ]" $basedir/etc/name_to_major` DRIVER_MAJ=$2 mknod $basedir/$CLONE_DEVICE c $CLONE_MAJ $DRIVER_MAJ chmod 600 $basedir/$CLONE_DEVICE chgrp sys $basedir/$CLONE_DEVICE chown root $basedir/$CLONE_DEVICE ln -s ../$CLONE_DEVICE $basedir/dev/$drvname fi } # # Update /etc/driver_classes for drivers which change from class # "scsi" to class "dada". # drvclasses_updates() { nawk ' BEGIN { seen_ata = 0 } /^#/ || /^$/ { print next } # ATA controller driver now is a dual mode driver # which supports both scsi and dada classes. # Add an entry to advertise it as such in the # /etc/driver_classes $1 == "ata" { if (seen_ata == 0) { print "ata\tdada" print "ata\tscsi" seen_ata = 1 } next } { printf "%s\t%s\n", $1, $2 }' ${BASEDIR}/etc/driver_classes > /tmp/d.$$ cp /tmp/d.$$ ${BASEDIR}/etc/driver_classes rm /tmp/d.$$ } # # Add new device drivers to system # # Platform-specific drivers case "${ARCH}" in i386) drvclasses_updates check_add_drv -b "${BASEDIR}" -i '"mwss"' sbpro check_add_drv -b "${BASEDIR}" pci-ide check_add_drv -b "${BASEDIR}" -i '"ide"' ata ;; ppc) ;; esac