#!/bin/bash
##
# Copyright (c) 2020 - 2021 Xilinx, Inc. and Contributors. All rights reserved.
#
# SPDX-License-Identifier: MIT
##

while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -v|--extension)
    shift # past argument
    shift # past value
    ;;
    -c|--searchpath)
    if [ $2 == "version" ]
    then 
    echo "Version:        1.1
Linux:          5.4.0 (Compatible)
BSP:            v2020.1 (Compatible)"
    fi
    if [ $2 == "listvoltage" ]
    then
        echo "VCCINT
VCCINT_SOC
VCCINT_PSLP
VCCINT_PSFP
VCCAUX
VCC_RAM
VCC_PMC
VCCO_MIO
VCC3V3
VCC1V8
VCCAUX_PMC
MGTYAVTT
VADJ_FMC
MGTYAVCC
UTIL_1V13
UTIL_2V5
VCC1V2_DDR4
VCC1V1_LP4"
    fi
    if [ $2 == "listgpio" ]
    then 
        echo "500 - SYSCTLR_PB
500 - DC_SYS_CTRL3
500 - DC_SYS_CTRL2
500 - DC_SYS_CTRL1
500 - DC_SYS_CTRL0
501 - SYSCTLR_SD1_CLK
501 - SYSCTLR_SD1_CMD
501 - SYSCTLR_SD1_DATA3
501 - SYSCTLR_SD1_DATA2
501 - SYSCTLR_SD1_DATA1
501 - SYSCTLR_SD1_DATA0
501 - SYSCTLR_SD1_CD_B
501 - SYSCTLR_ETH_RESET_B_R
501 - SYSCTLR_UART0_TXD_OUT
501 - SYSCTLR_UART0_RXD_IN
501 - LP_I2C1_SDA
501 - LP_I2C1_SCL
501 - LP_I2C0_PMC_SDA
501 - LP_I2C0_PMC_SCL
502 - SYSCTLR_ETH_MDIO
502 - SYSCTLR_ETH_MDC"
    fi

    if [ $2 == "listQSFP" ]
    then
        echo "zQSFP1"
    fi
    if [ $2 == "listSFP" ]
    then
        echo "zSFP-0
zSFP-1"
    fi
    if [ $2 == "listFMC" ]
    then
       echo "FMC1 - XILINX FMC-XM119-PMOD
FMC2 - Samtec FMC+ Loopback"
    fi

    if [ $2 == "listpower" ]
    then
        echo "VCCINT
VCC_SOC
VCC_PMC
VCCINT_RAM
VCCINT_PSLP
VCCINT_PSFP
VCCAUX
VCCAUX_PMC
VCC_MIO
VCC1V8
VCC3V3
VCC1V2_DDR4
VCC1V1_LP4
VADJ_FMC
MGTYAVCC
MGTYAVTT
MGTYVCCAUX"
    fi
    if [ $2 == "listpowerdomain" ]
    then
echo "FPD
LPD
PLD
PMC
GTY
FMC
system
chip"
     fi
        if [ $2 == "eeprom" ]
    then
echo "Language: 0
Silicon Revision: PROD
Manufacturing Date: Sat Sep 26 14:30:00 2020
Manufacturer: XILINX
Product Name: VCK190
Board Serial Number: 80500501b016
Board Part Number: 043123456
Board Revision: REV_B01
MAC Address 0: 0:a:35:7:2d:74
MAC Address 1: 0:a:35:7:2d:75 
"
    fi
    if [ $2 == "geteeprom" ]
    then 
    if [ $4 == "all" ]
    then
    echo "00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"
    fi
    if [ $4 == "common" ]
    then
    echo "0x00 - Version: 01
0x01 - Internal User Area: 00
0x02 - Chassis Info Area: 00
0x03 - Board Area: 01
0x04 - Product Info Area: 00
0x05 - Multi Record Area: 0a
0x06 - Pad and Check sum: 00 f4
"
    fi
    if [ $4 == "board" ]
    then
    echo "0x08 - Version: 01
0x09 - Length: 0c
0x0A - Language Code: 00
0x0B - Manufacturing Date: Mon Nov 16 23:02:00 2020
0x0F - Manufacturer: XILINX
0x16 - Product Name: VMK180
0x27 - Serial Number: 812044124725
0x38 - Part Number: 043123456
0x42 - FRU ID: 00
0x44 - Revision: REV_B01
0x4D - PCIe Info: 10ee000000000000
0x56 - UUID: 9f7072b1-c104-4601-81e1-95f0e7876e93
0x66 - EoR and Check sum: c1 73
"
    fi
    if [ $4 == "multirecord" ]
    then
    echo "0x68 - Record Type: d2 (Mac ID)
