void pal_OEM_1S_GET_GPIO()

in meta-facebook/yv35-bb/src/ipmi/plat_ipmi.c [533:582]


void pal_OEM_1S_GET_GPIO(ipmi_msg *msg)
{
	if (msg->data_len != 0) { // only input enable status
		msg->completion_code = CC_INVALID_LENGTH;
		return;
	}

	uint8_t eight_bit_value = 0, gpio_value, gpio_cnt, data_len;
	gpio_cnt = gpio_ind_to_num_table_cnt +
		   (8 - (gpio_ind_to_num_table_cnt %
			 8)); // Bump up the gpio_ind_to_num_table_cnt to multiple of 8.
	data_len = gpio_cnt / 8;
	msg->data_len = data_len;
	for (uint8_t i = 0; i < gpio_cnt; i++) {
		gpio_value =
			(i >= gpio_ind_to_num_table_cnt) ? 0 : gpio_get(gpio_ind_to_num_table[i]);

		switch (i % 8) {
		case 0:
			eight_bit_value = gpio_value;
			break;
		case 1:
			eight_bit_value = eight_bit_value | (gpio_value << 1);
			break;
		case 2:
			eight_bit_value = eight_bit_value | (gpio_value << 2);
			break;
		case 3:
			eight_bit_value = eight_bit_value | (gpio_value << 3);
			break;
		case 4:
			eight_bit_value = eight_bit_value | (gpio_value << 4);
			break;
		case 5:
			eight_bit_value = eight_bit_value | (gpio_value << 5);
			break;
		case 6:
			eight_bit_value = eight_bit_value | (gpio_value << 6);
			break;
		case 7:
			eight_bit_value = eight_bit_value | (gpio_value << 7);
			break;
		}

		msg->data[i / 8] = eight_bit_value;
	}

	msg->completion_code = CC_SUCCESS;
	return;
}