Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp5055848ybb; Tue, 24 Mar 2020 10:08:42 -0700 (PDT) X-Google-Smtp-Source: ADFU+vumEXz80x6LoXjmHjWN9pe6wz/wLO5sU9AYVKrLtXACQeacnj6fF2dnt+Hdi6TcX7i40t2o X-Received: by 2002:a05:6830:1608:: with SMTP id g8mr23845804otr.282.1585069722728; Tue, 24 Mar 2020 10:08:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585069722; cv=none; d=google.com; s=arc-20160816; b=iKYPh/jXDST1mWfUpVxVmBrQjF1PbOVPph8jTDHsC1Sp/l90D2Hrs8iAAlCILBD8nP fm3nTwboKFjB/G4sE6jctVqyiceT7vH1RDCBJxQL59Pvg4OhiQwXztMN77vMsYDNtI6Q 6Yhrgm6mFu5ridtef8heoXgx0d5zEtP9y8Op6qk3gRbmYRiwC7N7Fe7cUFQ8rTxBFaLr E3cQpLXp/1dWQ19VfD9eWMUquAt/HPRxC1nUO3Ror11P1dSEW4R+mDrbAn/RWE3Jlabi cc8ZWAvMCY6RZi+a0J1GvukKDHgupAmisatJfwDk2lXo1hY/+TwQ/i1EVGNqE5q42A/5 /Y5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=DkpR7/ZmYvBYS8vULcFgzWeieU0ZL1C7vf7nDFglWno=; b=w5i/XxflddnV96aQbBVRblo+t2wM8I+yI5qivip59s0zVlo+fQVcKJGi9aSwXhBjNY ZpTTTTJ4fayL59gOOW881F1t5T89XcB5zAIHFKnBjfrS00lJCroTt4kwPgnPTZtXU0qU 3CqDIL0Ic1VDv1myg2k5F+AQgMGAndCPwPGhYSSfHUK/9vkeKhogW77AmHCR4lTaYUDv JNZCnDe1KjQ5nKbpNlHbh4AqPoQO3AGffBEGz9m3eDBMw3uEGW8aiDERiYAu1d9LrMGK 9gHSgMfUDTvkqsZefBF3RGxFny0Efwvgb3Iiek0REc7/XmFmhpyYNLDFVaA3EZe549yJ bQSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=C0RNF6ce; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v7si10004457ote.74.2020.03.24.10.08.30; Tue, 24 Mar 2020 10:08:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=C0RNF6ce; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727441AbgCXRHn (ORCPT + 99 others); Tue, 24 Mar 2020 13:07:43 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:8106 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725767AbgCXRHm (ORCPT ); Tue, 24 Mar 2020 13:07:42 -0400 Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02OH2HcW007018; Tue, 24 Mar 2020 18:05:26 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=DkpR7/ZmYvBYS8vULcFgzWeieU0ZL1C7vf7nDFglWno=; b=C0RNF6ce2i5H81VEsX2QqTrhxpdboche03xw0c6tolXwQgYdH/VOC48Uk76LFuHkgh54 ZTSbC+GFs7E1ffyL3H1END6/vz9TXY7B8xgDlqHKvutINICQ2CFDGpbB+g8MYHMoxO+Y La1gdbuX+R7FIVNpCuvAxJJVmUni6EMFLFhVQa0dkbT+D+X9A7xo0wGtr/h8hBiVJwIi dd0C/xTgUV2NWvjBkjVSGoboCrewb7lkJ2IeYY2qJRbZPx5gtSiTtnd29IN2sL0fvkF3 rM9kEFQ4o/cpR/rp6iAwLZtsLaP/ax3u9GRTA97TwdMqOuiysHd515/0Cy9ZSldz91lb hA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2yw8xe0wpc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 24 Mar 2020 18:05:25 +0100 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 57FB910002A; Tue, 24 Mar 2020 18:05:25 +0100 (CET) Received: from Webmail-eu.st.com (sfhdag3node1.st.com [10.75.127.7]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id F258E2BE24D; Tue, 24 Mar 2020 18:05:24 +0100 (CET) Received: from localhost (10.75.127.44) by SFHDAG3NODE1.st.com (10.75.127.7) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 24 Mar 2020 18:05:21 +0100 From: Arnaud Pouliquen To: Ohad Ben-Cohen , Bjorn Andersson , Greg Kroah-Hartman , Jiri Slaby , , , Mathieu Poirier CC: , Suman Anna , Fabien DESSENNE , , Alan Cox , xiang xiao Subject: [PATCH v7 1/2] rpmsg: core: add API to get MTU Date: Tue, 24 Mar 2020 18:04:06 +0100 Message-ID: <20200324170407.16470-2-arnaud.pouliquen@st.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200324170407.16470-1-arnaud.pouliquen@st.com> References: <20200324170407.16470-1-arnaud.pouliquen@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.44] X-ClientProxiedBy: SFHDAG1NODE1.st.com (10.75.127.1) To SFHDAG3NODE1.st.com (10.75.127.7) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.645 definitions=2020-03-24_05:2020-03-23,2020-03-24 signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return the rpmsg buffer MTU for sending message, so rpmsg users can split a long message in several sub rpmsg buffers. Signed-off-by: Arnaud Pouliquen Acked-by: Suman Anna --- drivers/rpmsg/rpmsg_core.c | 21 +++++++++++++++++++++ drivers/rpmsg/rpmsg_internal.h | 2 ++ drivers/rpmsg/virtio_rpmsg_bus.c | 10 ++++++++++ include/linux/rpmsg.h | 10 ++++++++++ 4 files changed, 43 insertions(+) diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index e330ec4dfc33..a6ef54c4779a 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -283,6 +283,27 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, } EXPORT_SYMBOL(rpmsg_trysend_offchannel); +/** + * rpmsg_get_mtu() - get maximum transmission buffer size for sending message. + * @ept: the rpmsg endpoint + * + * This function returns maximum buffer size available for a single message. + * + * Return: the maximum transmission size on success and an appropriate error + * value on failure. + */ + +ssize_t rpmsg_get_mtu(struct rpmsg_endpoint *ept) +{ + if (WARN_ON(!ept)) + return -EINVAL; + if (!ept->ops->get_mtu) + return -ENOTSUPP; + + return ept->ops->get_mtu(ept); +} +EXPORT_SYMBOL(rpmsg_get_mtu); + /* * match an rpmsg channel with a channel info struct. * this is used to make sure we're not creating rpmsg devices for channels diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h index 3fc83cd50e98..e6f88ee90ff6 100644 --- a/drivers/rpmsg/rpmsg_internal.h +++ b/drivers/rpmsg/rpmsg_internal.h @@ -47,6 +47,7 @@ struct rpmsg_device_ops { * @trysendto: see @rpmsg_trysendto(), optional * @trysend_offchannel: see @rpmsg_trysend_offchannel(), optional * @poll: see @rpmsg_poll(), optional + * @get_mtu: see @rpmsg_get_mtu(), optional * * Indirection table for the operations that a rpmsg backend should implement. * In addition to @destroy_ept, the backend must at least implement @send and @@ -66,6 +67,7 @@ struct rpmsg_endpoint_ops { void *data, int len); __poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp, poll_table *wait); + ssize_t (*get_mtu)(struct rpmsg_endpoint *ept); }; int rpmsg_register_device(struct rpmsg_device *rpdev); diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c index 376ebbf880d6..6e48fdf24555 100644 --- a/drivers/rpmsg/virtio_rpmsg_bus.c +++ b/drivers/rpmsg/virtio_rpmsg_bus.c @@ -175,6 +175,7 @@ static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst); static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, void *data, int len); +static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept); static const struct rpmsg_endpoint_ops virtio_endpoint_ops = { .destroy_ept = virtio_rpmsg_destroy_ept, @@ -184,6 +185,7 @@ static const struct rpmsg_endpoint_ops virtio_endpoint_ops = { .trysend = virtio_rpmsg_trysend, .trysendto = virtio_rpmsg_trysendto, .trysend_offchannel = virtio_rpmsg_trysend_offchannel, + .get_mtu = virtio_rpmsg_get_mtu, }; /** @@ -699,6 +701,14 @@ static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, false); } +static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept) +{ + struct rpmsg_device *rpdev = ept->rpdev; + struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev); + + return vch->vrp->buf_size - sizeof(struct rpmsg_hdr); +} + static int rpmsg_recv_single(struct virtproc_info *vrp, struct device *dev, struct rpmsg_hdr *msg, unsigned int len) { diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h index 9fe156d1c018..88d7892ca93d 100644 --- a/include/linux/rpmsg.h +++ b/include/linux/rpmsg.h @@ -135,6 +135,8 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst, __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp, poll_table *wait); +ssize_t rpmsg_get_mtu(struct rpmsg_endpoint *ept); + #else static inline int register_rpmsg_device(struct rpmsg_device *dev) @@ -242,6 +244,14 @@ static inline __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, return 0; } +static inline ssize_t rpmsg_get_mtu(struct rpmsg_endpoint *ept) +{ + /* This shouldn't be possible */ + WARN_ON(1); + + return -ENXIO; +} + #endif /* IS_ENABLED(CONFIG_RPMSG) */ /* use a macro to avoid include chaining to get THIS_MODULE */ -- 2.17.1