0x69 - Record Format: 02
0x6a - Length: 0a
0x6b - Record Check sum: b7
0x6c - Header Check sum: 6b
0x6d - Xilinx IANA ID: da1000
0x70 - Version Number: 11 (SC Mac ID)
0x71 - Mac ID 0: 00:0a:35:07:31:d7

0x77 - Record Type: d2 (Mac ID)
0x78 - Record Format: 82
0x79 - Length: 10
0x7a - Record Check sum: 46
0x7b - Header Check sum: 56
0x7c - Xilinx IANA ID: da1000
0x7f - Version Number: 31 (Veral Mac ID)
0x80 - Mac ID 0: 00:0a:35:07:31:d8
0x86 - Mac ID 1: 00:0a:35:07:31:d9
"
    fi


    fi

    if [ $2 == "getFMC" ]
    then 
    if [ $6 == "all" ]
    then
    echo "     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 00 00 00 01 00 0a 00 f4 01 0c 00 38 67 c1 c6 58
10: 49 4c 49 4e 58 d0 46 4d 43 2d 58 4d 31 31 39 2d
20: 50 4d 4f 44 00 00 d0 31 31 34 38 30 33 00 00 00
30: 00 00 00 00 00 00 00 c9 30 00 00 00 00 00 00 00
40: 00 01 00 c8 42 00 00 00 00 00 00 00 c1 00 00 bb
50: 02 02 0d ad 42 00 78 00 78 00 96 00 64 00 05 00
60: 64 00 02 02 0d 33 bc 01 4a 01 39 01 5b 01 64 00
70: 0f 00 76 02 02 02 0d 4a a5 02 b0 04 00 00 00 00
80: 00 00 00 00 00 00 01 02 0d fd f3 03 00 00 00 00
90: 00 00 00 00 00 00 00 00 01 02 0d fc f4 04 00 00
a0: 00 00 00 00 00 00 00 00 00 00 01 02 0d fb f5 05
b0: 00 00 00 00 00 00 00 00 00 00 00 00 fa 82 0b f5
c0: 84 00 12 a2 00 0c 19 00 00 00 00 32 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
"
    fi 
    if [ $6 == "common" ]
    then
    echo "0x00 - Version: 00
0x01 - Internal User Area:      00
0x02 - Chassis Info Area:       00
0x03 - Board Area:      01
0x04 - Product Info Area:       00
0x05 - Multi Record Area:       0a
0x06 - Pad and Check sum:       00 f4"
    fi 
    if [ $6 == "board" ]
    then
    echo "0x08 - Version: 01
0x09 - Length:  0c
0x0A - Language Code:   00
0x0B - Manufacturing Date:      Wed Feb  5 23:52:00 2020
0x0f - Manufacturer:    XILINX
0x16 - Product Name:    FMC-XM119-PMOD
0x27 - Serial Number:   114803
0x38 - Part Number:     0
0x41 - FRU ID:  00
0x44 - Revision:        B
0x4c - EoR, Pad, Check sum:     c1 0000 bb"
    fi 
    if [ $6 == "multirecord" ]
    then
    echo "0x50 - Record Type:     02 (DC Load)
0x51 - Record Format:   02
0x52 - Length:  0d
0x53 - Record Check sum:        ad
0x54 - Header Check sum:        42
0x55 - Output Number:   00 (Voltage Adjust)
0x56 - Nominal Voltage: 7800 (1.20V)
0x58 - Spec'd Min Voltage:      7800 (1.20V)
0x5a - Spec'd Max Voltage:      9600 (1.50V)
0x5c - Spec'd Ripple Noise:     6400 (100mV)
0x5e - Min Current Load:        0500 (5mA)
0x60 - Max Current Load:        6400 (100mA)

0x62 - Record Type:     02 (DC Load)
0x63 - Record Format:   02
0x64 - Length:  0d
0x65 - Record Check sum:        33
0x66 - Header Check sum:        bc
0x67 - Output Number:   01 (Power Rail)
0x68 - Nominal Voltage: 4a01 (3.30V)
0x6a - Spec'd Min Voltage:      3901 (3.13V)
0x6c - Spec'd Max Voltage:      5b01 (3.47V)
0x6e - Spec'd Ripple Noise:     6400 (100mV)
0x70 - Min Current Load:        0f00 (15mA)
0x72 - Max Current Load:        7602 (630mA)

