1#!/bin/bash
2# Intel MIC Platform Software Stack (MPSS)
3#
4# Copyright(c) 2013 Intel Corporation.
5#
6# This program is free software; you can redistribute it and/or modify
7# it under the terms of the GNU General Public License, version 2, as
8# published by the Free Software Foundation.
9#
10# This program is distributed in the hope that it will be useful, but
11# WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13# General Public License for more details.
14#
15# The full GNU General Public License is included in this distribution in
16# the file called "COPYING".
17#
18# Intel MIC User Space Tools.
19#
20# mpss	Start mpssd.
21#
22# chkconfig: 2345 95 05
23# description: start MPSS stack processing.
24#
25### BEGIN INIT INFO
26# Provides: mpss
27# Required-Start:
28# Required-Stop:
29# Short-Description: MPSS stack control
30# Description: MPSS stack control
31### END INIT INFO
32
33# Source function library.
34. /etc/init.d/functions
35
36exec=/usr/sbin/mpssd
37sysfs="/sys/class/mic"
38mic_modules="mic_host mic_x100_dma scif"
39
40start()
41{
42	[ -x $exec ] || exit 5
43
44	if [ "`ps -e | awk '{print $4}' | grep mpssd | head -1`" = "mpssd" ]; then
45		echo -e $"MPSSD already running! "
46		success
47		echo
48		return 0
49	fi
50
51	echo -e $"Starting MPSS Stack"
52	echo -e $"Loading MIC drivers:" $mic_modules
53
54	modprobe -a $mic_modules
55	RETVAL=$?
56	if [ $RETVAL -ne 0 ]; then
57		failure
58		echo
59		return $RETVAL
60	fi
61
62	# Start the daemon
63	echo -n $"Starting MPSSD "
64	$exec
65	RETVAL=$?
66	if [ $RETVAL -ne 0 ]; then
67		failure
68		echo
69		return $RETVAL
70	fi
71	success
72	echo
73
74	sleep 5
75
76	# Boot the cards
77	micctrl -b
78
79	# Wait till ping works
80	for f in $sysfs/*
81	do
82		count=100
83		ipaddr=`cat $f/cmdline`
84		ipaddr=${ipaddr#*address,}
85		ipaddr=`echo $ipaddr | cut -d, -f1 | cut -d\; -f1`
86		while [ $count -ge 0 ]
87		do
88			echo -e "Pinging "`basename $f`" "
89			ping -c 1 $ipaddr &> /dev/null
90			RETVAL=$?
91			if [ $RETVAL -eq 0 ]; then
92				success
93				break
94			fi
95			sleep 1
96			count=`expr $count - 1`
97		done
98		[ $RETVAL -ne 0 ] && failure || success
99		echo
100	done
101	return $RETVAL
102}
103
104stop()
105{
106	echo -e $"Shutting down MPSS Stack: "
107
108	# Bail out if module is unloaded
109	if [ ! -d "$sysfs" ]; then
110		echo -n $"Module unloaded "
111		success
112		echo
113		return 0
114	fi
115
116	# Shut down the cards.
117	micctrl -S
118
119	# Wait for the cards to go offline
120	for f in $sysfs/*
121	do
122		while [ "`cat $f/state`" != "ready" ]
123		do
124			sleep 1
125			echo -e "Waiting for "`basename $f`" to become ready"
126		done
127	done
128
129	# Display the status of the cards
130	micctrl -s
131
132	# Kill MPSSD now
133	echo -n $"Killing MPSSD"
134	killall -9 mpssd 2>/dev/null
135	RETVAL=$?
136	[ $RETVAL -ne 0 ] && failure || success
137	echo
138	return $RETVAL
139}
140
141restart()
142{
143	stop
144	sleep 5
145	start
146}
147
148status()
149{
150	micctrl -s
151	if [ "`ps -e | awk '{print $4}' | grep mpssd | head -n 1`" = "mpssd" ]; then
152		echo "mpssd is running"
153	else
154		echo "mpssd is stopped"
155	fi
156	return 0
157}
158
159unload()
160{
161	if [ ! -d "$sysfs" ]; then
162		echo -n $"No MIC_HOST Module: "
163		success
164		echo
165		return
166	fi
167
168	stop
169
170	sleep 5
171	echo -n $"Removing MIC drivers:" $mic_modules
172	modprobe -r $mic_modules
173	RETVAL=$?
174	[ $RETVAL -ne 0 ] && failure || success
175	echo
176	return $RETVAL
177}
178
179case $1 in
180	start)
181		start
182		;;
183	stop)
184		stop
185		;;
186	restart)
187		restart
188		;;
189	status)
190		status
191		;;
192	unload)
193		unload
194		;;
195	*)
196		echo $"Usage: $0 {start|stop|restart|status|unload}"
197		exit 2
198esac
199
200exit $?
201