mirror of
https://github.com/apache/nuttx.git
synced 2026-05-23 06:39:01 +08:00
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 <liaoao@xiaomi.com> Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user