sonic-buildimage/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-psu-monitor

249 lines
5.0 KiB
Plaintext
Raw Normal View History

#!/bin/bash
debug_flag=0
val=0
value=0
byte_hex_test()
{
if ! [[ $1 =~ ^[0-9A-Fa-f]{2}$ ]] ; then
return 0
else
return 1
fi
}
byte_read(){
data=$(echo $val | awk '{print $'"$1"'}')
byte_hex_test $data
if [ $? -eq 0 ]; then
return 0
fi
data=$(printf "%d" 0x$data)
value=$data
return 1
}
add_byte(){
hi_byte=$(echo $val | awk '{print $'"$1"'}')
lo_byte=$(echo $val | awk '{print $'"$2"'}')
byte_hex_test $hi_byte
if [ $? -eq 0 ]; then
return 0
fi
byte_hex_test $lo_byte
if [ $? -eq 0 ]; then
return 0
fi
hi_byte=$(printf "%d" 0x$hi_byte)
lo_byte=$(printf "%d" 0x$lo_byte)
((hi_byte <<= 8))
value=$((($lo_byte+$hi_byte)))
return 1
}
# string_read [start byte] [length]
string_read(){
value=""
len=$(echo $val | awk '{print $'"$1"'}')
byte_hex_test $len
if [ $? -eq 0 ]; then
return 0
fi
len=$(printf "%d" 0x$len)
s=$(($1 + 1))
e=$(($1 + len - 1))
for i in $(seq $s $e)
do
data=$(echo $val | awk '{print $'"$i"'}')
byte_hex_test $data
if [ $? -eq 0 ]; then
return 0
fi
data=$(printf "%d" 0x$data)
if [ $data -ne 0 ];then
value=$value$(printf "$(printf '\\x%x' $data)")
else
data=0x20
value=$value$(printf "$(printf '\\x%x' $data)")
fi
done
return 1
}
#$1=dev_addr, $2=reg, $3=val
get_PSU_information()
{
val=$(ipmitool raw 0x30 0x89 2>>/dev/null)
if [ -e /sys/bus/i2c/devices/0-005a/vendor ] && [ -e /sys/bus/i2c/devices/0-0059/vendor ];then
#PSU1 Vin
add_byte 1 2
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-005a/in1_input
fi
#PSU2 Vin
add_byte 3 4
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-0059/in1_input
fi
#PSU 1 Vout
add_byte 5 6
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-005a/in2_input
fi
#PSU 2 Vout
add_byte 7 8
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-0059/in2_input
fi
#PSU 1 Iin
add_byte 9 10
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-005a/curr1_input
fi
#PSU 2 Iin
add_byte 11 12
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-0059/curr1_input
fi
#PSU 1 Iout
add_byte 13 14
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-005a/curr2_input
fi
#PSU 2 Iout
add_byte 15 16
if [ $? -eq 1 ];then
value=$(($value * 10))
echo $value > /sys/bus/i2c/devices/0-0059/curr2_input
fi
#PSU 1 Pin
add_byte 17 18
if [ $? -eq 1 ];then
value=$(($value * 1000000))
echo $value > /sys/bus/i2c/devices/0-005a/power1_input
fi
#PSU 2 Pin
add_byte 19 20
if [ $? -eq 1 ];then
value=$(($value * 1000000))
echo $value > /sys/bus/i2c/devices/0-0059/power1_input
fi
#PSU 1 Pout
add_byte 21 22
if [ $? -eq 1 ];then
value=$(($value * 1000000))
echo $value > /sys/bus/i2c/devices/0-005a/power2_input
fi
#PSU 2 Pout
add_byte 23 24
if [ $? -eq 1 ];then
value=$(($value * 1000000))
echo $value > /sys/bus/i2c/devices/0-0059/power2_input
fi
#PSU 1 Temp1
byte_read 25
if [ $? -eq 1 ];then
value=$(($value * 1000))
echo $value > /sys/bus/i2c/devices/0-005a/temp1_input
fi
#PSU 2 Temp1
byte_read 26
if [ $? -eq 1 ];then
value=$(($value * 1000))
echo $value > /sys/bus/i2c/devices/0-0059/temp1_input
fi
byte_read 31
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-005a/present
fi
byte_read 32
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-0059/present
fi
#PSU 1 2 PSU power good
byte_read 33
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-005a/power_good
fi
byte_read 34
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-0059/power_good
fi
add_byte 35 36
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-005a/fault
fi
add_byte 37 38
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-0059/fault
fi
fi
#____________________________________________________________________________
val=$(ipmitool raw 0x30 0x8a 2>>/dev/null)
if [ -e /sys/bus/i2c/devices/0-005a/vendor ] && [ -e /sys/bus/i2c/devices/0-0059/vendor ];then
#PSU1 mfr_ID
string_read 1
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-005a/vendor
fi
#PSU2 mfr_ID
string_read 21
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-0059/vendor
fi
#PSU1 mfr_model
string_read 41
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-005a/model
fi
#PSU2 mfr_model
string_read 61
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-0059/model
fi
#PSU1 mfr_serial
string_read 81
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-005a/sn
fi
#PSU1 mfr_serial
string_read 111
if [ $? -eq 1 ];then
echo $value > /sys/bus/i2c/devices/0-0059/sn
fi
fi
}
#$1=dev_addr, $2=reg, $3=len
PSU_monitor()
{
while true
do
get_PSU_information
if [ $debug_flag -eq 1 ];then
bmc_fan_speed_ctrl
fi
sleep 1
done
}
PSU_monitor