@@ -1312,6 +1312,29 @@ static int qcom_glink_trysend(struct rpmsg_endpoint *ept, void *data, int len)
return __qcom_glink_send(channel, data, len, false);
}
+static ssize_t qcom_glink_get_mtu(struct rpmsg_endpoint *ept)
+{
+ struct glink_channel *channel = to_glink_channel(ept);
+ size_t mtu_size = 0;
+ struct qcom_glink *glink = channel->glink;
+ struct glink_core_rx_intent *tmp;
+ unsigned long flags;
+ int iid = 0;
+
+ if (!glink->intentless) {
+ spin_lock_irqsave(&channel->intent_lock, flags);
+ idr_for_each_entry(&channel->riids, tmp, iid) {
+ if (tmp->size > mtu_size && !tmp->in_use)
+ mtu_size = tmp->size;
+ }
+ spin_unlock_irqrestore(&channel->intent_lock, flags);
+
+ return mtu_size;
+ } else {
+ return qcom_glink_tx_avail(glink);
+ }
+}
+
/*
* Finds the device_node for the glink child interested in this channel.
*/
@@ -1345,6 +1368,7 @@ static const struct rpmsg_endpoint_ops glink_endpoint_ops = {
.destroy_ept = qcom_glink_destroy_ept,
.send = qcom_glink_send,
.trysend = qcom_glink_trysend,
+ .get_mtu = qcom_glink_get_mtu,
};
static void qcom_glink_rpdev_release(struct device *dev)
Implement the get_mtu ops to return the maximum size of the message that can be sent. Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> --- drivers/rpmsg/qcom_glink_native.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)