void pal_OEM_1S_SET_FAN_DUTY_AUTO()

in meta-facebook/yv35-bb/src/ipmi/plat_ipmi.c [1017:1076]


void pal_OEM_1S_SET_FAN_DUTY_AUTO(ipmi_msg *msg)
{
	/*********************************
		data 0: fan pwm index
		data 1: duty
	***********************************/
	if (msg == NULL) {
		printf("%s failed due to parameter *msg is NULL\n", __func__);
		return;
	}

	if (msg->data_len != 2) {
		msg->completion_code = CC_INVALID_LENGTH;
		return;
	}

	uint8_t pwm_id = msg->data[0];
	uint8_t duty = msg->data[1];
	uint8_t current_fan_mode = FAN_AUTO_MODE, slot_index = 0;
	int ret = 0;

	msg->data_len = 0;
	msg->completion_code = CC_SUCCESS;

	if (msg->InF_source == SLOT1_BIC_IFs) {
		slot_index = 0x01;
	} else if (msg->InF_source == SLOT3_BIC_IFs) {
		slot_index = 0x03;
	} else {
		msg->completion_code = CC_PARAM_OUT_OF_RANGE;
		return;
	}

	if (pwm_id >= MAX_FAN_PWM_INDEX) {
		msg->completion_code = CC_PARAM_OUT_OF_RANGE;
		return;
	}

	ret = pal_get_fan_ctrl_mode(&current_fan_mode);
	if (ret < 0) {
		msg->completion_code = CC_UNSPECIFIED_ERROR;
		return;
	}

	if (current_fan_mode != FAN_AUTO_MODE) {
		printf("%s() is called when it's not at auto mode\n", __func__);
		return;
	}

	if (duty > MAX_FAN_DUTY) {
		duty = MAX_FAN_DUTY;
	}

	ret = pal_set_fan_duty(pwm_id, duty, slot_index);
	if (ret < 0) {
		msg->completion_code = CC_UNSPECIFIED_ERROR;
	}

	return;
}