mirror of
https://github.com/apache/nuttx.git
synced 2026-05-30 21:36:28 +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);
|
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,
|
int rpmsg_register_callback(FAR void *priv,
|
||||||
rpmsg_dev_cb_t device_created,
|
rpmsg_dev_cb_t device_created,
|
||||||
rpmsg_dev_cb_t device_destroy,
|
rpmsg_dev_cb_t device_destroy,
|
||||||
|
|||||||
@@ -70,6 +70,12 @@ struct rpmsg_s
|
|||||||
atomic_int signals;
|
atomic_int signals;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct rpmsg_timestamp_s
|
||||||
|
{
|
||||||
|
uint64_t tx_nsec;
|
||||||
|
uint64_t rx_nsec;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct rpmsg_ops_s - Rpmsg device operations
|
* struct rpmsg_ops_s - Rpmsg device operations
|
||||||
* wait: wait sem.
|
* 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 int (*ioctl)(FAR struct rpmsg_s *rpmsg, int cmd, unsigned long arg);
|
||||||
CODE void (*panic)(FAR struct rpmsg_s *rpmsg);
|
CODE void (*panic)(FAR struct rpmsg_s *rpmsg);
|
||||||
CODE void (*dump)(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,
|
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_local_cpuname(FAR struct rpmsg_device *rdev);
|
||||||
FAR const char *rpmsg_get_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_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)
|
static inline_function bool rpmsg_is_running(FAR struct rpmsg_device *rdev)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user