DPDK  19.11.1
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 
133 };
134 
135 #define RTE_EVENT_TIMER_ADAPTER_F_ADJUST_RES (1ULL << 0)
136 
147 #define RTE_EVENT_TIMER_ADAPTER_F_SP_PUT (1ULL << 1)
148 
157  uint8_t event_dev_id;
161  uint32_t socket_id;
165  uint64_t timer_tick_ns;
167  uint64_t max_tmo_ns;
169  uint64_t nb_timers;
171  uint64_t flags;
173 };
174 
179  uint64_t evtim_exp_count;
181  uint64_t ev_enq_count;
183  uint64_t ev_inv_count;
189 };
190 
191 struct rte_event_timer_adapter;
192 
196 typedef int (*rte_event_timer_adapter_port_conf_cb_t)(uint16_t id,
197  uint8_t event_dev_id,
198  uint8_t *event_port_id,
199  void *conf_arg);
200 
223 struct rte_event_timer_adapter *
225 
250 struct rte_event_timer_adapter *
252  const struct rte_event_timer_adapter_conf *conf,
254  void *conf_arg);
255 
262  uint64_t max_tmo_ns;
266  uint32_t caps;
270 };
271 
292 int
294  const struct rte_event_timer_adapter *adapter,
295  struct rte_event_timer_adapter_info *adapter_info);
296 
321 int
323  const struct rte_event_timer_adapter *adapter);
324 
339 int
340 rte_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter);
341 
358 struct rte_event_timer_adapter *
359 rte_event_timer_adapter_lookup(uint16_t adapter_id);
360 
379 int
380 rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter);
381 
397 int
398 rte_event_timer_adapter_service_id_get(struct rte_event_timer_adapter *adapter,
399  uint32_t *service_id);
400 
413 int
414 rte_event_timer_adapter_stats_get(struct rte_event_timer_adapter *adapter,
415  struct rte_event_timer_adapter_stats *stats);
416 
427 int
428 rte_event_timer_adapter_stats_reset(struct rte_event_timer_adapter *adapter);
429 
448 };
449 
456  struct rte_event ev;
471  uint64_t timeout_ticks;
476  uint64_t impl_opaque[2];
482  uint8_t user_meta[0];
487 
488 typedef uint16_t (*rte_event_timer_arm_burst_t)(
489  const struct rte_event_timer_adapter *adapter,
490  struct rte_event_timer **tims,
491  uint16_t nb_tims);
493 typedef uint16_t (*rte_event_timer_arm_tmo_tick_burst_t)(
494  const struct rte_event_timer_adapter *adapter,
495  struct rte_event_timer **tims,
496  uint64_t timeout_tick,
497  uint16_t nb_tims);
499 typedef uint16_t (*rte_event_timer_cancel_burst_t)(
500  const struct rte_event_timer_adapter *adapter,
501  struct rte_event_timer **tims,
502  uint16_t nb_tims);
508 struct rte_event_timer_adapter {
509  rte_event_timer_arm_burst_t arm_burst;
511  rte_event_timer_arm_tmo_tick_burst_t arm_tmo_tick_burst;
513  rte_event_timer_cancel_burst_t cancel_burst;
515  struct rte_event_timer_adapter_data *data;
517  const struct rte_event_timer_adapter_ops *ops;
521  uint8_t allocated : 1;
524 
525 #define ADAPTER_VALID_OR_ERR_RET(adapter, retval) do { \
526  if (adapter == NULL || !adapter->allocated) \
527  return retval; \
528 } while (0)
529 
530 #define FUNC_PTR_OR_ERR_RET(func, errval) do { \
531  if ((func) == NULL) \
532  return errval; \
533 } while (0)
534 
535 #define FUNC_PTR_OR_NULL_RET_WITH_ERRNO(func, errval) do { \
536  if ((func) == NULL) { \
537  rte_errno = errval; \
538  return NULL; \
539  } \
540 } while (0)
541 
573 static inline uint16_t
574 rte_event_timer_arm_burst(const struct rte_event_timer_adapter *adapter,
575  struct rte_event_timer **evtims,
576  uint16_t nb_evtims)
577 {
578 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
579  ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
580  FUNC_PTR_OR_ERR_RET(adapter->arm_burst, -EINVAL);
581 #endif
582  return adapter->arm_burst(adapter, evtims, nb_evtims);
583 }
584 
614 static inline uint16_t
616  const struct rte_event_timer_adapter *adapter,
617  struct rte_event_timer **evtims,
618  const uint64_t timeout_ticks,
619  const uint16_t nb_evtims)
620 {
621 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
622  ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
623  FUNC_PTR_OR_ERR_RET(adapter->arm_tmo_tick_burst, -EINVAL);
624 #endif
625  return adapter->arm_tmo_tick_burst(adapter, evtims, timeout_ticks,
626  nb_evtims);
627 }
628 
649 static inline uint16_t
650 rte_event_timer_cancel_burst(const struct rte_event_timer_adapter *adapter,
651  struct rte_event_timer **evtims,
652  uint16_t nb_evtims)
653 {
654 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
655  ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
656  FUNC_PTR_OR_ERR_RET(adapter->cancel_burst, -EINVAL);
657 #endif
658  return adapter->cancel_burst(adapter, evtims, nb_evtims);
659 }
660 
661 #endif /* __RTE_EVENT_TIMER_ADAPTER_H__ */
RTE_EVENT_TIMER_ARMED
@ RTE_EVENT_TIMER_ARMED
Definition: rte_event_timer_adapter.h:436
rte_event_timer_adapter_conf::timer_tick_ns
uint64_t timer_tick_ns
Definition: rte_event_timer_adapter.h:165
rte_event_timer_adapter_start
int rte_event_timer_adapter_start(const struct rte_event_timer_adapter *adapter)
rte_memory.h
RTE_EVENT_TIMER_ADAPTER_EXT_CLK1
@ RTE_EVENT_TIMER_ADAPTER_EXT_CLK1
Definition: rte_event_timer_adapter.h:127
rte_event_timer_adapter_conf::nb_timers
uint64_t nb_timers
Definition: rte_event_timer_adapter.h:169
rte_event_timer_arm_tmo_tick_burst
static uint16_t 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:615
rte_event_timer_adapter_stop
int rte_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter)
rte_event_timer_adapter_stats
Definition: rte_event_timer_adapter.h:178
rte_event_timer
Definition: rte_event_timer_adapter.h:455
rte_event_timer_adapter_service_id_get
int rte_event_timer_adapter_service_id_get(struct rte_event_timer_adapter *adapter, uint32_t *service_id)
rte_event_timer::state
enum rte_event_timer_state state
Definition: rte_event_timer_adapter.h:469
rte_event_timer_adapter_conf::socket_id
uint32_t socket_id
Definition: rte_event_timer_adapter.h:161
rte_event_timer_adapter_info::min_resolution_ns
uint64_t min_resolution_ns
Definition: rte_event_timer_adapter.h:260
rte_event_timer_adapter_get_info
int 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_CPU_CLK
@ RTE_EVENT_TIMER_ADAPTER_CPU_CLK
Definition: rte_event_timer_adapter.h:123
__rte_cache_aligned
#define __rte_cache_aligned
Definition: rte_common.h:317
rte_event_timer_adapter_stats::evtim_retry_count
uint64_t evtim_retry_count
Definition: rte_event_timer_adapter.h:185
rte_event_timer_adapter_create
struct rte_event_timer_adapter * rte_event_timer_adapter_create(const struct rte_event_timer_adapter_conf *conf)
RTE_EVENT_TIMER_ADAPTER_EXT_CLK3
@ RTE_EVENT_TIMER_ADAPTER_EXT_CLK3
Definition: rte_event_timer_adapter.h:131
rte_event_timer::timeout_ticks
uint64_t timeout_ticks
Definition: rte_event_timer_adapter.h:471
rte_event_timer_arm_burst
static uint16_t 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:574
rte_event_timer_adapter_conf
Definition: rte_event_timer_adapter.h:156
RTE_EVENT_TIMER_ADAPTER_EXT_CLK0
@ RTE_EVENT_TIMER_ADAPTER_EXT_CLK0
Definition: rte_event_timer_adapter.h:125
rte_event_timer_adapter_stats::evtim_exp_count
uint64_t evtim_exp_count
Definition: rte_event_timer_adapter.h:179
rte_event_timer_adapter_stats::adapter_tick_count
uint64_t adapter_tick_count
Definition: rte_event_timer_adapter.h:187
rte_event_timer_adapter_info::event_dev_port_id
int16_t event_dev_port_id
Definition: rte_event_timer_adapter.h:268
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:196
rte_event_timer_adapter_stats::ev_inv_count
uint64_t ev_inv_count
Definition: rte_event_timer_adapter.h:183
rte_spinlock.h
rte_event_timer::ev
struct rte_event ev
Definition: rte_event_timer_adapter.h:456
rte_event_timer_adapter_stats::ev_enq_count
uint64_t ev_enq_count
Definition: rte_event_timer_adapter.h:181
RTE_EVENT_TIMER_CANCELED
@ RTE_EVENT_TIMER_CANCELED
Definition: rte_event_timer_adapter.h:438
rte_event
Definition: rte_eventdev.h:1006
rte_event_timer::impl_opaque
uint64_t impl_opaque[2]
Definition: rte_event_timer_adapter.h:476
rte_event_timer_adapter_conf::flags
uint64_t flags
Definition: rte_event_timer_adapter.h:171
rte_event_timer_adapter_create_ext
struct rte_event_timer_adapter * 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_adapter_clk_src
rte_event_timer_adapter_clk_src
Definition: rte_event_timer_adapter.h:122
RTE_STD_C11
#define RTE_STD_C11
Definition: rte_common.h:40
rte_event_timer_adapter_stats_get
int rte_event_timer_adapter_stats_get(struct rte_event_timer_adapter *adapter, struct rte_event_timer_adapter_stats *stats)
RTE_EVENT_TIMER_NOT_ARMED
@ RTE_EVENT_TIMER_NOT_ARMED
Definition: rte_event_timer_adapter.h:434
rte_event_timer_adapter_conf::max_tmo_ns
uint64_t max_tmo_ns
Definition: rte_event_timer_adapter.h:167
rte_event_timer_cancel_burst
static uint16_t 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:650
rte_event_timer_state
rte_event_timer_state
Definition: rte_event_timer_adapter.h:433
RTE_EVENT_TIMER_ERROR_TOOLATE
@ RTE_EVENT_TIMER_ERROR_TOOLATE
Definition: rte_event_timer_adapter.h:446
rte_event_timer_adapter_free
int rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter)
rte_event_timer_adapter_stats_reset
int rte_event_timer_adapter_stats_reset(struct rte_event_timer_adapter *adapter)
RTE_EVENT_TIMER_ADAPTER_EXT_CLK2
@ RTE_EVENT_TIMER_ADAPTER_EXT_CLK2
Definition: rte_event_timer_adapter.h:129
rte_event_timer_adapter_conf::timer_adapter_id
uint16_t timer_adapter_id
Definition: rte_event_timer_adapter.h:159
RTE_EVENT_TIMER_ERROR_TOOEARLY
@ RTE_EVENT_TIMER_ERROR_TOOEARLY
Definition: rte_event_timer_adapter.h:442
rte_event_timer_adapter_info::caps
uint32_t caps
Definition: rte_event_timer_adapter.h:266
rte_event_timer_adapter_info
Definition: rte_event_timer_adapter.h:259
rte_event_timer_adapter_lookup
struct rte_event_timer_adapter * rte_event_timer_adapter_lookup(uint16_t adapter_id)
RTE_EVENT_TIMER_ERROR
@ RTE_EVENT_TIMER_ERROR
Definition: rte_event_timer_adapter.h:440
rte_event_timer_adapter_conf::clk_src
enum rte_event_timer_adapter_clk_src clk_src
Definition: rte_event_timer_adapter.h:163
rte_event_timer_adapter_info::max_tmo_ns
uint64_t max_tmo_ns
Definition: rte_event_timer_adapter.h:262
rte_event_timer_adapter_conf::event_dev_id
uint8_t event_dev_id
Definition: rte_event_timer_adapter.h:157
rte_event_timer_adapter_info::conf
struct rte_event_timer_adapter_conf conf
Definition: rte_event_timer_adapter.h:264
rte_event_timer::user_meta
uint8_t user_meta[0]
Definition: rte_event_timer_adapter.h:482
rte_eventdev.h