#!/bin/sh
#
#    Copyright (c) 2016-2017 Brocade Communications Systems, Inc.
#    All rights reserved.
#
#    File name:   bladevershow.sh.in
#    Module name: diag/scripts
#
#    This file contains changes to support bladevershow on different platforms.
#


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,154,175,176,177,178,186,204"
	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

#
# cpid
#
# Retrieve the current Control Processor ID
#
cpid() {
	    sed -n -e 's/^Control.\+No: \([[:digit:]]\{1,\}\)$/\1/gp'
}

#
# 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`
CPID=`/sbin/sin | cpid`


otherhost(){
#        printf 10.0.0.$((5+$(othercp)))
	case ${SWBD##SWBD} in
	'62')
	    printf 127.1.1.$((8 - CPID % 2))
	    ;;
	'77')
	    printf 127.1.1.$((6 - CPID % 2))
	    ;;
	'141')
		printf 127.1.$((17 - CPID % 2)).$((17 - CPID % 2))
	    ;;
	'142')
		printf 127.1.$((15 - CPID % 2)).$((15 - CPID % 2))
	    ;;
	'165' | '166')
	    printf 127.3.1.$((2 -CPID % 2))
	    ;;
	*)
	    printf 10.0.0.$((6 - CPID % 2))
	    ;;
	esac
}




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 Wedge
if  [ $SWBD = "SWBD162" ] || [ $SWBD = "SWBD161" ] || [ $SWBD = "SWBD172" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    echo "FPGA version         0x`cat /proc/system/fpga_show_all | grep 0xfec000000: | cut -f2 -d " "`"
    echo ""
    exit 0
fi

# Support for TYR
if  [ $SWBD = "SWBD173" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    echo "MB FPGA version         0x`cat /proc/system/fpga_show_all | grep 0xfec000000: | cut -f2 -d " "`"
    echo "DC FPGA version         0x`cat /proc/system/fpga_show_all | grep 0xfec000000: | cut -f4 -d " "`"
    echo ""
    exit 0
fi

# Support for Chewbacca
if  [ $SWBD = "SWBD169" ] || [ $SWBD = "SWBD170" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    echo "FPGA version         0x`cat /proc/system/fpga_show_all | grep 0xfec000000: | cut -f2 -d " "`"
    echo "FPGA sub-version     0x`cat /proc/system/fpga_show_all | grep 0xfec000000: | cut -f10 -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" ] || [ $SWBD = "SWBD171" ]
then 
    echo ""
    case $SWBD in
    'SWBD148' | 'SWBD171') echo "Switch Name:      `chassisname`";
    ;;
    esac

    echo "=============================="
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    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

#Support for A-wing
if [ $SWBD = "SWBD178" ]
then
    /bin/cat /proc/fabos/blade/0/info | grep "bladeId"
    echo "=============================="
    fpga_ver=`cat /proc/system/fpga | grep "FPGA Revision" | awk '{print $3}'`
    echo "FPGA version:     0x$fpga_ver"
    lli_mux_ver=`cat /proc/system/fpga | grep "LLI Mux Revision" | awk '{print $4}'`
    echo "JTAG_LLI Mux version:  0x$lli_mux_ver"
    echo ""
    exit 0
fi

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

# 
# case statement common for bladevershow when issued with slot# or "all"
#
switch_case(){
if [ "$bladeid" = "50" ] || [ "$bladeid" = "175" ]
then
    # Get Active/Standby CP slot
    _cmd=`commandPath haShow`
    _active_cp=`$_cmd | grep Local | grep -e Active | cut -f4 -d " " | cut -b1`
else
    #enable proc entry for slot
    enableSlotProc $slot
    if [ $? != 0 ] ; then exit 3 ; fi
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  Modelname: $blademodelname" 
    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 ""
    ;;
50)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    # Zentron CP0 is present in Slot 4 for Pluto and Slot 6 for Neptune
    # Zentron CP1 is present in Slot 5 for Pluto and Slot 7 for Neptune
    if [ "$_active_cp" = "$slot" ]
    then
        if [ "$slot" = "4" ] || [ "$slot" = "6" ]
        then
            echo "FPGA version         0x`/bin/cat /proc/cp0/fpga | grep 0x0f8000000: | cut -f3 -d " "`"
            echo "CPLD version         0x`/bin/cat /proc/cp0/fpga | grep 0x0f8000080: | cut -f3 -d " "`"
        elif [ "$slot" = "5" ] || [ "$slot" = "7" ]
        then
            echo "FPGA version         0x`/bin/cat /proc/cp1/fpga | grep 0x0f8000000: | cut -f3 -d " "`"
            echo "CPLD version         0x`/bin/cat /proc/cp1/fpga | grep 0x0f8000080: | cut -f3 -d " "`"
        fi
    else
		#Standby CP
        if [ "$slot" = "4" ] || [ "$slot" = "6" ]
        then
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "FPGA version         0x$(grep 0x0f8000000: /proc/cp0/fpga | cut -f3 -d " ")"'
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "CPLD version         0x$(grep 0x0f8000080: /proc/cp0/fpga | cut -f3 -d " ")"'
        elif [ "$slot" = "5" ] || [ "$slot" = "7" ]
        then
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "FPGA version         0x$(grep 0x0f8000000: /proc/cp1/fpga | cut -f3 -d " ")"'
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "CPLD version         0x$(grep 0x0f8000080: /proc/cp1/fpga | cut -f3 -d " ")"'
        fi
    fi
    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"
    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 Modelname: $blademodelname"
	echo "==========================================="
    /bin/cat /proc/fabos/blade/$slot/info | grep "BP FPGA Version"
    echo ""
    ;;

175)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    # Lando CP0 and CP1 are present in Slots 1 and 2 respectively
    # in case of Allegiance and Venator
	# FPGA base address for Gen6 CP is 0xffec000000

    if [ "$_active_cp" = "$slot" ]
    then
        if [ "$slot" = "1" ]
        then
            echo "FPGA version         0x`/bin/cat /proc/cp0/fpga | grep 0xffec000000: | cut -f3 -d " "`"
            echo "FPGA sub-version     0x`/bin/cat /proc/cp0/fpga | grep 0xffec000030: | cut -f5 -d " "`"
        elif [ "$slot" = "2" ]
        then
           echo "FPGA version         0x` /bin/cat /proc/cp1/fpga | grep 0xffec000000: | cut -f3 -d " "`"
           echo "FPGA sub-version     0x`/bin/cat /proc/cp1/fpga | grep 0xffec000030: | cut -f5 -d " "`"
        fi
    else
		#Standby CP
		if [ "$slot" = "1" ]
		then
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "FPGA version         0x$(grep 0xffec000000: /proc/cp0/fpga | cut -f3 -d " ")"'
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "FPGA sub-version     0x$(grep 0xffec000030: /proc/cp0/fpga | cut -f5 -d " ")"'
		elif [ "$slot" = "2" ]
		then
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "FPGA version         0x$(grep 0xffec000000: /proc/cp1/fpga | cut -f3 -d " ")"'
			/usr/bin/rsh -n -l root $(otherhost) '/bin/echo "FPGA sub-version     0x$(grep 0xffec000030: /proc/cp1/fpga | cut -f5 -d " ")"'
		fi
   	fi
    echo ""
    ;;

