RPMsg MTU size can be variable now and no longer hardcoded to 512 bytes.
Add log to the sample driver that prints current MTU size of the rpmsg
buffer.

Signed-off-by: Tanmay Shah <[email protected]>
---

Changes in v4:
  - check msg size is < MTU size

Changes in v3:
  - Check for error when retrieving MTU size
  - %s/mtu/MTU/

 samples/rpmsg/rpmsg_client_sample.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/samples/rpmsg/rpmsg_client_sample.c 
b/samples/rpmsg/rpmsg_client_sample.c
index ae5081662283..4c43436aadb6 100644
--- a/samples/rpmsg/rpmsg_client_sample.c
+++ b/samples/rpmsg/rpmsg_client_sample.c
@@ -52,6 +52,7 @@ static int rpmsg_sample_probe(struct rpmsg_device *rpdev)
 {
        int ret;
        struct instance_data *idata;
+       ssize_t mtu, msg_len;
 
        dev_info(&rpdev->dev, "new channel: 0x%x -> 0x%x!\n",
                                        rpdev->src, rpdev->dst);
@@ -62,8 +63,25 @@ static int rpmsg_sample_probe(struct rpmsg_device *rpdev)
 
        dev_set_drvdata(&rpdev->dev, idata);
 
+       mtu = rpmsg_get_mtu(rpdev->ept);
+       if (mtu < 0) {
+               dev_warn(&rpdev->dev, "invalid rpmsg MTU size = %ld\n", mtu);
+               return mtu;
+       }
+
+       dev_info(&rpdev->dev, "rpmsg MTU size = %ld\n", mtu);
+
+       msg_len = strlen(MSG);
+       /* make sure our message fits in a single rpmsg buffer */
+       if (msg_len > mtu) {
+               dev_err(&rpdev->dev,
+                       "message size %zu exceeds rpmsg MTU size %ld\n",
+                       strlen(MSG), mtu);
+               return -EMSGSIZE;
+       }
+
        /* send a message to our remote processor */
-       ret = rpmsg_send(rpdev->ept, MSG, strlen(MSG));
+       ret = rpmsg_send(rpdev->ept, MSG, msg_len);
        if (ret) {
                dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", ret);
                return ret;
-- 
2.34.1


Reply via email to