| #!/bin/bash | 
 | # Intel MIC Platform Software Stack (MPSS) | 
 | # | 
 | # Copyright(c) 2013 Intel Corporation. | 
 | # | 
 | # This program is free software; you can redistribute it and/or modify | 
 | # it under the terms of the GNU General Public License, version 2, as | 
 | # published by the Free Software Foundation. | 
 | # | 
 | # This program is distributed in the hope that it will be useful, but | 
 | # WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 
 | # General Public License for more details. | 
 | # | 
 | # The full GNU General Public License is included in this distribution in | 
 | # the file called "COPYING". | 
 | # | 
 | # Intel MIC User Space Tools. | 
 | # | 
 | # micctrl - Controls MIC boot/start/stop. | 
 | # | 
 | # chkconfig: 2345 95 05 | 
 | # description: start MPSS stack processing. | 
 | # | 
 | ### BEGIN INIT INFO | 
 | # Provides: micctrl | 
 | ### END INIT INFO | 
 |  | 
 | # Source function library. | 
 | . /etc/init.d/functions | 
 |  | 
 | sysfs="/sys/class/mic" | 
 |  | 
 | _status() | 
 | { | 
 | 	f=$sysfs/$1 | 
 | 	echo -e $1 state: "`cat $f/state`" shutdown_status: "`cat $f/shutdown_status`" | 
 | } | 
 |  | 
 | status() | 
 | { | 
 | 	if [ "`echo $1 | head -c3`" == "mic" ]; then | 
 | 		_status $1 | 
 | 		return $? | 
 | 	fi | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		_status `basename $f` | 
 | 		RETVAL=$? | 
 | 		[ $RETVAL -ne 0 ] && return $RETVAL | 
 | 	done | 
 | 	return 0 | 
 | } | 
 |  | 
 | _reset() | 
 | { | 
 | 	f=$sysfs/$1 | 
 | 	echo reset > $f/state | 
 | } | 
 |  | 
 | reset() | 
 | { | 
 | 	if [ "`echo $1 | head -c3`" == "mic" ]; then | 
 | 		_reset $1 | 
 | 		return $? | 
 | 	fi | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		_reset `basename $f` | 
 | 		RETVAL=$? | 
 | 		[ $RETVAL -ne 0 ] && return $RETVAL | 
 | 	done | 
 | 	return 0 | 
 | } | 
 |  | 
 | _boot() | 
 | { | 
 | 	f=$sysfs/$1 | 
 | 	echo "linux" > $f/bootmode | 
 | 	echo "mic/uos.img" > $f/firmware | 
 | 	echo "mic/$1.image" > $f/ramdisk | 
 | 	echo "boot" > $f/state | 
 | } | 
 |  | 
 | boot() | 
 | { | 
 | 	if [ "`echo $1 | head -c3`" == "mic" ]; then | 
 | 		_boot $1 | 
 | 		return $? | 
 | 	fi | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		_boot `basename $f` | 
 | 		RETVAL=$? | 
 | 		[ $RETVAL -ne 0 ] && return $RETVAL | 
 | 	done | 
 | 	return 0 | 
 | } | 
 |  | 
 | _shutdown() | 
 | { | 
 | 	f=$sysfs/$1 | 
 | 	echo shutdown > $f/state | 
 | } | 
 |  | 
 | shutdown() | 
 | { | 
 | 	if [ "`echo $1 | head -c3`" == "mic" ]; then | 
 | 		_shutdown $1 | 
 | 		return $? | 
 | 	fi | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		_shutdown `basename $f` | 
 | 		RETVAL=$? | 
 | 		[ $RETVAL -ne 0 ] && return $RETVAL | 
 | 	done | 
 | 	return 0 | 
 | } | 
 |  | 
 | _wait() | 
 | { | 
 | 	f=$sysfs/$1 | 
 | 	while [ "`cat $f/state`" != "offline" -a "`cat $f/state`" != "online" ] | 
 | 	do | 
 | 		sleep 1 | 
 | 		echo -e "Waiting for $1 to go offline" | 
 | 	done | 
 | } | 
 |  | 
 | wait() | 
 | { | 
 | 	if [ "`echo $1 | head -c3`" == "mic" ]; then | 
 | 		_wait $1 | 
 | 		return $? | 
 | 	fi | 
 | 	# Wait for the cards to go offline | 
 | 	for f in $sysfs/* | 
 | 	do | 
 | 		_wait `basename $f` | 
 | 		RETVAL=$? | 
 | 		[ $RETVAL -ne 0 ] && return $RETVAL | 
 | 	done | 
 | 	return 0 | 
 | } | 
 |  | 
 | if [ ! -d "$sysfs" ]; then | 
 | 	echo -e $"Module unloaded " | 
 | 	exit 3 | 
 | fi | 
 |  | 
 | case $1 in | 
 | 	-s) | 
 | 		status $2 | 
 | 		;; | 
 | 	-r) | 
 | 		reset $2 | 
 | 		;; | 
 | 	-b) | 
 | 		boot $2 | 
 | 		;; | 
 | 	-S) | 
 | 		shutdown $2 | 
 | 		;; | 
 | 	-w) | 
 | 		wait $2 | 
 | 		;; | 
 | 	*) | 
 | 		echo $"Usage: $0 {-s (status) |-r (reset) |-b (boot) |-S (shutdown) |-w (wait)}" | 
 | 		exit 2 | 
 | esac | 
 |  | 
 | exit $? |