diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-02-15 12:36:32 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-02-15 12:36:32 +0000 |
commit | bbe35d48172c059e0cc4040bb3e1bbec5192abe2 (patch) | |
tree | a845123d3ad51ebb3af2f4d1972fe3410843372a /sources/target_skeleton/etc | |
parent | 039a17c4896759aa94c1e0eb037b99320c4c3b33 (diff) |
Fix pcmcia startup. Add grep
Diffstat (limited to 'sources/target_skeleton/etc')
-rwxr-xr-x | sources/target_skeleton/etc/init.d/S30pcmcia | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/sources/target_skeleton/etc/init.d/S30pcmcia b/sources/target_skeleton/etc/init.d/S30pcmcia new file mode 100755 index 000000000..0b14338f3 --- /dev/null +++ b/sources/target_skeleton/etc/init.d/S30pcmcia @@ -0,0 +1,180 @@ +#!/bin/sh + +# rc.pcmcia 1.39 2001/10/04 12:30:05 (David Hinds) +# +# This is designed to work in BSD as well as SysV init setups. See +# the HOWTO for customization instructions. +# Modified to comply with Debian's standards by Brian Mays +# <brian@debian.org>. + +# Tags for Red Hat init configuration tools +# +# chkconfig: 2345 45 96 +# processname: cardmgr +# pidfile: /var/run/cardmgr.pid +# config: /etc/pcmcia/config +# config: /etc/pcmcia/config.opts +# description: PCMCIA support is usually to support things like ethernet \ +# and modems in laptops. It won't get started unless \ +# configured so it is safe to have it installed on machines \ +# that don't need it. + +# Save option values passed in through the environment +for N in PCMCIA PCIC PCIC_OPTS CORE_OPTS CARDMGR_OPTS SCHEME ; do + V=`eval echo '$'$N` ; if [ "$V" ] ; then eval ENV_$N=\"$V\" ; fi +done + +# PCMCIA configuration... This may be wrong for many systems. + +# Should be either yenta_socket, i82365 or tcic +PCIC=yenta_socket +#PCIC=i82365 +#PCIC=tcic + +# Put socket driver timing parameters here +PCIC_OPTS= +# Put pcmcia_core options here +CORE_OPTS= +# Put cardmgr options here +CARDMGR_OPTS= +# To set the PCMCIA scheme at startup... +SCHEME= +PCMCIA=yes + + +for N in PCMCIA PCIC PCIC_OPTS CORE_OPTS CARDMGR_OPTS SCHEME ; do + V=`eval echo '$'ENV_$N` ; if [ "$V" ] ; then eval $N=\"$V\" ; fi +done +if [ "$PCMCIA" -a "$PCMCIA" != "yes" ] ; then exit 0 ; fi + +# Debian modification: Fix PCIC for stand-alone modules. +# yenta_socket -> i82365 on these systems. +# Existence of a standalone module implies that it is preferred. +PC=/lib/modules/`uname -r`/pcmcia +if [ "$PCIC" = yenta_socket -a -e $PC/i82365.o \ + -a ! -L $PC/i82365.o ]; then + PCIC=i82365 +fi + +usage() +{ + echo "Usage: $0 {start|stop|status|restart|reload|force-reload}" +} + +cleanup() +{ + while read SN CLASS MOD INST DEV EXTRA ; do + if [ "$SN" != "Socket" ] ; then + /etc/pcmcia/$CLASS stop $DEV 2> /dev/null + fi + done +} + +EXITCODE=1 +for x in "1" ; do + + if [ "$PCIC" = "" ] ; then + echo "PCIC module not defined in startup options!" + break + fi + + if [ $# -lt 1 ] ; then usage ; break ; fi + action=$1 + + case "$action" in + + start) + echo -n "Starting PCMCIA services:" + SC=/var/lib/pcmcia/scheme + RUN=/var/lib/pcmcia + if [ -L $SC -o ! -O $SC ] ; then rm -f $SC ; fi + if [ ! -f $SC ] ; then umask 022 ; touch $SC ; fi + if [ "$SCHEME" ] ; then umask 022 ; echo $SCHEME > $SC ; fi + grep -q pcmcia /proc/devices + if [ $? -ne 0 ] ; then + PC=/lib/modules/`uname -r`/pcmcia + KD=/lib/modules/`uname -r`/kernel/drivers/pcmcia + if [ -d $KD ] ; then + /sbin/modprobe pcmcia_core + /sbin/modprobe $PCIC + /sbin/modprobe ds + elif [ -d $PC ] ; then + echo -n " modules" + /sbin/insmod $PC/pcmcia_core.o $CORE_OPTS + /sbin/insmod $PC/$PCIC.o $PCIC_OPTS + /sbin/insmod $PC/ds.o + else + echo " module directory $PC not found." + break + fi + fi + if [ -s /var/run/cardmgr.pid ] && \ + kill -0 `cat /var/run/cardmgr.pid` 2>/dev/null ; then + echo " cardmgr is already running." + else + if [ -r $RUN/stab ] ; then + cat $RUN/stab | cleanup + fi + echo " cardmgr." + /sbin/cardmgr $CARDMGR_OPTS + fi + touch /var/lock/pcmcia.lock 2>/dev/null + EXITCODE=0 + ;; + + stop) + echo -n "Shutting down PCMCIA services:" + if [ -s /var/run/cardmgr.pid ] ; then + PID=`cat /var/run/cardmgr.pid` + kill $PID + echo -n " cardmgr" + # Give cardmgr a few seconds to handle the signal + kill -0 $PID 2>/dev/null && sleep 2 && \ + kill -0 $PID 2>/dev/null && sleep 2 && \ + kill -0 $PID 2>/dev/null && sleep 2 && \ + kill -0 $PID 2>/dev/null + fi + if grep -q "ds " /proc/modules ; then + echo -n " modules" + /sbin/rmmod ds + /sbin/rmmod $PCIC + /sbin/rmmod pcmcia_core + fi + echo "." + rm -f /var/lock/pcmcia.lock + EXITCODE=0 + ;; + + status) + pid=`/bin/pidof cardmgr` + if [ "$pid" != "" ] ; then + echo "cardmgr (pid $pid) is running..." + EXITCODE=0 + else + echo "cardmgr is stopped" + EXITCODE=3 + fi + ;; + + restart) + $0 stop + $0 start + EXITCODE=$? + ;; + + reload|force-reload) + echo "Reloading $DESC configuration files." + kill -1 `cat /var/run/cardmgr.pid` 2>/dev/null + EXITCODE=0 + ;; + + *) + usage + ;; + + esac + +done + +# Only exit if we're in our own subshell +case $0 in *pcmcia) exit $EXITCODE ;; esac |