176)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    echo "`/bin/cat /proc/fabos/blade/$slot/info | grep cpld`"
    echo ""
	# disable the proc entries of this slot
    disableSlotProc $slot
    ;;

177)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    echo "`/bin/cat /proc/fabos/blade/$slot/info | grep cpld`"
    echo ""
	# disable the proc entries of this slot
    disableSlotProc $slot
    ;;

178)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    echo "`/bin/cat /proc/fabos/blade/$slot/info | grep cpld`"
    echo ""
	# disable the proc entries of this slot
    disableSlotProc $slot
    ;;

186)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    echo "`/bin/cat /proc/fabos/blade/$slot/info | grep cpld`"
    echo ""
	# disable the proc entries of this slot
    disableSlotProc $slot
    ;;


204)
    echo "Slot# $slot BladeID: $bladeid  Modelname: $blademodelname" 
    echo "==========================================="
    echo "`/bin/cat /proc/fabos/blade/$slot/info | grep cpld`"
    echo ""
	# disable the proc entries of this slot
    disableSlotProc $slot
    ;;

*)
     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="/fabos/cliexec/slotshow -m"
	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 " "`
		blademodelname=`echo $slot_info | cut -f5 -d " "`
		faulty=`echo $slot_info | cut -f6 -d " "`
		not_powered_on=`echo $slot_info | cut -f7- -d " " | cut -d "(" -f1`;
		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
		elif [ "$faulty" == "FAULTY" ]; then
			echo "Slot# $1 is faulty"
			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" != "50" -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" -a "$is_ap" != "175" -a "$is_ap" != "176" -a "$is_ap" != "177" -a "$is_ap" != "178" -a "$is_ap" != "186" -a "$is_ap" != "204" ] ; 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 "UNKNOWN" | while read line
		do
			bladeid=`echo $line | cut -f4 -d " "`; 
			slot=`echo $line | cut -f1 -d " "`; 
			blademodelname=`echo $line | cut -f5 -d " "`;
			faulty=`echo $line | cut -f6 -d " "`;
			not_powered_on=`echo $line | cut -f7- -d " " | cut -d "(" -f1`;
			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
