rpmsg_tty.c (03ab8e6297acd1bc0eedaa050e2a1635c576fd11) rpmsg_tty.c (95713967ba52389f7cea75704d0cf048080ec218)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2021 STMicroelectronics - All Rights Reserved
4 *
5 * The rpmsg tty driver implements serial communication on the RPMsg bus to makes
6 * possible for user-space programs to send and receive rpmsg messages as a standard
7 * tty protocol.
8 *

--- 59 unchanged lines hidden (view full) ---

68 return tty_port_open(tty->port, tty, filp);
69}
70
71static void rpmsg_tty_close(struct tty_struct *tty, struct file *filp)
72{
73 return tty_port_close(tty->port, tty, filp);
74}
75
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2021 STMicroelectronics - All Rights Reserved
4 *
5 * The rpmsg tty driver implements serial communication on the RPMsg bus to makes
6 * possible for user-space programs to send and receive rpmsg messages as a standard
7 * tty protocol.
8 *

--- 59 unchanged lines hidden (view full) ---

68 return tty_port_open(tty->port, tty, filp);
69}
70
71static void rpmsg_tty_close(struct tty_struct *tty, struct file *filp)
72{
73 return tty_port_close(tty->port, tty, filp);
74}
75
76static int rpmsg_tty_write(struct tty_struct *tty, const u8 *buf, int len)
76static ssize_t rpmsg_tty_write(struct tty_struct *tty, const u8 *buf,
77 size_t len)
77{
78 struct rpmsg_tty_port *cport = tty->driver_data;
79 struct rpmsg_device *rpdev;
80 int msg_max_size, msg_size;
81 int ret;
82
83 rpdev = cport->rpdev;
84
85 msg_max_size = rpmsg_get_mtu(rpdev->ept);
86 if (msg_max_size < 0)
87 return msg_max_size;
88
78{
79 struct rpmsg_tty_port *cport = tty->driver_data;
80 struct rpmsg_device *rpdev;
81 int msg_max_size, msg_size;
82 int ret;
83
84 rpdev = cport->rpdev;
85
86 msg_max_size = rpmsg_get_mtu(rpdev->ept);
87 if (msg_max_size < 0)
88 return msg_max_size;
89
89 msg_size = min(len, msg_max_size);
90 msg_size = min_t(unsigned int, len, msg_max_size);
90
91 /*
92 * Use rpmsg_trysend instead of rpmsg_send to send the message so the caller is not
93 * hung until a rpmsg buffer is available. In such case rpmsg_trysend returns -ENOMEM.
94 */
95 ret = rpmsg_trysend(rpdev->ept, (void *)buf, msg_size);
96 if (ret) {
97 dev_dbg_ratelimited(&rpdev->dev, "rpmsg_send failed: %d\n", ret);

--- 190 unchanged lines hidden ---
91
92 /*
93 * Use rpmsg_trysend instead of rpmsg_send to send the message so the caller is not
94 * hung until a rpmsg buffer is available. In such case rpmsg_trysend returns -ENOMEM.
95 */
96 ret = rpmsg_trysend(rpdev->ept, (void *)buf, msg_size);
97 if (ret) {
98 dev_dbg_ratelimited(&rpdev->dev, "rpmsg_send failed: %d\n", ret);

--- 190 unchanged lines hidden ---