#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
print_usage()
{
	echo "  Usage: bladevershow slot# | all"
	echo "  Note this command is applicable only for blade ID 17,18,24,31,33,36,37,39,46,51,52,55,69,74,75,77,96,97,98,99,100,120,125,126,153"
	echo "  Run slotshow(slotshow -d576 for pizzabox) command to find out blade ID"
}
# Check RBAC permission on command
/fabos/libexec/rbac_check `/bin/basename $0`

if [ $? -ne 0 ]; then
    exit 127
fi
#
#
# Load library -- must be first.
#
home="/fabos/share"
util="diagcommon.sh"
ok=0

for f in "./$util" "$FABOSHOME/share/$util" "$home/$util" ; do
	if [ -r $f ] ; then
		. $f
		ok=1
		break;
	fi
done
if [ $ok -ne 1 ] ; then
	echo "Error -- could not locate $util"
	exit 3
fi


#
# swbd
#
# Retrieve the current system platform name, of the form "SWBDn", where n
# is cardinal number, assuming a sin/hinv input stream.
#
swbd() {
	/bin/sed -n -e 's/^.\+\(SWBD[[:digit:]]\{1,\}\).\+$/\1/gp'	
}


if [ "$1" = "help" ] ; then
	print_usage;
	exit 0
fi

#
# Platform check
#
SWBD=`/sbin/sin | swbd`

if [ $SWBD = "SWBD76" ]
# Elara
then
	/bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
	echo "FPGA version         0x`cat /proc/system/fpga | grep 0x0f8000000: | cut -f2 -d " "`"
	echo "Zeus pci_revision    `db 0/1/0 dbg show pci | grep pci_revision | cut -f2 -d ":"`"
    echo ""
	exit 0
fi
# Support for Stinger, Tom-2
if [ $SWBD = "SWBD109" ] || [ $SWBD = "SWBD118" ] || [ $SWBD = "SWBD129" ] || [ $SWBD = "SWBD130" ] || [ $SWBD = "SWBD149" ] || [ $SWBD = "SWBD150" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    echo "FPGA version         0x`cat /proc/system/fpga | grep 0x11f8000000: | cut -f2 -d " "`"
    echo ""
    exit 0
fi
# Support for Odin
if  [ $SWBD = "SWBD133" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    echo "FPGA version         0x`cat /proc/system/fpga | grep 0x0f8000000: | cut -f2 -d " "`"
    echo ""
    exit 0
fi
# Support for Pharos
if [ $SWBD = "SWBD117" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    echo "FPGA version         0x`cat /proc/system/fpga | grep 0x11f8000000: | cut -f2 -d " "`"
    echo ""
    exit 0
fi

if [ $SWBD = "SWBD148" ]
then 
    echo ""
    case $SWBD in
    'SWBD148') echo "Switch Name:      `chassisname`";
    ;;
    esac

    echo "=============================="
    fpga_ver=`cat /proc/system/fpga | grep "FPGA Revision" | awk '{print $3}'`
    echo "FPGA version:     0x$fpga_ver"

    eth_lli_ver=`cat /proc/system/fpga | grep "ETH LLI Revision" | awk '{print $4}'`
    echo "ETH LLI version:  0x$eth_lli_ver"

    fc_lli_ver=`cat /proc/system/fpga | grep "FC LLI Revision" | awk '{print $4}'`
    echo "FC LLI version:   0x$fc_lli_ver"

    jtag_lli_ver=`cat /proc/system/fpga | grep "JTAG Revision" | awk '{print $3}'`
    echo "JTAG Revision:    0x$jtag_lli_ver"

    echo ""
    exit 0
fi

if [ $SWBD != "SWBD42" ] && [ $SWBD != "SWBD46" ] && [ $SWBD != "SWBD62" ] && [ $SWBD != "SWBD77" ] && [ $SWBD != "SWBD83" ] && [ $SWBD != "SWBD141" ] && [ $SWBD != "SWBD142" ] ; then
	echo "Not supported for this platform"
	exit 0
fi

# 
# case statement common for bladevershow when issued with slot# or "all"
#
switch_case(){
#enable proc entry for slot
enableSlotProc $slot
if [ $? != 0 ] ; then exit 3 ; fi
case $bladeid in
24)
	#print BP cpld version
    echo "Slot# $slot BladeID: $bladeid" 
    echo "=============================="
	echo "BP CPLD VERSION:"
	echo "================"
	/bin/cat /proc/fabos/blade/$slot/info | grep "version"
	echo ""

	#print pinball versions
	echo "PINBALL 0"
	echo "========="
	/bin/cat /proc/fabos/blade/$slot/0/1/reg | grep "rev_pinball" 
	echo "PINBALL 1"
	echo "========="
	/bin/cat /proc/fabos/blade/$slot/1/1/reg | grep "rev_pinball" 
	echo ""

	#print FCIP versions
	echo "FCIP 0"
	echo "========="
	/bin/cat /proc/fabos/blade/$slot/0/2/reg | grep "rev_"
	echo "FCIP 1"
	echo "========="
	/bin/cat /proc/fabos/blade/$slot/1/2/reg | grep "rev_" 
    echo ""
	;;
	# disable the proc entries of this slot
	#	disableSlotProc $slot
31)
	#print pld version
    echo "Slot# $slot BladeID: $bladeid" 
    echo "=============================="
	/bin/cat /proc/fabos/blade/$slot/info | grep "FPGA version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "JTAGMux version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "IFlipper sub version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "Ironman CPLD version"
	echo "BP versions"
	echo "==========="
	/bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Release version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Revision"
	/bin/cat /proc/fabos/blade/$slot/info | grep "BP JTAG MUX version"
    echo ""
	;;
17|18|24|36|37|39|46|55|52|51|33|77|96|97|98|99|125|126|153)
    echo "Slot# $slot BladeID: $bladeid" 
    echo "=============================="
    /bin/cat /proc/fabos/blade/$slot/info | grep "version"
    echo ""
	# disable the proc entries of this slot
    disableSlotProc $slot
	;;
