Implement the get_mtu ops to return the maximum size of
the message that can be sent.

Signed-off-by: Arnaud Pouliquen <[email protected]>
---
 drivers/rpmsg/qcom_glink_native.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/rpmsg/qcom_glink_native.c 
b/drivers/rpmsg/qcom_glink_native.c
index 621f1afd4d6b..8a477416a38a 100644
--- a/drivers/rpmsg/qcom_glink_native.c
+++ b/drivers/rpmsg/qcom_glink_native.c
@@ -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)
-- 
2.7.4

Reply via email to