postinstall revision 4bb7efa72ed531c10f097919636e67724ec4c25a
c313914d0e66b20969215e519bbf2ab4ecf39512Tinderbox User#!/sbin/sh
c80e152862cc3e3207dc837fde7116bd4c0e4b9dTinderbox User#
c80e152862cc3e3207dc837fde7116bd4c0e4b9dTinderbox User# CDDL HEADER START
8d1b3ceb4d491ce32572f1702f37ed585eede993Evan Hunt#
8d1b3ceb4d491ce32572f1702f37ed585eede993Evan Hunt# The contents of this file are subject to the terms of the
d77cb075aae5595e460e3299bfc1e8ea5d42b560Evan Hunt# Common Development and Distribution License (the "License").
d77cb075aae5595e460e3299bfc1e8ea5d42b560Evan Hunt# You may not use this file except in compliance with the License.
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews#
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# or http://www.opensolaris.org/os/licensing.
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# See the License for the specific language governing permissions
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# and limitations under the License.
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrews#
7ec97ae74e42ec21b354fd2d1366313b41d947d6Evan Hunt# When distributing Covered Code, include this CDDL HEADER in each
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrews# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrews# If applicable, add the following below this CDDL HEADER, with the
002f1373374a0b72fc0329baa682917929bef168Tony Finch# fields enclosed by brackets "[]" replaced with your own identifying
002f1373374a0b72fc0329baa682917929bef168Tony Finch# information: Portions Copyright [yyyy] [name of copyright owner]
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews#
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews# CDDL HEADER END
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews#
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews#
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews# Use is subject to license terms.
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews#
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews
d8351dfc9b725b0d727be7acab6247d7d501d9a0Mark Andrews# Function: check_add_drv()
d8351dfc9b725b0d727be7acab6247d7d501d9a0Mark Andrews#
d8351dfc9b725b0d727be7acab6247d7d501d9a0Mark Andrews# This function will check if the module has an entry in etc/name_to_major
3a29ce9c08dd31709c73e7187aebda0d360c537bEvan Hunt# If not simply calls add_drv with the arguments given. If there is
3a29ce9c08dd31709c73e7187aebda0d360c537bEvan Hunt# such an entry in name_to_major file, it adds entries in driver_aliases
5c78f1f50e53d8e2ed51a187efc2c9a0f43b4b1bMark Andrews# driver_classes and minor_perm if necessary.
f1740da065d4555039fe8bb53beb4153e3f94de3Mark Andrews# The syntax of this function is the same as add_drv.
f1740da065d4555039fe8bb53beb4153e3f94de3Mark Andrews
f1740da065d4555039fe8bb53beb4153e3f94de3Mark Andrewscheck_add_drv()
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrews{
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrews if [ "$BASEDIR" = "" ]
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrews then
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrews BASEDIR=/
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark Andrews fi
ad309e8dfa0601d6053aaa12770a98a6940f89deEvan Hunt alias=""
ad309e8dfa0601d6053aaa12770a98a6940f89deEvan Hunt class=""
635e4351b04fd61ca6d853bdac6268c090b55129Mark Andrews ADD_ALIAS=0
635e4351b04fd61ca6d853bdac6268c090b55129Mark Andrews ADD_CLASS=0
fc04365d2f83f197c8a54545dd9cd4ce6a209940Mark Andrews ADD_MINOR=0
fc04365d2f83f197c8a54545dd9cd4ce6a209940Mark Andrews OPTIND=1
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark Andrews IS_NET_DRIVER=0
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark Andrews
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark Andrews cmd="add_drv"
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt NO_CMD=
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt while getopts i:b:m:c:N opt
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt do
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt case $opt in
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt N ) NO_CMD=1;;
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt i ) ADD_ALIAS=1
1cf118a656f5fd210787908b845362077fc507f8Evan Hunt alias=$OPTARG
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund Sivaraman cmd=$cmd" -i '$alias'"
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund Sivaraman ;;
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund Sivaraman m ) ADD_MINOR=1
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman minor=$OPTARG
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman cmd=$cmd" -m '$minor'"
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman ;;
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman c) ADD_CLASS=1
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews class=$OPTARG
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews cmd=$cmd" -c $class"
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews ;;
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews b) BASEDIR=$OPTARG
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews cmd=$cmd" -b $BASEDIR"
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews ;;
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews \?) echo "check_add_drv can not handle this option"
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt return
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt ;;
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt esac
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt done
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt shift `/usr/bin/expr $OPTIND - 1`
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont drvname=$1
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont cmd=$cmd" "$drvname
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień /usr/bin/grep "^$drvname[ ]" $BASEDIR/etc/name_to_major > /dev/null 2>&1
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman #
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman # NB: We really would have liked to use update_drv here, but
7e1a62eea2e4ba9d6c3fc718e679b965fa514f69Mark Andrews # since we can't do that (see CR 6281386), we have this code.
ec29d217ba3a2bf3e617a7b5b6708ae221bee999Mark Andrews # Note that if we've never added this driver before, the add_drv
ec29d217ba3a2bf3e617a7b5b6708ae221bee999Mark Andrews # below takes care of worrying about conflicting entries in
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews # /etc/driver_aliases. (It will fail if there is a conflicting
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews # driver squatting on the alias.)
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews #
f0353a586c2bfbae999193cb644b6bc94c7944d8Mark Andrews if [ "$NO_CMD" = "" -a $? -ne 0 ]
f0353a586c2bfbae999193cb644b6bc94c7944d8Mark Andrews then
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt eval $cmd
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt else
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt # entry already in name_to_major, add alias, class, minorperm
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt # if necessary
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt if [ $ADD_ALIAS = 1 ]
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt then
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt for i in $alias
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt do
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt /usr/bin/egrep "^$drvname[ ]+$i" $BASEDIR/etc/driver_aliases>/dev/null 2>&1
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt if [ $? -ne 0 ]
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews then
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews echo "$drvname $i" >> $BASEDIR/etc/driver_aliases
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews fi
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews done
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews fi
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews if [ $ADD_CLASS = 1 ]
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews then
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews /usr/bin/egrep "^$drvname[ ]+$class( | |$)" $BASEDIR/etc/driver_classes > /dev/null 2>&1
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews if [ $? -ne 0 ]
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews then
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews echo "$drvname\t$class" >> $BASEDIR/etc/driver_classes
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews fi
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews fi
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews if [ $ADD_MINOR = 1 ]
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews then
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews /usr/bin/grep "^$drvname:" $BASEDIR/etc/minor_perm > /dev/null 2>&1
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews if [ $? -ne 0 ]
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews then
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews minorentry="$drvname:$minor"
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews echo $minorentry >> $BASEDIR/etc/minor_perm
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews fi
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews fi
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews
f7f4730e563a2749629fe7fef4cd9513cd2bfab7Mark Andrews fi
f7f4730e563a2749629fe7fef4cd9513cd2bfab7Mark Andrews
1848d38f441ebf70ab21f6151bc3487a92d25b63Mark Andrews
1848d38f441ebf70ab21f6151bc3487a92d25b63Mark Andrews}
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrewscheck_add_drv -b "${BASEDIR}" \
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews -i '"pciclass,080500" "pciclass,080501"' \
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews -m '* 0644 root root' sdhost
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrewscheck_add_drv -b "${BASEDIR}" \
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews -m '* 0644 root root' sdcard
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews