DPDK  18.11.6
rte_event_timer_adapter.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc.
3  * Copyright(c) 2017-2018 Intel Corporation.
4  * All rights reserved.
5  */
6 
7 #ifndef __RTE_EVENT_TIMER_ADAPTER_H__
8 #define __RTE_EVENT_TIMER_ADAPTER_H__
9 
110 #ifdef __cplusplus
111 extern "C" {
112 #endif
113 
114 #include <rte_spinlock.h>
115 #include <rte_memory.h>
116 
117 #include "rte_eventdev.h"
118 
136 };
137 
138 #define RTE_EVENT_TIMER_ADAPTER_F_ADJUST_RES (1ULL << 0)
139 
150 #define RTE_EVENT_TIMER_ADAPTER_F_SP_PUT (1ULL << 1)
151 
163  uint8_t event_dev_id;
167  uint32_t socket_id;
171  uint64_t timer_tick_ns;
173  uint64_t max_tmo_ns;
175  uint64_t nb_timers;
177  uint64_t flags;
179 };
180 
188  uint64_t evtim_exp_count;
190  uint64_t ev_enq_count;
192  uint64_t ev_inv_count;
198 };
199 
200 struct rte_event_timer_adapter;
201 
208 typedef int (*rte_event_timer_adapter_port_conf_cb_t)(uint16_t id,
209  uint8_t event_dev_id,
210  uint8_t *event_port_id,
211  void *conf_arg);
212 
238 struct rte_event_timer_adapter * __rte_experimental
240 
268 struct rte_event_timer_adapter * __rte_experimental
270  const struct rte_event_timer_adapter_conf *conf,
272  void *conf_arg);
273 
283  uint64_t max_tmo_ns;
287  uint32_t caps;
291 };
292 
316 int __rte_experimental
318  const struct rte_event_timer_adapter *adapter,
319  struct rte_event_timer_adapter_info *adapter_info);
320 
343 int __rte_experimental
345  const struct rte_event_timer_adapter *adapter);
346 
364 int __rte_experimental
365 rte_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter);
366 
386 struct rte_event_timer_adapter * __rte_experimental
387 rte_event_timer_adapter_lookup(uint16_t adapter_id);
388 
410 int __rte_experimental
411 rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter);
412 
428 int __rte_experimental
429 rte_event_timer_adapter_service_id_get(struct rte_event_timer_adapter *adapter,
430  uint32_t *service_id);
431 
447 int __rte_experimental
448 rte_event_timer_adapter_stats_get(struct rte_event_timer_adapter *adapter,
449  struct rte_event_timer_adapter_stats *stats);
450 
464 int __rte_experimental
465 rte_event_timer_adapter_stats_reset(struct rte_event_timer_adapter *adapter);
466 
488 };
489 
499  struct rte_event ev;
514  uint64_t timeout_ticks;
519  uint64_t impl_opaque[2];
525  uint8_t user_meta[0];
530 
531 typedef uint16_t (*rte_event_timer_arm_burst_t)(
532  const struct rte_event_timer_adapter *adapter,
533  struct rte_event_timer **tims,
534  uint16_t nb_tims);
536 typedef uint16_t (*rte_event_timer_arm_tmo_tick_burst_t)(
537  const struct rte_event_timer_adapter *adapter,
538  struct rte_event_timer **tims,
539  uint64_t timeout_tick,
540  uint16_t nb_tims);
542 typedef uint16_t (*rte_event_timer_cancel_burst_t)(
543  const struct rte_event_timer_adapter *adapter,
544  struct rte_event_timer **tims,
545  uint16_t nb_tims);
551 struct rte_event_timer_adapter {
552  rte_event_timer_arm_burst_t arm_burst;
554  rte_event_timer_arm_tmo_tick_burst_t arm_tmo_tick_burst;
556  rte_event_timer_cancel_burst_t cancel_burst;
558  struct rte_event_timer_adapter_data *data;
560  const struct rte_event_timer_adapter_ops *ops;
564  uint8_t allocated : 1;
567 
568 #define ADAPTER_VALID_OR_ERR_RET(adapter, retval) do { \
569  if (adapter == NULL || !adapter->allocated) \
570  return retval; \
571 } while (0)
572 
573 #define FUNC_PTR_OR_ERR_RET(func, errval) do { \
574  if ((func) == NULL) \
575  return errval; \
576 } while (0)
577 
578 #define FUNC_PTR_OR_NULL_RET_WITH_ERRNO(func, errval) do { \
579  if ((func) == NULL) { \
580  rte_errno = errval; \
581  return NULL; \
582  } \
583 } while (0)
584 
619 static inline uint16_t __rte_experimental
620 rte_event_timer_arm_burst(const struct rte_event_timer_adapter *adapter,
621  struct rte_event_timer **evtims,
622  uint16_t nb_evtims)
623 {
624 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
625  ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
626  FUNC_PTR_OR_ERR_RET(adapter->arm_burst, -EINVAL);
627 #endif
628  return adapter->arm_burst(adapter, evtims, nb_evtims);
629 }
630 
663 static inline uint16_t __rte_experimental
665  const struct rte_event_timer_adapter *adapter,
666  struct rte_event_timer **evtims,
667  const uint64_t timeout_ticks,
668  const uint16_t nb_evtims)
669 {
670 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
671  ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
672  FUNC_PTR_OR_ERR_RET(adapter->arm_tmo_tick_burst, -EINVAL);
673 #endif
674  return adapter->arm_tmo_tick_burst(adapter, evtims, timeout_ticks,
675  nb_evtims);
676 }
677 
701 static inline uint16_t __rte_experimental
702 rte_event_timer_cancel_burst(const struct rte_event_timer_adapter *adapter,
703  struct rte_event_timer **evtims,
704  uint16_t nb_evtims)
705 {
706 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
707  ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
708  FUNC_PTR_OR_ERR_RET(adapter->cancel_burst, -EINVAL);
709 #endif
710  return adapter->cancel_burst(adapter, evtims, nb_evtims);
711 }
712 
713 #endif /* __RTE_EVENT_TIMER_ADAPTER_H__ */
RTE_EVENT_TIMER_ARMED
Definition: rte_event_timer_adapter.h:476
rte_event_timer_adapter_conf::timer_tick_ns
uint64_t timer_tick_ns
Definition: rte_event_timer_adapter.h:171
rte_memory.h
RTE_EVENT_TIMER_ADAPTER_EXT_CLK1
Definition: rte_event_timer_adapter.h:130
rte_event_timer_adapter_conf::nb_timers
uint64_t nb_timers
Definition: rte_event_timer_adapter.h:175
rte_event_timer_adapter_stats
Definition: rte_event_timer_adapter.h:187
rte_event_timer_adapter_free
int __rte_experimental rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter)
rte_event_timer
Definition: rte_event_timer_adapter.h:498
rte_event_timer_cancel_burst
static uint16_t __rte_experimental rte_event_timer_cancel_burst(const struct rte_event_timer_adapter *adapter, struct rte_event_timer **evtims, uint16_t nb_evtims)
Definition: rte_event_timer_adapter.h:702
rte_event_timer_adapter_start
int __rte_experimental rte_event_timer_adapter_start(const struct rte_event_timer_adapter *adapter)
rte_event_timer::state
enum rte_event_timer_state state
Definition: rte_event_timer_adapter.h:512
rte_event_timer_adapter_conf::socket_id
uint32_t socket_id
Definition: rte_event_timer_adapter.h:167
rte_event_timer_adapter_info::min_resolution_ns
uint64_t min_resolution_ns
Definition: rte_event_timer_adapter.h:281
RTE_EVENT_TIMER_ADAPTER_CPU_CLK
Definition: rte_event_timer_adapter.h:126
rte_event_timer_adapter_stop
int __rte_experimental rte_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter)
rte_event_timer_adapter_stats::evtim_retry_count
uint64_t evtim_retry_count
Definition: rte_event_timer_adapter.h:194
RTE_EVENT_TIMER_ADAPTER_EXT_CLK3
Definition: rte_event_timer_adapter.h:134
rte_event_timer::timeout_ticks
uint64_t timeout_ticks
Definition: rte_event_timer_adapter.h:514
rte_event_timer_adapter_stats_reset
int __rte_experimental rte_event_timer_adapter_stats_reset(struct rte_event_timer_adapter *adapter)
rte_event_timer_adapter_conf
Definition: rte_event_timer_adapter.h:162
RTE_EVENT_TIMER_ADAPTER_EXT_CLK0
Definition: rte_event_timer_adapter.h:128
rte_event_timer_adapter_stats::evtim_exp_count
uint64_t evtim_exp_count
Definition: rte_event_timer_adapter.h:188
rte_event_timer_adapter_stats::adapter_tick_count
uint64_t adapter_tick_count
Definition: rte_event_timer_adapter.h:196
rte_event_timer_adapter_info::event_dev_port_id
int16_t event_dev_port_id
Definition: rte_event_timer_adapter.h:289
rte_event_timer_adapter_port_conf_cb_t
int(* rte_event_timer_adapter_port_conf_cb_t)(uint16_t id, uint8_t event_dev_id, uint8_t *event_port_id, void *conf_arg)
Definition: rte_event_timer_adapter.h:208
rte_event_timer_adapter_stats::ev_inv_count
uint64_t ev_inv_count
Definition: rte_event_timer_adapter.h:192
rte_spinlock.h
rte_event_timer::ev
struct rte_event ev
Definition: rte_event_timer_adapter.h:499
rte_event_timer_adapter_stats::ev_enq_count
uint64_t ev_enq_count
Definition: rte_event_timer_adapter.h:190
RTE_EVENT_TIMER_CANCELED
Definition: rte_event_timer_adapter.h:478
rte_event
Definition: rte_eventdev.h:1006
rte_event_timer::impl_opaque
uint64_t impl_opaque[2]
Definition: rte_event_timer_adapter.h:519
rte_event_timer_adapter_conf::flags
uint64_t flags
Definition: rte_event_timer_adapter.h:177
rte_event_timer_adapter_service_id_get
int __rte_experimental rte_event_timer_adapter_service_id_get(struct rte_event_timer_adapter *adapter, uint32_t *service_id)
rte_event_timer_adapter_clk_src
rte_event_timer_adapter_clk_src
Definition: rte_event_timer_adapter.h:125
RTE_STD_C11
#define RTE_STD_C11
Definition: rte_common.h:37
rte_event_timer_adapter_get_info
int __rte_experimental rte_event_timer_adapter_get_info(const struct rte_event_timer_adapter *adapter, struct rte_event_timer_adapter_info *adapter_info)
rte_event_timer_adapter_create_ext
struct rte_event_timer_adapter *__rte_experimental rte_event_timer_adapter_create_ext(const struct rte_event_timer_adapter_conf *conf, rte_event_timer_adapter_port_conf_cb_t conf_cb, void *conf_arg)
RTE_EVENT_TIMER_NOT_ARMED
Definition: rte_event_timer_adapter.h:474
rte_event_timer_adapter_conf::max_tmo_ns
uint64_t max_tmo_ns
Definition: rte_event_timer_adapter.h:173
rte_event_timer_state
rte_event_timer_state
Definition: rte_event_timer_adapter.h:473
RTE_EVENT_TIMER_ERROR_TOOLATE
Definition: rte_event_timer_adapter.h:486
RTE_EVENT_TIMER_ADAPTER_EXT_CLK2
Definition: rte_event_timer_adapter.h:132
rte_event_timer_arm_tmo_tick_burst
static uint16_t __rte_experimental rte_event_timer_arm_tmo_tick_burst(const struct rte_event_timer_adapter *adapter, struct rte_event_timer **evtims, const uint64_t timeout_ticks, const uint16_t nb_evtims)
Definition: rte_event_timer_adapter.h:664
rte_event_timer_adapter_conf::timer_adapter_id
uint16_t timer_adapter_id
Definition: rte_event_timer_adapter.h:165
RTE_EVENT_TIMER_ERROR_TOOEARLY
Definition: rte_event_timer_adapter.h:482
rte_event_timer_adapter_create
struct rte_event_timer_adapter *__rte_experimental rte_event_timer_adapter_create(const struct rte_event_timer_adapter_conf *conf)
rte_event_timer_adapter_info::caps
uint32_t caps
Definition: rte_event_timer_adapter.h:287
rte_event_timer_adapter_info
Definition: rte_event_timer_adapter.h:280
RTE_EVENT_TIMER_ERROR
Definition: rte_event_timer_adapter.h:480
__rte_cache_aligned
#define __rte_cache_aligned
Definition: rte_memory.h:66
rte_event_timer_adapter_conf::clk_src
enum rte_event_timer_adapter_clk_src clk_src
Definition: rte_event_timer_adapter.h:169
rte_event_timer_adapter_info::max_tmo_ns
uint64_t max_tmo_ns
Definition: rte_event_timer_adapter.h:283
rte_event_timer_adapter_conf::event_dev_id
uint8_t event_dev_id
Definition: rte_event_timer_adapter.h:163
rte_event_timer_adapter_info::conf
struct rte_event_timer_adapter_conf conf
Definition: rte_event_timer_adapter.h:285
rte_event_timer::user_meta
uint8_t user_meta[0]
Definition: rte_event_timer_adapter.h:525
rte_eventdev.h
rte_event_timer_arm_burst
static uint16_t __rte_experimental rte_event_timer_arm_burst(const struct rte_event_timer_adapter *adapter, struct rte_event_timer **evtims, uint16_t nb_evtims)
Definition: rte_event_timer_adapter.h:620
rte_event_timer_adapter_stats_get
int __rte_experimental rte_event_timer_adapter_stats_get(struct rte_event_timer_adapter *adapter, struct rte_event_timer_adapter_stats *stats)
rte_event_timer_adapter_lookup
struct rte_event_timer_adapter *__rte_experimental rte_event_timer_adapter_lookup(uint16_t adapter_id)