From 0f0b3f6417938001e8bb10e72929967faf0c1dea Mon Sep 17 00:00:00 2001 From: Matias Elo Date: Mon, 2 May 2022 11:00:08 +0300 Subject: Port b81e13439 "linux-gen: timer: inline small timer functions" Port original commit from linux-generic. Signed-off-by: Matias Elo Reviewed-by: Tuomas Taipale --- .../include/odp/api/plat/timer_inline_types.h | 37 +++++++++++++ .../include/odp/api/plat/timer_inlines.h | 60 ++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h create mode 100644 platform/linux-dpdk/include/odp/api/plat/timer_inlines.h (limited to 'platform/linux-dpdk/include/odp') diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h b/platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h new file mode 100644 index 000000000..e3397c4df --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/timer_inline_types.h @@ -0,0 +1,37 @@ +/* Copyright (c) 2022, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_PLAT_TIMER_INLINE_TYPES_H_ +#define ODP_PLAT_TIMER_INLINE_TYPES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ + +/* Timeout header field accessor */ +#define _odp_timeout_hdr_field(hdr, cast, field) \ + (*(cast *)(uintptr_t)((uint8_t *)hdr + \ + _odp_timeout_inline_offset.field)) + +/* Timeout header field offsets for inline functions */ +typedef struct _odp_timeout_inline_offset_t { + uint16_t expiration; + uint16_t timer; + uint16_t user_ptr; + +} _odp_timeout_inline_offset_t; + +/** @endcond */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h b/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h new file mode 100644 index 000000000..270a6769b --- /dev/null +++ b/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2022, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_PLAT_TIMER_INLINES_H_ +#define ODP_PLAT_TIMER_INLINES_H_ + +#include +#include + +#include + +#include + +/** @cond _ODP_HIDE_FROM_DOXYGEN_ */ + +extern const _odp_timeout_inline_offset_t _odp_timeout_inline_offset; + +#ifndef _ODP_NO_INLINE + /* Inline functions by default */ + #define _ODP_INLINE static inline + #define odp_timeout_timer __odp_timeout_timer + #define odp_timeout_tick __odp_timeout_tick + #define odp_timeout_user_ptr __odp_timeout_user_ptr + #define odp_timeout_from_event __odp_timeout_from_event + #define odp_timeout_to_event __odp_timeout_to_event +#else + #define _ODP_INLINE +#endif + +_ODP_INLINE odp_timer_t odp_timeout_timer(odp_timeout_t tmo) +{ + return _odp_timeout_hdr_field(tmo, odp_timer_t, timer); +} + +_ODP_INLINE uint64_t odp_timeout_tick(odp_timeout_t tmo) +{ + return _odp_timeout_hdr_field(tmo, uint64_t, expiration); +} + +_ODP_INLINE void *odp_timeout_user_ptr(odp_timeout_t tmo) +{ + return _odp_timeout_hdr_field(tmo, void *, user_ptr); +} + +_ODP_INLINE odp_timeout_t odp_timeout_from_event(odp_event_t ev) +{ + return (odp_timeout_t)ev; +} + +_ODP_INLINE odp_event_t odp_timeout_to_event(odp_timeout_t tmo) +{ + return (odp_event_t)tmo; +} + +/** @endcond */ + +#endif -- cgit v1.2.3