postinstall revision 1ae0874509b6811fdde1dfd46f0d93fd09867a3f
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson#!/sbin/sh
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# CDDL HEADER START
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson# The contents of this file are subject to the terms of the
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson# Common Development and Distribution License (the "License").
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson# You may not use this file except in compliance with the License.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews# or http://www.opensolaris.org/os/licensing.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# See the License for the specific language governing permissions
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews# and limitations under the License.
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews#
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews# When distributing Covered Code, include this CDDL HEADER in each
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fb84f9014321c5f33c4682de5661b579fcde318fAndreas Gustafsson# If applicable, add the following below this CDDL HEADER, with the
8dc5d5e460da15b2481893687cad7e5b72d0314aAutomatic Updater# fields enclosed by brackets "[]" replaced with your own identifying
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# information: Portions Copyright [yyyy] [name of copyright owner]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# CDDL HEADER END
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Use is subject to license terms.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# ident "%Z%%M% %I% %E% SMI"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Function: check_add_drv()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# This function will check if the module has an entry in etc/name_to_major
7329012471d165cd3dc4180ad2a0a43de91e7f01Mark Andrews# If not simply calls add_drv with the arguments given. If there is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# such an entry in name_to_major file, it adds entries in driver_aliases
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# driver_classes and minor_perm if necessary.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# The syntax of this function is the same as add_drv.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
b0e8629055a766d4555a005a283c2889a5974945Mark Andrewscheck_add_drv()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ "$BASEDIR" = "" ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein BASEDIR=/
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein alias=""
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein class=""
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ADD_ALIAS=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ADD_CLASS=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ADD_MINOR=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein OPTIND=1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein IS_NET_DRIVER=0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cmd="add_drv"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
d71e2e0c61df16ff37c9934c371a4a60c08974f7Mark Andrews NO_CMD=
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while getopts i:b:m:c:N opt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein case $opt in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein N ) NO_CMD=1;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein i ) ADD_ALIAS=1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein alias=$OPTARG
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cmd=$cmd" -i '$alias'"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein m ) ADD_MINOR=1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein minor=$OPTARG
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cmd=$cmd" -m '$minor'"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein c) ADD_CLASS=1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein class=$OPTARG
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cmd=$cmd" -c $class"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein b) BASEDIR=$OPTARG
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cmd=$cmd" -b $BASEDIR"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein \?) echo "check_add_drv can not handle this option"
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews return
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews ;;
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews esac
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews done
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews shift `/usr/bin/expr $OPTIND - 1`
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews
b3cbb2f1ad021349e89807f3492df6e4e679cd56Mark Andrews drvname=$1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cmd=$cmd" "$drvname
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /usr/bin/grep "^$drvname[ ]" $BASEDIR/etc/name_to_major > /dev/null 2>&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ "$NO_CMD" = "" -a $? -ne 0 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
61e1dc26d62c2a0059e3ca7efe2ad0f4a5b8df92Mark Andrews eval $cmd
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # entry already in name_to_major, add alias, class, minorperm
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # if necessary
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ $ADD_ALIAS = 1 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for i in $alias
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /usr/bin/egrep "^$drvname[ ]+$i" $BASEDIR/etc/driver_aliases>/dev/null 2>&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ $? -ne 0 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$drvname $i" >> $BASEDIR/etc/driver_aliases
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ $ADD_CLASS = 1 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /usr/bin/egrep "^$drvname[ ]+$class( | |$)" $BASEDIR/etc/driver_classes > /dev/null 2>&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ $? -ne 0 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$drvname\t$class" >> $BASEDIR/etc/driver_classes
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ $ADD_MINOR = 1 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /usr/bin/grep "^$drvname:" $BASEDIR/etc/minor_perm > /dev/null 2>&1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if [ $? -ne 0 ]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein minorentry="$drvname:$minor"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo $minorentry >> $BASEDIR/etc/minor_perm
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
b0e8629055a766d4555a005a283c2889a5974945Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-channel-devices"' cnex
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-console-concentrator"' vcc
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-disk"' vdc
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-disk-server"' vds
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-channel"' vldc
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-network"' vnet
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincheck_add_drv -b "${BASEDIR}" -i '"SUNW,sun4v-network-switch"' vsw
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein