60 lines
1.8 KiB
Bash
60 lines
1.8 KiB
Bash
#!/bin/bash -e
|
|
|
|
# Provide source directive to shellcheck.
|
|
# shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd
|
|
source /usr/libexec/phosphor-state-manager/power-cmd
|
|
|
|
SLOT_ID="$1"
|
|
|
|
function get_power_status()
|
|
{
|
|
POWER_OK_SLOT=$(( $1+9 ))
|
|
HOST_INSTANCE=$(( $1-1 << 2 ))
|
|
|
|
chassis_status=$(gpioget 0 $POWER_OK_SLOT)
|
|
if [ "$chassis_status" == "$STATE_OFF" ]; then
|
|
echo "AC Off"
|
|
return 0
|
|
fi
|
|
|
|
response="$(busctl call "$SERVICE" "$OBJECT_PATH" "$INTERFACE" sendRequest yyyyay "$HOST_INSTANCE" 0x38 "$LUN" 0x03 "$IANA_LEN" "$IANA")"
|
|
# Responses are BIC gpio states, the GPIO B7 represents host DC status
|
|
result=$(echo "$response" | cut -d" " -f "$PWRGD_SYS_PWROK_INDEX")
|
|
res="$(( "$result" & 0x80 ))"
|
|
host_status="$(( "$res" >> 7 ))"
|
|
if [ "$host_status" == "$STATE_OFF" ]; then
|
|
echo "Host Off"
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
set_host_state()
|
|
{
|
|
PROPERTY_VAL="xyz.openbmc_project.State.Host.HostState.$2"
|
|
busctl set-property "$HOST_BUS_NAME$1" "$HOST_OBJ_PATH$1" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$PROPERTY_VAL"
|
|
}
|
|
|
|
set_chassis_state()
|
|
{
|
|
PROPERTY_VAL="xyz.openbmc_project.State.Chassis.PowerState.$2"
|
|
busctl set-property "$CHASSIS_BUS_NAME$1" "$CHASSIS_OBJ_PATH$1" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$PROPERTY_VAL"
|
|
}
|
|
|
|
|
|
POWER_STATUS=$(get_power_status "$SLOT_ID")
|
|
|
|
# Default power status
|
|
CHASSIS_STATE_VAL="Off"
|
|
HOST_STATE_VAL="Off"
|
|
|
|
# Real power status
|
|
if [ "$POWER_STATUS" != "AC Off" ]; then
|
|
CHASSIS_STATE_VAL="On"
|
|
if [ "$POWER_STATUS" != "Host Off" ]; then
|
|
HOST_STATE_VAL="Running"
|
|
fi
|
|
fi
|
|
|
|
set_chassis_state "$SLOT_ID" "$CHASSIS_STATE_VAL"
|
|
set_host_state "$SLOT_ID" "$HOST_STATE_VAL"
|