aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-dpdk/odp_timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-dpdk/odp_timer.c')
-rw-r--r--platform/linux-dpdk/odp_timer.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/platform/linux-dpdk/odp_timer.c b/platform/linux-dpdk/odp_timer.c
index b5367b4c2..e6f4ffe86 100644
--- a/platform/linux-dpdk/odp_timer.c
+++ b/platform/linux-dpdk/odp_timer.c
@@ -492,12 +492,31 @@ uint64_t odp_timer_current_tick(odp_timer_pool_t tp)
int odp_timer_pool_info(odp_timer_pool_t tp,
odp_timer_pool_info_t *info)
{
- timer_pool_t *timer_pool = timer_pool_from_hdl(tp);
+ timer_pool_t *timer_pool;
+ uint64_t freq_hz = rte_get_timer_hz();
+
+ if (odp_unlikely(tp == ODP_TIMER_POOL_INVALID)) {
+ ODP_ERR("Invalid timer pool.\n");
+ return -1;
+ }
+
+ timer_pool = timer_pool_from_hdl(tp);
+ memset(info, 0, sizeof(odp_timer_pool_info_t));
info->param = timer_pool->param;
info->cur_timers = timer_pool->cur_timers;
info->hwm_timers = timer_pool->hwm_timers;
info->name = timer_pool->name;
+
+ info->tick_info.freq.integer = freq_hz;
+ info->tick_info.nsec.integer = SEC_IN_NS / freq_hz;
+ if (SEC_IN_NS % freq_hz) {
+ info->tick_info.nsec.numer = SEC_IN_NS - (info->tick_info.nsec.integer * freq_hz);
+ info->tick_info.nsec.denom = freq_hz;
+ }
+ /* Leave source clock information to zero as there is no direct link
+ * between a source clock signal and a timer tick. */
+
return 0;
}