Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit abf9d1a5 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: qmi: Update the skip_to_next_elem operation"

parents 03fd70b2 6108f078
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -88,7 +88,8 @@ static int _qmi_kernel_decode(struct elem_info *ei_array,
			      void *out_c_struct,
			      void *in_buf, uint32_t in_buf_len,
			      int dec_level);
static struct elem_info *skip_to_next_elem(struct elem_info *ei_array);
static struct elem_info *skip_to_next_elem(struct elem_info *ei_array,
					   int level);

/**
 * qmi_calc_max_msg_len() - Calculate the maximum length of a QMI message
@@ -151,7 +152,7 @@ static int qmi_calc_min_msg_len(struct elem_info *ei_array,
	while (temp_ei->data_type != QMI_EOTI) {
		/* Optional elements do not count in minimum length */
		if (temp_ei->data_type == QMI_OPT_FLAG) {
			temp_ei = skip_to_next_elem(temp_ei);
			temp_ei = skip_to_next_elem(temp_ei, level);
			continue;
		}

@@ -327,6 +328,7 @@ static int qmi_encode_struct_elem(struct elem_info *ei_array,
/**
 * skip_to_next_elem() - Skip to next element in the structure to be encoded
 * @ei_array: Struct info describing the element to be skipped.
 * @level: Depth level of encoding/decoding to identify nested structures.
 *
 * @return: Struct info of the next element that can be encoded.
 *
@@ -335,15 +337,20 @@ static int qmi_encode_struct_elem(struct elem_info *ei_array,
 * optional element can be skipped. This function can be used to perform
 * that operation.
 */
static struct elem_info *skip_to_next_elem(struct elem_info *ei_array)
static struct elem_info *skip_to_next_elem(struct elem_info *ei_array,
					   int level)
{
	struct elem_info *temp_ei = ei_array;
	uint8_t tlv_type;

	if (level > 1) {
		temp_ei = temp_ei + 1;
	} else {
		do {
			tlv_type = temp_ei->tlv_type;
			temp_ei = temp_ei + 1;
		} while (tlv_type == temp_ei->tlv_type);
	}

	return temp_ei;
}
@@ -401,7 +408,7 @@ static int _qmi_kernel_encode(struct elem_info *ei_array,
			if (opt_flag_value)
				temp_ei = temp_ei + 1;
			else
				temp_ei = skip_to_next_elem(temp_ei);
				temp_ei = skip_to_next_elem(temp_ei, enc_level);
			break;

		case QMI_DATA_LEN:
@@ -417,13 +424,11 @@ static int _qmi_kernel_encode(struct elem_info *ei_array,
			}
			rc = qmi_encode_basic_elem(buf_dst, &data_len_value,
						   1, data_len_sz);
			if (data_len_value) {
			UPDATE_ENCODE_VARIABLES(temp_ei, buf_dst,
				encoded_bytes, tlv_len, encode_tlv, rc);
			encode_tlv = 0;
			} else {
				temp_ei = skip_to_next_elem(temp_ei);
			}
			if (!data_len_value)
				temp_ei = skip_to_next_elem(temp_ei, enc_level);
			break;

		case QMI_UNSIGNED_1_BYTE: