Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2924585ybk; Mon, 18 May 2020 11:14:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyaWPtceGOegK5Pba55ScJ6Bp61/ohlMIsVPAomBCdQcYnLWO69fqwReTrfvgEoRKSVY0JP X-Received: by 2002:a50:bf04:: with SMTP id f4mr14290036edk.91.1589825666918; Mon, 18 May 2020 11:14:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589825666; cv=none; d=google.com; s=arc-20160816; b=F0H7I4nS7umyG21mVqtG1jfvydmhkud323xAN7/Ts0c7Sk4UV/ukxM6V7+nhDnIUin KL7od3rm51yLpTeRniLIifjp2N+n+em0KMgJuDEKXxbEodCA9Fa08KSfayRit7kEi0nx EF+GNbbob8vCL+YzphO0qERmduLZ3QnBZQVKZpWevijsMhfYgCMgp1HL1aPVP+2aevf2 LQXWeU3hLNlUzBx3Kh2SCGC9zhY6cC03/Ec71vJsnTfkIrH115mimaCDr0PdS+lHtNgI PTTfm45eT3C7KB7jJmI3ir6hFV0WcOAQwOaxRgsHWHo+n5Ro+KE7spFTlVBZ7Z+YYQQu DTdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=i5G455mDBJRreSbEvKINUvbESli0VTrS8lepcJ7Mbx4=; b=lgZItLm4CzI6oS47icXqdlAlfBy2d2AInirqOqxM3Epn9dFpLrOtGMrScmijs1CN4l gtJbHGA8wgCBWUxbeT6yfTBLjuc/cIcbV2VrEr9H8DI0h8U/Ck7Df5FKHCTmk8H44mRH 55AOhRNVThRCgtE3FUjeqTMtn+Hzg03LKbVrqn+bDee7+034uRcg2GJ/U/MBNSwwKW/j /bPw8Xntukz6hoBq1f+FWqpt/sW9wj2Q1ndbM8mreHgWkKTwj3oXLIcWOBPrW9deTvtv D3fKZGXcYyz5f44bGq0IkO5PqGJT6yNaVVulqPenA2wPBUzQd+EAuZdmZDUu5rPvDCmh 32bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cFWfBG1S; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y102si6800692ede.477.2020.05.18.11.14.03; Mon, 18 May 2020 11:14:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cFWfBG1S; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387568AbgERSLh (ORCPT + 99 others); Mon, 18 May 2020 14:11:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729708AbgERSLf (ORCPT ); Mon, 18 May 2020 14:11:35 -0400 Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C8C9C05BD09 for ; Mon, 18 May 2020 11:11:35 -0700 (PDT) Received: by mail-pl1-x642.google.com with SMTP id q16so4558100plr.2 for ; Mon, 18 May 2020 11:11:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=i5G455mDBJRreSbEvKINUvbESli0VTrS8lepcJ7Mbx4=; b=cFWfBG1SDlsVh+fvyQBoiRzrRxskGzJNFyhmnh1UAN04m8JGcPGsAHhJn+ejKbm2cx ZvwagzwHxiw+6RYpMK/+DhoODYrjw4wRKOkDLO9L8yAuT+696yxU4Jb65/T8ghzLZBAa UtbOticWbi2JyQDjACVzbpfeq/hbpP3vJMbXKGLL8t8PXp/H4+SVruzTB4hNYFA3a85I alRoXCs0U9v6WyFNwBT+keJmeltIrFe2CyWUzvhzVBNToc7Vk1AMdchM7qh4A+YLnMA9 TMinVjmJp6SLEXeyimd1RCSxiqe5P2h2fFyWjA6Ot5SdyLr1E011AqptXrr22jpiBy/T b2gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=i5G455mDBJRreSbEvKINUvbESli0VTrS8lepcJ7Mbx4=; b=Rphkhxjkh5nEv03LPR1gdvaHiFWw/RkbxkhVamW4/KLRpXvJksU9GzcNnc3cA+2vwX SSRd9R+KUS2tvm4ZjtvP6o9GJ63NXH7sLTU4jkAl5qeFYVb+Q2P6yAZcXiK6beiA6fgM aatUTahe1gOqdk4tikYw56GK8y0IQYwpSwC/X6mCen0sfaqmxuAHF81I32DK7nYXrJzn Hbk+z2pzruNjUpAhEyV+uU080zg+vt/oD6q8eVjPkuXSyP8jljCSBR1iuBvMK2kHg7Nc HqB4nriaaDRk3F+0rBFpLpKlieYRU6IBdAIcP2W/F45tkndecAPliapBo4a0IHoqkdVs fF/Q== X-Gm-Message-State: AOAM530WstQ/RbCQaueRSUK3efoZyZ0PUnOkYfekACN08VxVdqpBFggS +hsuWbbG1tX6EqzdO0Y8WN1tubkCa7Y= X-Received: by 2002:a17:902:b114:: with SMTP id q20mr15989893plr.120.1589825494493; Mon, 18 May 2020 11:11:34 -0700 (PDT) Received: from builder.lan (104-188-17-28.lightspeed.sndgca.sbcglobal.net. [104.188.17.28]) by smtp.gmail.com with ESMTPSA id 14sm177190pjm.49.2020.05.18.11.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2020 11:11:33 -0700 (PDT) Date: Mon, 18 May 2020 11:10:10 -0700 From: Bjorn Andersson To: Wang Wenhu Cc: Andy Gross , Sibi Sankar , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@vivo.com Subject: Re: [PATCH] soc: qmi: move tlv-micros to header file Message-ID: <20200518181010.GC2165@builder.lan> References: <20200413035758.60238-1-wenhu.wang@vivo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200413035758.60238-1-wenhu.wang@vivo.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun 12 Apr 20:57 PDT 2020, Wang Wenhu wrote: > It's highly helpful to move the definitions of TLV related micros > into header file for user reference. The OPTIONAL_TLV_TYPE_START > should be known to any user that might define messages containing > optional fields. SIZE fields are the same, for users to calculate > message buffer length. > > While encoding messages, Type always occurs together with Length. > So the better way is to use TL_SIZE, rather than (T_SIZE + L_SIZE). > > Signed-off-by: Wang Wenhu > --- > drivers/soc/qcom/qmi_encdec.c | 28 ++++++++++++---------------- > include/linux/soc/qcom/qmi.h | 5 +++++ > 2 files changed, 17 insertions(+), 16 deletions(-) > > diff --git a/drivers/soc/qcom/qmi_encdec.c b/drivers/soc/qcom/qmi_encdec.c > index 3aaab71d1b2c..a674c68efab2 100644 > --- a/drivers/soc/qcom/qmi_encdec.c > +++ b/drivers/soc/qcom/qmi_encdec.c > @@ -53,10 +53,6 @@ do { \ > decoded_bytes += rc; \ > } while (0) > > -#define TLV_LEN_SIZE sizeof(u16) > -#define TLV_TYPE_SIZE sizeof(u8) Sorry, but as far as I can tell these properties should be hidden from the clients by the encoder/decoder helpers. Can help me understand when these could be useful to have outside this file? > -#define OPTIONAL_TLV_TYPE_START 0x10 This has some meaning outside, but whenever I've written (typically generated) qmi_elem_info arrays I just use the TVL TYPE as a number from the datasheets directly. Can you please give an example of when it's useful for a client to express a TLV relative to the "optional start"? Thanks, Bjorn > - > static int qmi_encode(struct qmi_elem_info *ei_array, void *out_buf, > const void *in_c_struct, u32 out_buf_len, > int enc_level); > @@ -142,7 +138,7 @@ static int qmi_calc_min_msg_len(struct qmi_elem_info *ei_array, > * nested structure. > */ > if (level == 1) > - min_msg_len += (TLV_TYPE_SIZE + TLV_LEN_SIZE); > + min_msg_len += QMI_TLV_TL_SIZE; > } > > return min_msg_len; > @@ -253,8 +249,7 @@ static int qmi_encode_string_elem(struct qmi_elem_info *ei_array, > } > > if (enc_level == 1) { > - if (string_len + TLV_LEN_SIZE + TLV_TYPE_SIZE > > - out_buf_len) { > + if (string_len + QMI_TLV_TL_SIZE > out_buf_len) { > pr_err("%s: Output len %d > Out Buf len %d\n", > __func__, string_len, out_buf_len); > return -ETOOSMALL; > @@ -311,7 +306,7 @@ static int qmi_encode(struct qmi_elem_info *ei_array, void *out_buf, > tlv_pointer = buf_dst; > tlv_len = 0; > if (enc_level == 1) > - buf_dst = buf_dst + (TLV_LEN_SIZE + TLV_TYPE_SIZE); > + buf_dst = buf_dst + QMI_TLV_TL_SIZE; > > while (temp_ei->data_type != QMI_EOTI) { > buf_src = in_c_struct + temp_ei->offset; > @@ -342,8 +337,8 @@ static int qmi_encode(struct qmi_elem_info *ei_array, void *out_buf, > data_len_sz = temp_ei->elem_size == sizeof(u8) ? > sizeof(u8) : sizeof(u16); > /* Check to avoid out of range buffer access */ > - if ((data_len_sz + encoded_bytes + TLV_LEN_SIZE + > - TLV_TYPE_SIZE) > out_buf_len) { > + if ((data_len_sz + encoded_bytes + QMI_TLV_TL_SIZE) > > + out_buf_len) { > pr_err("%s: Too Small Buffer @DATA_LEN\n", > __func__); > return -ETOOSMALL; > @@ -367,7 +362,7 @@ static int qmi_encode(struct qmi_elem_info *ei_array, void *out_buf, > case QMI_SIGNED_4_BYTE_ENUM: > /* Check to avoid out of range buffer access */ > if (((data_len_value * temp_ei->elem_size) + > - encoded_bytes + TLV_LEN_SIZE + TLV_TYPE_SIZE) > > + encoded_bytes + QMI_TLV_TL_SIZE) > > out_buf_len) { > pr_err("%s: Too Small Buffer @data_type:%d\n", > __func__, temp_ei->data_type); > @@ -410,10 +405,10 @@ static int qmi_encode(struct qmi_elem_info *ei_array, void *out_buf, > > if (encode_tlv && enc_level == 1) { > QMI_ENCDEC_ENCODE_TLV(tlv_type, tlv_len, tlv_pointer); > - encoded_bytes += (TLV_TYPE_SIZE + TLV_LEN_SIZE); > + encoded_bytes += QMI_TLV_TL_SIZE; > tlv_pointer = buf_dst; > tlv_len = 0; > - buf_dst = buf_dst + TLV_LEN_SIZE + TLV_TYPE_SIZE; > + buf_dst = buf_dst + QMI_TLV_TL_SIZE; > encode_tlv = 0; > } > } > @@ -613,10 +608,11 @@ static int qmi_decode(struct qmi_elem_info *ei_array, void *out_c_struct, > tlv_pointer = buf_src; > QMI_ENCDEC_DECODE_TLV(&tlv_type, > &tlv_len, tlv_pointer); > - buf_src += (TLV_TYPE_SIZE + TLV_LEN_SIZE); > - decoded_bytes += (TLV_TYPE_SIZE + TLV_LEN_SIZE); > + buf_src += QMI_TLV_TL_SIZE; > + decoded_bytes += QMI_TLV_TL_SIZE; > temp_ei = find_ei(ei_array, tlv_type); > - if (!temp_ei && tlv_type < OPTIONAL_TLV_TYPE_START) { > + if (!temp_ei && tlv_type < > + QMI_OPTIONAL_TLV_TYPE_START) { > pr_err("%s: Inval element info\n", __func__); > return -EINVAL; > } else if (!temp_ei) { > diff --git a/include/linux/soc/qcom/qmi.h b/include/linux/soc/qcom/qmi.h > index e712f94b89fc..eb53aebdf45e 100644 > --- a/include/linux/soc/qcom/qmi.h > +++ b/include/linux/soc/qcom/qmi.h > @@ -34,6 +34,11 @@ struct qmi_header { > #define QMI_INDICATION 4 > > #define QMI_COMMON_TLV_TYPE 0 > +#define QMI_OPTIONAL_TLV_TYPE_START 0x10 > + > +#define QMI_TLV_LEN_SIZE sizeof(u16) > +#define QMI_TLV_TYPE_SIZE sizeof(u8) > +#define QMI_TLV_TL_SIZE (QMI_TLV_LEN_SIZE + QMI_TLV_TYPE_SIZE) > > enum qmi_elem_type { > QMI_EOTI, > -- > 2.17.1 >