summaryrefslogtreecommitdiff
path: root/sources/target_skeleton/etc/init.d/S30pcmcia
blob: 0b14338f3edeff998948b7a9dbefb9749df5e177 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
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