43)
    #print pld version
    echo "Slot# $slot BladeID: $bladeid" 
    echo "=============================="
    /bin/cat /proc/fabos/blade/$slot/info | grep -a "FPGA version"
    /bin/cat /proc/fabos/blade/$slot/info | grep -a "JTAGMux version"
    /bin/cat /proc/fabos/blade/$slot/info | grep -a "pld_vers_1"
    echo ""
    ;;
69)
    echo "Slot# $slot BladeID: $bladeid"
    echo "CP SYSTEM FPGA Version:" `/bin/cat /proc/system/fpga | head -2 | tail -1 | cut -f 3 --d ' '`
    /bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Version"
    /bin/cat /proc/fabos/blade/$slot/info | grep "JTAG MUX Version" 
    /bin/cat /proc/fabos/blade/$slot/info | grep "LLI DEMUX Version"
    msg=$(/bin/cat /proc/fabos/blade/$slot/info | grep "Blaster Image Version")
    if [ "$msg" == "" ]
    then
        echo "Blaster Image Version: Not Available"
    else
        echo $msg
    fi

    echo ""
        ;;

74)
	#print pld version
    echo "Slot# $slot BladeID: $bladeid" 
    echo "=============================="
	/bin/cat /proc/fabos/blade/$slot/info | grep "FPGA version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "JTAGMux version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Release version"
	/bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Revision"
	/bin/cat /proc/fabos/blade/$slot/info | grep "BP JTAG MUX version"
	echo "Zeus pci_revision    `db 9/1/0 dbg show pci | grep pci_revision | cut -f2 -d ":"`"
    echo ""
	;;

75)
    echo "Slot# $slot BladeID: $bladeid"
    /bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Version"
    msg=$(/bin/cat /proc/fabos/blade/$slot/info | grep "Blaster Image Version")
    if [ "$msg" == "" ]
    then
    	echo "Blaster Image Version: Not Available"
    else
	echo $msg
    fi
    echo ""
       	;;
*)
     echo "Slot# $slot BladeID: $bladeid is not supported"
     echo ""
esac
}

#
# get sys info for multi blade
#
multiBlade=`isMultiBlade`
if [ $multiBlade = TRUE ]
then
	if [ $# -eq 0 -o $# -gt 1 ] ; then
		/bin/echo "  !!!!Invalid arguments"
		print_usage;
		exit 0
	fi
	
	_cmd=`commandPath slotshow`
	if [ "$1" != "all" ]; then
		let line_no=$1+3;
		slot_info=`$_cmd | tail -n +$line_no | head -n1`
		is_ap=`echo $slot_info | cut -f4 -d " "`
		vacant=`echo $slot_info | cut -f3 -d " "`
        not_powered_on=`echo $slot_info | cut -f6- -d " "`;
		if [ "$vacant" == "VACANT" ]; then
			echo "$1 is $vacant"
			echo ""
			exit 0
        elif [ "$not_powered_on" == "NOT POWERED ON" ]; then
            echo "Slot# $1 NOT POWERED ON"
            echo ""
            exit 0
		fi
		if [ "$is_ap" != "24" -a "$is_ap" != "31" -a "$is_ap" != "33" -a "$is_ap" != "37" -a "$is_ap" != "17" -a "$is_ap" != "18" -a "$is_ap" != "36" -a "$is_ap" != "39" -a "$is_ap" != "43" -a "$is_ap" != "46" -a "$is_ap" != "52" -a "$is_ap" != "51" -a "$is_ap" != "55" -a "$is_ap" != "74" -a "$is_ap" != "75" -a "$is_ap" != "77" -a "$is_ap" != "96" -a "$is_ap" != "97" -a "$is_ap" != "98" -a "$is_ap" != "99" -a "$is_ap" != "125" -a "$is_ap" != "126" -a "$is_ap" != "153" ] ; then

			print_usage;
			exit 0
		fi
		slot=$1
		bladeid=$is_ap;
		switch_case;
	else #if (all slots)
		$_cmd | grep -v Slot | grep -v "\-\-\-\-" | grep -v ^$ | grep -v "CP BLADE" | grep -v "UNKNOWN" | while read line
		do
			bladeid=`echo $line | cut -f4 -d " "`; 
			slot=`echo $line | cut -f1 -d " "`; 
			faulty=`echo $line | cut -f5 -d " "`;
            not_powered_on=`echo $line | cut -f6- -d " "`;
			if [ "$faulty" == "FAULTY" ]; then
				echo "Slot: $slot is faulty"
            elif [ "$not_powered_on" == "NOT POWERED ON" ]; then
                echo "Slot# $slot NOT POWERED ON"
			else
				switch_case;
			fi
		done
	fi # if (all slots)
else
	if [ $# -eq 0 -o $# -gt 1 ] ; then
                /bin/echo "  !!!!Invalid arguments"
                print_usage;
                exit 0
        fi
	if [ "$1" != "all" ] && [ "$1" != 0 ] ; then
		print_usage
		exit 0
	fi

	slot_info=`slotshow -d576 | head -4 | tail -1`
        is_ap=`echo $slot_info | cut -f4 -d " "`
        vacant=`echo $slot_info | cut -f5 -d " "`
	if [ "$vacant" == "FLTY" ]; then
                        echo "$1 is $vacant"
                        echo ""
                        exit 0
    fi
	if [ "$is_ap" != "69" ] ; then
		print_usage
		exit 0
	fi
	slot=0
	bladeid=$is_ap;
        switch_case;

fi