0x74 - Record Type:     02 (DC Load)
0x75 - Record Format:   02
0x76 - Length:  0d
0x77 - Record Check sum:        4a
0x78 - Header Check sum:        a5
0x79 - Output Number:   02 (Power Rail)
0x7a - Nominal Voltage: b004 (12.00V)
0x7c - Spec'd Min Voltage:      0000 (0.00V)
0x7e - Spec'd Max Voltage:      0000 (0.00V)
0x80 - Spec'd Ripple Noise:     0000 (0mV)
0x82 - Min Current Load:        0000 (0mA)
0x84 - Max Current Load:        0000 (0mA)

0x86 - Record Type:     01 (DC Output)
0x87 - Record Format:   02
0x88 - Length:  0d
0x89 - Record Check sum:        fd
0x8a - Header Check sum:        f3
0x8b - Output Number:   03 (Power Rail)
0x8c - Nominal Voltage: 0000 (0.00V)
0x8e - Spec'd Min Voltage:      0000 (0.00V)
0x90 - Spec'd Max Voltage:      0000 (0.00V)
0x92 - Spec'd Ripple Noise:     0000 (0mV)
0x94 - Min Current Load:        0000 (0mA)
0x96 - Max Current Load:        0000 (0mA)

0x98 - Record Type:     01 (DC Output)
0x99 - Record Format:   02
0x9a - Length:  0d
0x9b - Record Check sum:        fc
0x9c - Header Check sum:        f4
0x9d - Output Number:   04 (Power Rail)
0x9e - Nominal Voltage: 0000 (0.00V)
0xa0 - Spec'd Min Voltage:      0000 (0.00V)
0xa2 - Spec'd Max Voltage:      0000 (0.00V)
0xa4 - Spec'd Ripple Noise:     0000 (0mV)
0xa6 - Min Current Load:        0000 (0mA)
0xa8 - Max Current Load:        0000 (0mA)

0xaa - Record Type:     01 (DC Output)
0xab - Record Format:   02
0xac - Length:  0d
0xad - Record Check sum:        fb
0xae - Header Check sum:        f5
0xaf - Output Number:   05 (Power Rail)
0xb0 - Nominal Voltage: 0000 (0.00V)
0xb2 - Spec'd Min Voltage:      0000 (0.00V)
0xb4 - Spec'd Max Voltage:      0000 (0.00V)
0xb6 - Spec'd Ripple Noise:     0000 (0mV)
0xb8 - Min Current Load:        0000 (0mA)
0xba - Max Current Load:        0000 (0mA)

0xbc - Record Type:     fa (Vita 57.1)
0xbd - Record Format:   82
0xbe - Length:  0b
0xbf - Record Check sum:        f5
0xc0 - Header Check sum:        84
0xc1 - Organizationally Unique Identifier:      0012a2
0xc4 - Subtype Version: 00
0xc5 - Connector Type:  0c
0xc6 - P1 Bank A Number Signals:        19
0xc7 - P1 Bank B Number Signals:        00
0xc8 - P2 Bank A Number Signals:        00
0xc9 - P2 Bank B Number Signals:        00
0xca - P1 GBT B Number Signals: 00
0xcb - Max Clock for TCK:       32 (50Mhz)
"
    fi 
    fi





        if [ $2 == "temperature" ]
        then
        echo "Temperature(C): 32.0"
    fi
        if [ $2 == "getioexp" ]
    then
        if [ $4 == "all" ]
        then
        echo "Input GPIO: 0x13bf
Output GPIO:    0x20
Direction:  0xffdf"
        fi
        if [ $4 == "input" ]
        then
        echo "Port 0(7) - MAX6643 FULLSPD:    0
Port 0(4) - PMBUS2 INA226 ALERT:    1
Port 0(1) - MAX6643 Fan Fail (AL):  1
Port 0(0) - MAX6643 Fan Over Temp (AL): 1
Port 1(7) - PMBUS1 INA226 Alert (AL):   1
Port 1(6) - PMBUS Alert (AL):   0
Port 1(4) - VCCINT VRHOT B (AL):    1
Port 1(3) - FMCP2 FMCP PRSNT M2C B (AL):    1
Port 1(2) - FMCP1 FMCP PRSNT M2C B (AL):    1
Port 1(1) - FMCP2 FMC PRSNT M2C B (AL): 1
Port 1(0) - FMCP1 FMC PRSNT M2C B (AL): 1"
        fi
        if [ $4 == "output" ]
        then
        echo "Port 1(5) - 8A34001_EXP_RST_B (AL): 1"
        fi
    fi
        if [ $2 == "getgpio" ]
    then
        echo "500 - SYSCTLR_PB (line 12): 0"
    fi
        if [ $2 == "getvoltage" ]
    then
        echo "Voltage(V):     0.78"
    fi
        if [ $2 == "powerdomain" ]
    then
        echo "Power(W):       0.0090"
    fi
        if [ $2 == "ddr" ]
    then
	if [ $4 == "spd" ]
        then
        echo "DDR4 SDRAM?     Yes
