DPDK  19.11.1
rte_timer.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef _RTE_TIMER_H_
6 #define _RTE_TIMER_H_
7 
37 #include <stdio.h>
38 #include <stdint.h>
39 #include <stddef.h>
40 #include <rte_common.h>
41 #include <rte_config.h>
42 #include <rte_spinlock.h>
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
48 #define RTE_TIMER_STOP 0
49 #define RTE_TIMER_PENDING 1
50 #define RTE_TIMER_RUNNING 2
51 #define RTE_TIMER_CONFIG 3
53 #define RTE_TIMER_NO_OWNER -2
58 enum rte_timer_type {
59  SINGLE,
60  PERIODICAL
61 };
62 
69  struct {
70  uint16_t state;
71  int16_t owner;
72  };
73  uint32_t u32;
74 };
75 
76 #ifdef RTE_LIBRTE_TIMER_DEBUG
77 
80 struct rte_timer_debug_stats {
81  uint64_t reset;
82  uint64_t stop;
83  uint64_t manage;
84  uint64_t pending;
85 };
86 #endif
87 
88 struct rte_timer;
89 
93 typedef void (*rte_timer_cb_t)(struct rte_timer *, void *);
94 
95 #define MAX_SKIPLIST_DEPTH 10
96 
100 struct rte_timer
101 {
102  uint64_t expire;
103  struct rte_timer *sl_next[MAX_SKIPLIST_DEPTH];
104  volatile union rte_timer_status status;
105  uint64_t period;
107  void *arg;
108 };
109 
110 
111 #ifdef __cplusplus
112 
115 #define RTE_TIMER_INITIALIZER { \
116  0, \
117  {NULL}, \
118  {{RTE_TIMER_STOP, RTE_TIMER_NO_OWNER}}, \
119  0, \
120  NULL, \
121  NULL, \
122  }
123 #else
124 
127 #define RTE_TIMER_INITIALIZER { \
128  .status = {{ \
129  .state = RTE_TIMER_STOP, \
130  .owner = RTE_TIMER_NO_OWNER, \
131  }}, \
132  }
133 #endif
134 
150 __rte_experimental
151 int rte_timer_data_alloc(uint32_t *id_ptr);
152 
166 __rte_experimental
167 int rte_timer_data_dealloc(uint32_t id);
168 
183 int rte_timer_subsystem_init(void);
184 
191 __rte_experimental
193 
204 void rte_timer_init(struct rte_timer *tim);
205 
248 int rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
249  enum rte_timer_type type, unsigned tim_lcore,
250  rte_timer_cb_t fct, void *arg);
251 
278 void
279 rte_timer_reset_sync(struct rte_timer *tim, uint64_t ticks,
280  enum rte_timer_type type, unsigned tim_lcore,
281  rte_timer_cb_t fct, void *arg);
282 
306 int rte_timer_stop(struct rte_timer *tim);
307 
317 void rte_timer_stop_sync(struct rte_timer *tim);
318 
332 int rte_timer_pending(struct rte_timer *tim);
333 
349 int rte_timer_manage(void);
350 
360 int rte_timer_dump_stats(FILE *f);
361 
400 __rte_experimental
401 int
402 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
403  uint64_t ticks, enum rte_timer_type type,
404  unsigned int tim_lcore, rte_timer_cb_t fct, void *arg);
405 
426 __rte_experimental
427 int
428 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim);
429 
433 typedef void (*rte_timer_alt_manage_cb_t)(struct rte_timer *tim);
434 
463 __rte_experimental
464 int
465 rte_timer_alt_manage(uint32_t timer_data_id, unsigned int *poll_lcores,
466  int n_poll_lcores, rte_timer_alt_manage_cb_t f);
467 
471 typedef void (*rte_timer_stop_all_cb_t)(struct rte_timer *tim, void *arg);
472 
496 __rte_experimental
497 int
498 rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
499  int nb_walk_lcores, rte_timer_stop_all_cb_t f, void *f_arg);
500 
519 __rte_experimental
520 int
521 rte_timer_alt_dump_stats(uint32_t timer_data_id, FILE *f);
522 
523 #ifdef __cplusplus
524 }
525 #endif
526 
527 #endif /* _RTE_TIMER_H_ */
rte_timer_status
Definition: rte_timer.h:67
rte_timer::f
rte_timer_cb_t f
Definition: rte_timer.h:106
rte_timer_reset
int rte_timer_reset(struct rte_timer *tim, uint64_t ticks, enum rte_timer_type type, unsigned tim_lcore, rte_timer_cb_t fct, void *arg)
rte_timer
Definition: rte_timer.h:100
rte_timer_alt_stop
__rte_experimental int rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim)
rte_timer_alt_manage_cb_t
void(* rte_timer_alt_manage_cb_t)(struct rte_timer *tim)
Definition: rte_timer.h:433
rte_timer_reset_sync
void rte_timer_reset_sync(struct rte_timer *tim, uint64_t ticks, enum rte_timer_type type, unsigned tim_lcore, rte_timer_cb_t fct, void *arg)
rte_timer::status
volatile union rte_timer_status status
Definition: rte_timer.h:104
rte_timer_alt_manage
__rte_experimental int rte_timer_alt_manage(uint32_t timer_data_id, unsigned int *poll_lcores, int n_poll_lcores, rte_timer_alt_manage_cb_t f)
rte_timer_data_alloc
__rte_experimental int rte_timer_data_alloc(uint32_t *id_ptr)
rte_timer_status::owner
int16_t owner
Definition: rte_timer.h:71
rte_timer_type
rte_timer_type
Definition: rte_timer.h:58
rte_timer_manage
int rte_timer_manage(void)
rte_timer_stop_all
__rte_experimental int rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores, int nb_walk_lcores, rte_timer_stop_all_cb_t f, void *f_arg)
rte_timer_data_dealloc
__rte_experimental int rte_timer_data_dealloc(uint32_t id)
rte_timer::arg
void * arg
Definition: rte_timer.h:107
rte_timer_cb_t
void(* rte_timer_cb_t)(struct rte_timer *, void *)
Definition: rte_timer.h:93
rte_timer_subsystem_init
int rte_timer_subsystem_init(void)
rte_timer_alt_dump_stats
__rte_experimental int rte_timer_alt_dump_stats(uint32_t timer_data_id, FILE *f)
rte_timer_status::u32
uint32_t u32
Definition: rte_timer.h:73
rte_timer_stop
int rte_timer_stop(struct rte_timer *tim)
rte_spinlock.h
rte_common.h
rte_timer_stop_sync
void rte_timer_stop_sync(struct rte_timer *tim)
rte_timer::expire
uint64_t expire
Definition: rte_timer.h:102
rte_timer_dump_stats
int rte_timer_dump_stats(FILE *f)
RTE_STD_C11
#define RTE_STD_C11
Definition: rte_common.h:40
rte_timer_pending
int rte_timer_pending(struct rte_timer *tim)
rte_timer_init
void rte_timer_init(struct rte_timer *tim)
rte_timer_alt_reset
__rte_experimental int rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim, uint64_t ticks, enum rte_timer_type type, unsigned int tim_lcore, rte_timer_cb_t fct, void *arg)
rte_timer_status::state
uint16_t state
Definition: rte_timer.h:70
rte_timer_stop_all_cb_t
void(* rte_timer_stop_all_cb_t)(struct rte_timer *tim, void *arg)
Definition: rte_timer.h:471
rte_timer_subsystem_finalize
__rte_experimental void rte_timer_subsystem_finalize(void)
rte_timer::period
uint64_t period
Definition: rte_timer.h:105