void pal_CHASSIS_GET_CHASSIS_STATUS()

in meta-facebook/yv35-cl/src/ipmi/plat_ipmi.c [117:179]


void pal_CHASSIS_GET_CHASSIS_STATUS(ipmi_msg *msg)
{
	if (msg->data_len != 0) {
		msg->completion_code = CC_INVALID_LENGTH;
		return;
	}

	CHASSIS_STATUS chassis_status = { 0 };
	uint8_t result = 0;

	// CurrPwState
	chassis_status.currPwState.pwOn = get_DC_status();
	chassis_status.currPwState.pwFault = get_DC_status();
	// Update pwRestorePolicy
	chassis_status.currPwState.pwRestorePolicy = 0x2;
	result = (result | chassis_status.currPwState.reserve) << 2;
	result = (result | chassis_status.currPwState.pwRestorePolicy) << 1;
	result = (result | chassis_status.currPwState.pwControlFault) << 1;
	result = (result | chassis_status.currPwState.pwFault) << 1;
	result = (result | chassis_status.currPwState.interlock) << 1;
	result = (result | chassis_status.currPwState.pwOverload) << 1;
	result = (result | chassis_status.currPwState.pwOn);
	msg->data[0] = result;

	// LastPwEvt
	result = 0;
	// Update pwOnIpmi
	result = (result | chassis_status.lastPwEvt.reserve) << 1;
	result = (result | chassis_status.lastPwEvt.pwOnIpmi) << 1;
	result = (result | chassis_status.lastPwEvt.pwDownFault) << 1;
	result = (result | chassis_status.lastPwEvt.pwDownInterlock) << 1;
	result = (result | chassis_status.lastPwEvt.pwDownOverload) << 1;
	result = (result | chassis_status.lastPwEvt.acFail);
	msg->data[1] = result;

	// Misc
	result = 0;
	// Update idLedSupport, idLedState, fanFault, fpcLockout, intru
	result = (result | chassis_status.misc.reserve) << 1;
	result = (result | chassis_status.misc.idLedSupport) << 2;
	result = (result | chassis_status.misc.idLedState) << 1;
	result = (result | chassis_status.misc.fanFault) << 1;
	result = (result | chassis_status.misc.driveFault) << 1;
	result = (result | chassis_status.misc.fpcLockout) << 1;
	result = (result | chassis_status.misc.intru);
	msg->data[2] = result;

	// ChassisButtonEnables
	result = 0;
	result = (result | chassis_status.chassisButtonEnables.standbyDisableAllowed) << 1;
	result = (result | chassis_status.chassisButtonEnables.diagnosticDisableAllowed) << 1;
	result = (result | chassis_status.chassisButtonEnables.resetButtonDisableAllowed) << 1;
	result = (result | chassis_status.chassisButtonEnables.powerOffButtonDisableAllowed) << 1;
	result = (result | chassis_status.chassisButtonEnables.standbyDisable) << 1;
	result = (result | chassis_status.chassisButtonEnables.diagnosticDisable) << 1;
	result = (result | chassis_status.chassisButtonEnables.resetButtonDisable) << 1;
	result = (result | chassis_status.chassisButtonEnables.powerOffButtonDisable);
	msg->data[3] = result;

	msg->data_len = 4;
	msg->completion_code = CC_SUCCESS;
	return;
}