33db298d70
* Update the Wistron platform support in master branch Signed-off-by: RogerX87 <RogerX87@gmail.com>
597 lines
15 KiB
Bash
Executable File
597 lines
15 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
debug_flag=0
|
|
port_map=('00' '10' '11' '12' '13' '14' '15' '16' '17' '18' '19' '1a' '1b' '1c' '1d' '1e' '1f' '20' '21' '22' '23' '24' '25' '26' '27' '28' '29' '2a' '2b' '2c' '2d' '2e' '2f')
|
|
|
|
port_init=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
|
|
|
|
port_sfp_type=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
|
|
|
|
board_ver=$(ipmitool raw 0x30 0x25 0x1 0xe0 0x1 0x0 1>/dev/null 2>/dev/null; echo $?) #error will get 1 means EVT, otherwise DVT
|
|
|
|
|
|
byte_hex_test()
|
|
{
|
|
if ! [[ $1 =~ ^[0-9A-Fa-f]{2}$ ]] ; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
pmon_status_check()
|
|
{
|
|
output=$( docker inspect -f '{{.State.Status}}' pmon 2>/dev/null)
|
|
if [ $? -eq 0 ]; then
|
|
if [ $output == 'running' ]; then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
#$1=mux $2=channel $3=dev_addr, $4=reg, $5=val
|
|
bmc_write()
|
|
{
|
|
if [ $board_ver == 1 ]; then
|
|
addr_8b=$(echo $(($3)) | awk '{printf $1}')
|
|
addr_8b=`expr $addr_8b \\* 2`
|
|
ipmitool raw 0x30 0x85 $1 $2 $addr_8b 2 $4 $5 1>>/dev/null 2>>/dev/null
|
|
sleep 1
|
|
ipmitool raw 0x30 0x87 1>>/dev/null 2>>/dev/null
|
|
else
|
|
pmon_status_check
|
|
if [ $? -eq 1 ]; then
|
|
while [ $(docker exec pmon bash -c 'if [ -e /tmp/pause_eeprom_polling ]; then echo 1; else echo 0; fi') == '1' ]; do
|
|
sleep 0.1;
|
|
done
|
|
fi
|
|
mux_addr=$(((0x70 + $1 - 2) * 2))
|
|
chan=$((1 << $2))
|
|
addr_8b=$(echo $(($3)) | awk '{printf $1}')
|
|
addr_8b=`expr $addr_8b \\* 2`
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 $chan 1>>/dev/null 2>>/dev/null
|
|
ipmitool raw 0x30 0x25 0x1 $addr_8b 0x0 $4 $5 1>>/dev/null 2>>/dev/null
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
fi
|
|
}
|
|
|
|
#$1=mux $2=channel $3=dev_addr, $4=reg, $5=len
|
|
bmc_read()
|
|
{
|
|
if [ $board_ver == 1 ]; then
|
|
addr_8b=$(echo $(($3)) | awk '{printf $1}')
|
|
addr_8b=`expr $addr_8b \\* 2`
|
|
ipmitool raw 0x30 0x86 $1 $2 $addr_8b $5 $4 1>>/dev/null 2>>/dev/null
|
|
sleep 1
|
|
val=$(ipmitool raw 0x30 0x87 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$val
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
else
|
|
mux_addr=$(((0x70 + $1 - 2) * 2))
|
|
chan=$((1 << $2))
|
|
addr_8b=$(echo $(($3)) | awk '{printf $1}')
|
|
addr_8b=`expr $addr_8b \\* 2`
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 $chan 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 $addr_8b $5 $4 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$val
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
return 1
|
|
else
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
return 0
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
bmc_dump()
|
|
{
|
|
err=0
|
|
mux_addr=$(((0x70 + $1 - 2) * 2))
|
|
chan=$((1 << $2))
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 $chan 1>>/dev/null 2>>/dev/null
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x0 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x0 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result1=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x80 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result2=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x1 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x80 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result3=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x2 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x80 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result4=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x3 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x80 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result5=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x10 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x80 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result6=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x11 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x80 0x80 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result7=$val
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
|
|
if [ $err -eq 0 ];then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
bmc_update_dynamic()
|
|
{
|
|
local port=$1
|
|
i2cmux_dev=0
|
|
i2cmux_dev=`expr $port / 8`
|
|
i2cmux_dev=`expr $i2cmux_dev + 2`
|
|
ch=`expr $port % 8`
|
|
|
|
if [ ${port_sfp_type[$port]} -eq 17 ]; then
|
|
err=0
|
|
mux_addr=$(((0x70 + $i2cmux_dev - 2) * 2))
|
|
chan=$((1 << $ch))
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 $chan 1>>/dev/null 2>>/dev/null
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x0 1>>/dev/null 2>>/dev/null
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x1 0x3 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$(echo $val | awk '{printf $1}')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/rx_los"
|
|
result=$( printf "%d" 0x$result )
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x1 0x4 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$(echo $val | awk '{printf $1}')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/tx_fault"
|
|
result=$( printf "%d" 0x$result )
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x1 0x56 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$(echo $val | awk '{printf $1}')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/disable"
|
|
result=$( printf "%d" 0x$result )
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x24 0x16 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$val
|
|
result=$(echo $result | sed 's/[[:space:]]//g')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/qsfp_dom_bulk"
|
|
result=$(echo $result | sed -e 's/ //g')
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
|
|
if [ $err -eq 0 ];then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
|
|
elif [ ${port_sfp_type[$port]} -eq 24 ]; then
|
|
err=0
|
|
mux_addr=$(((0x70 + $i2cmux_dev - 2) * 2))
|
|
chan=$((1 << $ch))
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 $chan 1>>/dev/null 2>>/dev/null
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x0 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x2 0xe 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$val
|
|
result=$(echo $result | sed 's/[[:space:]]//g')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/tempe"
|
|
result=$(echo $result | sed -e 's/ //g')
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x2 0x10 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$val
|
|
result=$(echo $result | sed 's/[[:space:]]//g')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/volte"
|
|
result=$(echo $result | sed -e 's/ //g')
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x10 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x1 0x82 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$(echo $val | awk '{printf $1}')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/disable"
|
|
result=$( printf "%d" 0x$result )
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 0xa0 0x0 0x7f 0x11 1>>/dev/null 2>>/dev/null
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x1 0x87 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$(echo $val | awk '{printf $1}')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/tx_fault"
|
|
result=$( printf "%d" 0x$result )
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x1 0x93 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$(echo $val | awk '{printf $1}')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/rx_los"
|
|
result=$( printf "%d" 0x$result )
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
val=$(ipmitool raw 0x30 0x25 0x1 0xa0 0x30 0x9a 2>>/dev/null)
|
|
if [ $? -eq 0 ];then
|
|
result=$val
|
|
result=$(echo $result | sed 's/[[:space:]]//g')
|
|
result_path="/sys/bus/i2c/devices/0-00"${port_map[$((port + 1))]}"/qsfp_dd_chan_mon"
|
|
result=$(echo $result | sed -e 's/ //g')
|
|
echo $result > $result_path
|
|
else
|
|
err=1
|
|
fi
|
|
|
|
ipmitool raw 0x30 0x25 0x1 $mux_addr 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
|
|
if [ $err -eq 0 ];then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
fi
|
|
}
|
|
|
|
#$1=port_no
|
|
bmc_qsfp_eeprom_read()
|
|
{
|
|
local port=$1
|
|
local eeprom_part1
|
|
local eeprom_part2
|
|
local eeprom_part3
|
|
local eeprom_part4
|
|
local eeprom_part5
|
|
local eeprom_part6
|
|
local eeprom_part7
|
|
local eeprom1_full
|
|
local eeprom2_full
|
|
local eeprom3_full
|
|
|
|
port=`expr $port - 1`
|
|
i2cmux_dev=0
|
|
i2cmux_dev=`expr $port / 8`
|
|
i2cmux_dev=`expr $i2cmux_dev + 2`
|
|
ch=`expr $port % 8`
|
|
if [ ${port_init[$port]} -eq 0 ]; then
|
|
if [ $board_ver == 1 ]; then
|
|
bmc_write $i2cmux_dev $ch 0x50 0x7f 0x00
|
|
bmc_read $i2cmux_dev $ch 0x50 0 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part1=$result
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
bmc_read $i2cmux_dev $ch 0x50 128 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part2=$result
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
#QSFP-DD page1
|
|
bmc_write $i2cmux_dev $ch 0x50 0x7f 0x01
|
|
bmc_read $i2cmux_dev $ch 0x50 128 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part3=$result
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
#QSFP-DD page2
|
|
bmc_write $i2cmux_dev $ch 0x50 0x7f 0x2
|
|
bmc_read $i2cmux_dev $ch 0x50 128 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part4=$result
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
#QSFP-DD page3
|
|
bmc_write $i2cmux_dev $ch 0x50 0x7f 0x3
|
|
bmc_read $i2cmux_dev $ch 0x50 128 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part5=$result
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
#QSFP-DD page10
|
|
bmc_write $i2cmux_dev $ch 0x50 0x7f 0x10
|
|
bmc_read $i2cmux_dev $ch 0x50 128 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part6=$result
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
#QSFP-DD page11
|
|
bmc_write $i2cmux_dev $ch 0x50 0x7f 0x11
|
|
bmc_read $i2cmux_dev $ch 0x50 128 128
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part7=$result
|
|
else
|
|
return 1
|
|
fi
|
|
else
|
|
#pmon_status_check
|
|
#if [ $? -eq 1 ]; then
|
|
# while [ $(docker exec pmon bash -c 'if [ -e /tmp/pause_eeprom_polling ]; then echo 1; else echo 0; fi') == '1' ]; do
|
|
# sleep 0.1;
|
|
# done
|
|
#fi
|
|
|
|
bmc_dump $i2cmux_dev $ch
|
|
if [ $? -eq 1 ];then
|
|
eeprom_part1=$result1
|
|
eeprom_part2=$result2
|
|
eeprom_part3=$result3
|
|
eeprom_part4=$result4
|
|
eeprom_part5=$result5
|
|
eeprom_part6=$result6
|
|
eeprom_part7=$result7
|
|
else
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ ${port_init[$port]} -eq 1 ]; then
|
|
|
|
eeprom1_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/eeprom1"
|
|
check=$(od -An -tx1 -w1 -v $eeprom1_path | head -n 1)
|
|
if [ $check != '00' ] && [ $check != 'ff' ] ; then
|
|
if [ -e /tmp/plugin_module_event ]; then
|
|
return
|
|
fi
|
|
|
|
bmc_update_dynamic $port
|
|
if [ $? -eq 0 ];then
|
|
return 1
|
|
fi
|
|
else
|
|
port_init[$port]=0
|
|
fi
|
|
fi
|
|
|
|
|
|
if [ ${port_init[$port]} -eq 0 ]; then
|
|
sfp_type=$(echo $eeprom_part1 | awk '{printf $1}')
|
|
byte_hex_test $sfp_type
|
|
if [ $? -eq 0 ]; then
|
|
return
|
|
fi
|
|
sfp_type=$( printf "%d" 0x$sfp_type )
|
|
port_sfp_type[$((i - 1))]=$sfp_type
|
|
#get temperature
|
|
if [ $sfp_type -eq 24 ];then
|
|
temp=$(echo $eeprom_part1 | awk '{printf $15}')
|
|
if [ $temp != "" ];then
|
|
temp=$( printf "%d" 0x$temp )
|
|
temp_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/temp"
|
|
echo $temp > $temp_path
|
|
fi
|
|
elif [ $sfp_type -eq 17 ];then
|
|
temp=$(echo $eeprom_part1 | awk '{printf $23}')
|
|
if [ $temp != "" ];then
|
|
temp=$( printf "%d" 0x$temp )
|
|
temp_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/temp"
|
|
echo $temp > $temp_path
|
|
fi
|
|
fi
|
|
|
|
#get lp_mode
|
|
lpmod_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/lp_mode"
|
|
if [ $sfp_type -eq 24 ];then
|
|
lpmod=$(echo $eeprom_part1 | awk '{printf $27}')
|
|
if [ $lpmod != "" ];then
|
|
state=$((lpmod&0x10))
|
|
if [ $state -eq 16 ];then
|
|
echo 1 > $lpmod_path
|
|
else
|
|
echo 0 > $lpmod_path
|
|
fi
|
|
fi
|
|
elif [ $sfp_type -eq 17 ];then
|
|
lpmod=$(echo $eeprom_part1 | awk '{printf $93}')
|
|
if [ $lpmod != "" ];then
|
|
state=$((lpmod&0x02))
|
|
if [ $state -eq 2 ];then
|
|
echo 1 > $lpmod_path
|
|
else
|
|
echo 0 > $lpmod_path
|
|
fi
|
|
fi
|
|
else
|
|
lpmod=""
|
|
fi
|
|
|
|
eeprom1_full=$eeprom_part1$eeprom_part2
|
|
eeprom1_full=$(echo $eeprom1_full | sed 's/[[:space:]]//g')
|
|
eeprom2_full=$eeprom_part3$eeprom_part4
|
|
eeprom2_full=$(echo $eeprom2_full | sed 's/[[:space:]]//g')
|
|
eeprom3_full=$eeprom_part5$eeprom_part6$eeprom_part7
|
|
eeprom3_full=$(echo $eeprom3_full | sed 's/[[:space:]]//g')
|
|
|
|
if [ $debug_flag -eq 0 ];then
|
|
eeprom1_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/eeprom1"
|
|
eeprom1_full=$(echo $eeprom1_full | sed -e 's/ //g')
|
|
echo $eeprom1_full > $eeprom1_path
|
|
eeprom2_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/eeprom2"
|
|
eeprom2_full=$(echo $eeprom2_full | sed -e 's/ //g')
|
|
echo $eeprom2_full > $eeprom2_path
|
|
eeprom3_path="/sys/bus/i2c/devices/0-00"${port_map[$1]}"/eeprom3"
|
|
eeprom3_full=$(echo $eeprom3_full | sed -e 's/ //g')
|
|
echo $eeprom3_full > $eeprom3_path
|
|
else
|
|
printf "\nPort %d EEPROM:" $1
|
|
printf "\n-----------------------------------------------\n"
|
|
for i in $(seq 1 256);
|
|
do
|
|
printf "%s " ${eeprom1_full:0:2}
|
|
eeprom1_full=$(echo $eeprom1_full | sed 's/^..//')
|
|
|
|
val=`expr $i % 16`
|
|
if [ $val -eq 0 ];then
|
|
printf "\n"
|
|
fi
|
|
done
|
|
printf "\n-----------------------------------------------\n"
|
|
fi
|
|
|
|
if [ $board_ver == 0 ]; then
|
|
port_init[$port]=1
|
|
if [ $port -lt 16 ];then
|
|
cpld_path="/sys/bus/i2c/devices/0-0006/"
|
|
else
|
|
cpld_path="/sys/bus/i2c/devices/0-0007/"
|
|
fi
|
|
echo 1 > $cpld_path"port"$((port + 1))"_data_rdy"
|
|
fi
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
TRANSCEIVER_DATA_READ()
|
|
{
|
|
first_detect=0
|
|
loop_after_plugin=0
|
|
|
|
while true
|
|
do
|
|
if [ -e /sys/bus/i2c/devices/0-0006/port1_present ] && [ -e /sys/bus/i2c/devices/0-0007/port32_present ] && [ -e /sys/bus/i2c/devices/0-002f/eeprom1 ];then
|
|
if [ $first_detect == 0 ]; then
|
|
ipmitool raw 0x30 0x25 0x1 0xe0 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
ipmitool raw 0x30 0x25 0x1 0xe2 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
ipmitool raw 0x30 0x25 0x1 0xe4 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
ipmitool raw 0x30 0x25 0x1 0xe6 0x0 0x0 1>>/dev/null 2>>/dev/null
|
|
fi
|
|
for i in $(seq 1 32);
|
|
do
|
|
if [ $i -le 16 ];then
|
|
cpld_path="/sys/bus/i2c/devices/0-0006/"
|
|
else
|
|
cpld_path="/sys/bus/i2c/devices/0-0007/"
|
|
fi
|
|
|
|
pre=$(cat $cpld_path"port"$i"_present")
|
|
if [ $pre == 1 ]; then
|
|
bmc_qsfp_eeprom_read $i
|
|
if [ $first_detect == 0 ]; then
|
|
first_detect=1
|
|
fi
|
|
else
|
|
port_init[$((i - 1))]=0
|
|
port_sfp_type[$((i - 1))]=0
|
|
fi
|
|
done
|
|
|
|
if [ $first_detect == 1 ]; then
|
|
touch /tmp/eeprom_init_done
|
|
fi
|
|
|
|
if [ -e /tmp/plugin_module_event ]; then
|
|
loop_after_plugin=$((loop_after_plugin + 1))
|
|
|
|
if [ $loop_after_plugin -gt 2 ]; then
|
|
rm /tmp/plugin_module_event
|
|
loop_after_plugin=0
|
|
fi
|
|
fi
|
|
|
|
pmon_status_check
|
|
if [ $? -eq 1 ]; then
|
|
if [ $first_detect == 1 ]; then
|
|
docker exec pmon bash -c 'echo "" > /tmp/eeprom_init_done'
|
|
fi
|
|
else
|
|
first_detect=0
|
|
fi
|
|
|
|
sleep 1;
|
|
fi
|
|
done
|
|
}
|
|
|
|
TRANSCEIVER_DATA_READ
|