aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-dpdk/include
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-dpdk/include')
l---------platform/linux-dpdk/include/odp/api/plat/dma_inlines.h1
-rw-r--r--platform/linux-dpdk/include/odp/api/plat/time_inlines.h180
-rw-r--r--platform/linux-dpdk/include/odp/api/plat/timer_inlines.h12
-rw-r--r--platform/linux-dpdk/include/odp_pool_internal.h1
4 files changed, 115 insertions, 79 deletions
diff --git a/platform/linux-dpdk/include/odp/api/plat/dma_inlines.h b/platform/linux-dpdk/include/odp/api/plat/dma_inlines.h
new file mode 120000
index 000000000..5b60f374e
--- /dev/null
+++ b/platform/linux-dpdk/include/odp/api/plat/dma_inlines.h
@@ -0,0 +1 @@
+../../../../../linux-generic/include/odp/api/plat/dma_inlines.h \ No newline at end of file
diff --git a/platform/linux-dpdk/include/odp/api/plat/time_inlines.h b/platform/linux-dpdk/include/odp/api/plat/time_inlines.h
index 4b1320300..8e4eec59c 100644
--- a/platform/linux-dpdk/include/odp/api/plat/time_inlines.h
+++ b/platform/linux-dpdk/include/odp/api/plat/time_inlines.h
@@ -12,125 +12,116 @@
#include <odp/api/hints.h>
#include <odp/api/time_types.h>
-#include <odp/api/abi/cpu_time.h>
+#include <rte_config.h>
+#include <rte_atomic.h>
+#include <rte_cycles.h>
#include <stdint.h>
/** @cond _ODP_HIDE_FROM_DOXYGEN_ */
-#define _ODP_TIMESPEC_SIZE 16
-#define _ODP_TIME_GIGA_HZ 1000000000ULL
-
-typedef odp_time_t (*time_cur_fn)(void);
-typedef odp_time_t (*time_cur_strict_fn)(void);
-typedef uint64_t (*time_res_fn)(void);
-
-typedef struct time_handler_ {
- time_cur_fn time_cur;
- time_cur_strict_fn time_cur_strict;
- time_res_fn time_res;
-
-} time_handler_t;
-
typedef struct _odp_time_global_t {
- /* Storage space for struct timespec. Posix headers are not included
- * here to avoid application exposure. */
- uint8_t timespec[_ODP_TIMESPEC_SIZE] ODP_ALIGNED(_ODP_TIMESPEC_SIZE);
-
- int use_hw;
- uint64_t hw_start;
- uint64_t hw_freq_hz;
- /* DPDK specific */
- time_handler_t handler;
+ uint64_t start_cycles;
+ uint64_t freq_hz;
} _odp_time_global_t;
extern _odp_time_global_t _odp_time_glob;
-odp_time_t _odp_timespec_cur(void);
-
-static inline odp_time_t _odp_time_cur_gen(void)
+static inline odp_time_t _odp_time_cur(void)
{
- if (_odp_time_glob.use_hw) {
- odp_time_t time;
+ odp_time_t time;
- time.count = _odp_cpu_global_time() - _odp_time_glob.hw_start;
- return time;
- }
+ time.u64 = rte_get_timer_cycles() - _odp_time_glob.start_cycles;
- return _odp_timespec_cur();
+ return time;
}
-static inline odp_time_t _odp_time_cur_gen_strict(void)
+static inline odp_time_t _odp_time_cur_strict(void)
{
- if (_odp_time_glob.use_hw) {
- odp_time_t time;
-
- time.count = _odp_cpu_global_time_strict() - _odp_time_glob.hw_start;
- return time;
- }
+ odp_time_t time;
- return _odp_timespec_cur();
-}
+ rte_mb();
+ time.u64 = rte_get_timer_cycles() - _odp_time_glob.start_cycles;
-static inline odp_time_t _odp_time_cur(void)
-{
- return _odp_time_glob.handler.time_cur();
-}
-
-static inline odp_time_t _odp_time_cur_strict(void)
-{
- return _odp_time_glob.handler.time_cur_strict();
+ return time;
}
-static inline uint64_t _odp_time_hw_to_ns(odp_time_t time)
+static inline uint64_t _odp_time_to_ns(odp_time_t time)
{
uint64_t nsec;
- uint64_t freq_hz = _odp_time_glob.hw_freq_hz;
uint64_t count = time.count;
uint64_t sec = 0;
+ const uint64_t freq_hz = _odp_time_glob.freq_hz;
+ const uint64_t giga_hz = 1000000000;
if (count >= freq_hz) {
sec = count / freq_hz;
count = count - sec * freq_hz;
}
- nsec = (_ODP_TIME_GIGA_HZ * count) / freq_hz;
+ nsec = (giga_hz * count) / freq_hz;
- return (sec * _ODP_TIME_GIGA_HZ) + nsec;
+ return (sec * giga_hz) + nsec;
}
-static inline uint64_t _odp_time_convert_to_ns(odp_time_t time)
+static inline odp_time_t _odp_time_from_ns(uint64_t ns)
{
- if (_odp_time_glob.use_hw)
- return _odp_time_hw_to_ns(time);
+ odp_time_t time;
+ uint64_t count;
+ uint64_t sec = 0;
+ const uint64_t freq_hz = _odp_time_glob.freq_hz;
+
+ if (ns >= ODP_TIME_SEC_IN_NS) {
+ sec = ns / ODP_TIME_SEC_IN_NS;
+ ns = ns - sec * ODP_TIME_SEC_IN_NS;
+ }
- return time.nsec;
+ count = sec * freq_hz;
+ count += (ns * freq_hz) / ODP_TIME_SEC_IN_NS;
+
+ time.count = count;
+
+ return time;
}
#ifndef _ODP_NO_INLINE
/* Inline functions by default */
#define _ODP_INLINE static inline
- #define odp_time_local __odp_time_local
- #define odp_time_global __odp_time_global
- #define odp_time_to_ns __odp_time_to_ns
- #define odp_time_local_ns __odp_time_local_ns
- #define odp_time_global_ns __odp_time_global_ns
-
- #define odp_time_local_strict __odp_time_local_strict
- #define odp_time_global_strict __odp_time_global_strict
- #define odp_time_local_strict_ns __odp_time_local_strict_ns
- #define odp_time_global_strict_ns __odp_time_global_strict_ns
-
- #define odp_time_cmp __odp_time_cmp
- #define odp_time_diff __odp_time_diff
- #define odp_time_diff_ns __odp_time_diff_ns
- #define odp_time_sum __odp_time_sum
+ #define odp_time_local_res __odp_time_local_res
+ #define odp_time_global_res __odp_time_global_res
+ #define odp_time_local __odp_time_local
+ #define odp_time_global __odp_time_global
+ #define odp_time_local_strict __odp_time_local_strict
+ #define odp_time_global_strict __odp_time_global_strict
+ #define odp_time_local_ns __odp_time_local_ns
+ #define odp_time_global_ns __odp_time_global_ns
+ #define odp_time_local_from_ns __odp_time_local_from_ns
+ #define odp_time_global_from_ns __odp_time_global_from_ns
+ #define odp_time_local_strict_ns __odp_time_local_strict_ns
+ #define odp_time_global_strict_ns __odp_time_global_strict_ns
+ #define odp_time_to_ns __odp_time_to_ns
+ #define odp_time_cmp __odp_time_cmp
+ #define odp_time_diff __odp_time_diff
+ #define odp_time_diff_ns __odp_time_diff_ns
+ #define odp_time_sum __odp_time_sum
+ #define odp_time_wait_ns __odp_time_wait_ns
+ #define odp_time_wait_until __odp_time_wait_until
#else
#define _ODP_INLINE
#endif
+_ODP_INLINE uint64_t odp_time_local_res(void)
+{
+ return _odp_time_glob.freq_hz;
+}
+
+_ODP_INLINE uint64_t odp_time_global_res(void)
+{
+ return _odp_time_glob.freq_hz;
+}
+
_ODP_INLINE odp_time_t odp_time_local(void)
{
return _odp_time_cur();
@@ -153,27 +144,37 @@ _ODP_INLINE odp_time_t odp_time_global_strict(void)
_ODP_INLINE uint64_t odp_time_local_ns(void)
{
- return _odp_time_convert_to_ns(_odp_time_cur());
+ return _odp_time_to_ns(_odp_time_cur());
}
_ODP_INLINE uint64_t odp_time_global_ns(void)
{
- return _odp_time_convert_to_ns(_odp_time_cur());
+ return _odp_time_to_ns(_odp_time_cur());
+}
+
+_ODP_INLINE odp_time_t odp_time_local_from_ns(uint64_t ns)
+{
+ return _odp_time_from_ns(ns);
+}
+
+_ODP_INLINE odp_time_t odp_time_global_from_ns(uint64_t ns)
+{
+ return _odp_time_from_ns(ns);
}
_ODP_INLINE uint64_t odp_time_local_strict_ns(void)
{
- return _odp_time_convert_to_ns(_odp_time_cur_strict());
+ return _odp_time_to_ns(_odp_time_cur_strict());
}
_ODP_INLINE uint64_t odp_time_global_strict_ns(void)
{
- return _odp_time_convert_to_ns(_odp_time_cur_strict());
+ return _odp_time_to_ns(_odp_time_cur_strict());
}
_ODP_INLINE uint64_t odp_time_to_ns(odp_time_t time)
{
- return _odp_time_convert_to_ns(time);
+ return _odp_time_to_ns(time);
}
_ODP_INLINE int odp_time_cmp(odp_time_t t2, odp_time_t t1)
@@ -214,6 +215,29 @@ _ODP_INLINE odp_time_t odp_time_sum(odp_time_t t1, odp_time_t t2)
return time;
}
+static inline void _odp_time_wait_until(odp_time_t time)
+{
+ odp_time_t cur;
+
+ do {
+ cur = _odp_time_cur();
+ } while (odp_time_cmp(time, cur) > 0);
+}
+
+_ODP_INLINE void odp_time_wait_ns(uint64_t ns)
+{
+ const odp_time_t cur = _odp_time_cur();
+ const odp_time_t wait = _odp_time_from_ns(ns);
+ const odp_time_t end_time = odp_time_sum(cur, wait);
+
+ _odp_time_wait_until(end_time);
+}
+
+_ODP_INLINE void odp_time_wait_until(odp_time_t time)
+{
+ _odp_time_wait_until(time);
+}
+
/** @endcond */
#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
index 357d4df06..66327acdb 100644
--- a/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h
+++ b/platform/linux-dpdk/include/odp/api/plat/timer_inlines.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2022, Nokia
+/* Copyright (c) 2022-2023, Nokia
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
@@ -25,6 +25,7 @@
#define odp_timeout_user_ptr __odp_timeout_user_ptr
#define odp_timeout_user_area __odp_timeout_user_area
#define odp_timeout_from_event __odp_timeout_from_event
+ #define odp_timeout_from_event_multi __odp_timeout_from_event_multi
#define odp_timeout_to_event __odp_timeout_to_event
#else
#define _ODP_INLINE
@@ -57,6 +58,15 @@ _ODP_INLINE odp_timeout_t odp_timeout_from_event(odp_event_t ev)
return (odp_timeout_t)ev;
}
+_ODP_INLINE void odp_timeout_from_event_multi(odp_timeout_t tmo[], const odp_event_t ev[], int num)
+{
+ for (int i = 0; i < num; i++) {
+ _ODP_ASSERT(odp_event_type(ev[i]) == ODP_EVENT_TIMEOUT);
+
+ tmo[i] = (odp_timeout_t)ev[i];
+ }
+}
+
_ODP_INLINE odp_event_t odp_timeout_to_event(odp_timeout_t tmo)
{
return (odp_event_t)tmo;
diff --git a/platform/linux-dpdk/include/odp_pool_internal.h b/platform/linux-dpdk/include/odp_pool_internal.h
index b82324a77..8512806f7 100644
--- a/platform/linux-dpdk/include/odp_pool_internal.h
+++ b/platform/linux-dpdk/include/odp_pool_internal.h
@@ -83,6 +83,7 @@ typedef struct ODP_ALIGNED_CACHE {
odp_pool_ext_param_t ext_param;
odp_shm_t uarea_shm;
uint64_t uarea_shm_size;
+ uint32_t param_uarea_size;
uint32_t uarea_size;
uint32_t trailer_size; /* Endmark size */
uint8_t *uarea_base_addr;