Size(Gb):       8
Temp. Sensor?   Yes"
        fi
	if [ $4 == "temp" ]
        then
        echo "Temperature(C): 32.44"
        fi
    fi
        if [ $2 == "getpower" ]
    then
        echo "Voltage(mV):     783
Current(mA):     312
Power(mW):       237"
    fi

        if [ $2 == "listclock" ]
    then
        echo "zSFP Si570
User1 FMC1 Si570
8A34001 FMC2
Versal Sys Clk Si570
Dimm1 Si570
LPDDR4 CLK1 Si570
LPDDR4 CLK2 Si570
HSPD Si570"
    fi
        if [ $2 == "getQSFP" ]
        then
            echo "Manufacturer:   Amphenol        
Part Number:    647080013       
Serial Number:  APF16120132A5E  
Internal Temperature(C):    0.000
Supply Voltage(V):  0.00
Alarms (Bytes 3-4): 0
Alarms (Bytes 6-7): 0
Alarms (Bytes 9-12):    0"
        fi
        if [ $2 == "getpwmQSFP" ]
        then
            echo "Register 98, bit7 +2.5w, bit6 +1.5w, bits5-0 up to 1.0w:    3"
        fi

        if [ $2 == "getpwmoQSFP" ]
        then
            echo "Register 93, 0 = use LPMode pin, 1 = hi pwr, 3 = low pwr:   1"
        fi

        if [ $2 == "getEBM" ]
        then
        if [ $4 == "all" ]
        then
            echo " a  b  c  d ff ff ff ff ff ff ff ff ff ff ff 58 49 4c 49 4e 58 ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff 4c 4d 4e 4f ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
ff ff ff ff ff ff "
        fi
        if [ $4 == "common" ]
        then
            echo "0x00 - Version: a
0x01 - Internal User Area:  b
0x02 - Chassis Info Area:   c
0x03 - Board Area:  d
0x04 - Product Info Area:   ff
0x05 - Multi Record Area:   ff
0x06 - Pad, Check Sum:  ff ff"
        fi
        if [ $4 == "board" ]
        then
            echo "0x08 - Version: ff
0x09 - Length:  ff
0x0A - Language Code:   ff
0x0B - Manufacturing Date:  Wed Nov 24 20:15:00 2027
0x0F - Manufacturer:    XILINX
0x16 - Product Name:    ����������������
0x27 - Serial Number:   ����������������
0x38 - Part Number: ���������
0x42 - FRU ID:  �
0x44 - Revision:    ��������
0x4C - EoF, Pad, Check Sum: 4c 4d4e 4f"
        fi
        if [ $4 == "multirecord" ]
        then
            echo "0x50 - Record Type: ff
0x51 - Record Format:   ff
0x52 - Length:  ff
0x53 - Record Check Sum:    ff
0x54 - Header Check Sum:    ff
0x55 - Xilinx IANA ID:  ffffff
0x58 - Field Name Identifier:   ��������"
        fi
        fi

        if [ $2 == "listbootmode" ]
    then
        echo "jtag	0x0
qspi24	0x1
qspi32	0x2
sd0_ls	0x3
sd1	0x5
emmc	0x6
usb	0x7
ospi	0x8
smap	0xa
dft	0xd
sd1_ls	0xe
"
    fi
        if [ $2 == "BIT" ]
    then
        echo "Check Clocks: PASS"
    fi
        if [ $2 == "listBIT" ]
    then
        echo "Check Clocks
Check Voltage"
    fi
        if [ $2 == "getpwmSFP" ]
    then
        echo "Power Mode(0-2W):   101"
    fi
        if [ $2 == "getSFP" ]
    then
        echo "Manufacturer:   MULTILANE-SAL   
Serial Number:  415             
Internal Temperature(C):    27.000
Supply Voltage(V):  3.30
Alarm:  0"
    fi
        if [ $2 == "getclock" ]
    then
        echo "Frequency(Hz):  156249999"
    fi


    shift # past argument
    shift # past value
    ;;
    -t|--lib)
    shift # past argument
    shift # past value
    ;;
    --default)
    DEFAULT=YES
    shift # past argument
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift # past argument
    ;;
esac
done
