This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 198a8fe10898af6ce6eeb92d55741976efe5748d Author: liaoao <[email protected]> AuthorDate: Tue Feb 25 15:15:43 2025 +0800 drivers/rpmsg: add rpmsg_get_timestamp to retrieve buffer timestamps Add rpmsg_get_timestamp() API to get the TX/RX timestamps of an rpmsg buffer. This is useful for latency measurement and debugging purposes. The new rpmsg_timestamp_s structure contains: - tx_nsec: timestamp when the buffer was transmitted - rx_nsec: timestamp when the buffer was received Signed-off-by: liaoao <[email protected]> Signed-off-by: Bowen Wang <[email protected]> --- drivers/rpmsg/rpmsg.c | 13 +++++++++++++ include/nuttx/rpmsg/rpmsg.h | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/drivers/rpmsg/rpmsg.c b/drivers/rpmsg/rpmsg.c index 58bc6744e84..c25e29c8712 100644 --- a/drivers/rpmsg/rpmsg.c +++ b/drivers/rpmsg/rpmsg.c @@ -219,6 +219,19 @@ int rpmsg_get_signals(FAR struct rpmsg_device *rdev) return atomic_read(&rpmsg->signals); } +int rpmsg_get_timestamp(FAR struct rpmsg_device *rdev, FAR const void *data, + FAR struct rpmsg_timestamp_s *ts) +{ + FAR struct rpmsg_s *rpmsg = rpmsg_get_by_rdev(rdev); + + if (!rpmsg || !data || !ts || !rpmsg->ops->get_timestamp) + { + return -EINVAL; + } + + return rpmsg->ops->get_timestamp(rpmsg, data, ts); +} + int rpmsg_register_callback(FAR void *priv, rpmsg_dev_cb_t device_created, rpmsg_dev_cb_t device_destroy, diff --git a/include/nuttx/rpmsg/rpmsg.h b/include/nuttx/rpmsg/rpmsg.h index 08ef10da8c6..e4f19cc88dd 100644 --- a/include/nuttx/rpmsg/rpmsg.h +++ b/include/nuttx/rpmsg/rpmsg.h @@ -70,6 +70,12 @@ struct rpmsg_s atomic_int signals; }; +struct rpmsg_timestamp_s +{ + uint64_t tx_nsec; + uint64_t rx_nsec; +}; + /** * struct rpmsg_ops_s - Rpmsg device operations * wait: wait sem. @@ -84,6 +90,8 @@ struct rpmsg_ops_s CODE int (*ioctl)(FAR struct rpmsg_s *rpmsg, int cmd, unsigned long arg); CODE void (*panic)(FAR struct rpmsg_s *rpmsg); CODE void (*dump)(FAR struct rpmsg_s *rpmsg); + CODE int (*get_timestamp)(FAR struct rpmsg_s *rpmsg, FAR const void *data, + FAR struct rpmsg_timestamp_s *ts); }; CODE typedef void (*rpmsg_dev_cb_t)(FAR struct rpmsg_device *rdev, @@ -113,6 +121,8 @@ int rpmsg_post(FAR struct rpmsg_endpoint *ept, FAR sem_t *sem); FAR const char *rpmsg_get_local_cpuname(FAR struct rpmsg_device *rdev); FAR const char *rpmsg_get_cpuname(FAR struct rpmsg_device *rdev); int rpmsg_get_signals(FAR struct rpmsg_device *rdev); +int rpmsg_get_timestamp(FAR struct rpmsg_device *rdev, FAR const void *data, + FAR struct rpmsg_timestamp_s *ts); static inline_function bool rpmsg_is_running(FAR struct rpmsg_device *rdev) {
