* - 0: Success
* - -ENOSPC: maximum number of timer data instances already allocated
*/
-int __rte_experimental rte_timer_data_alloc(uint32_t *id_ptr);
+__rte_experimental
+int rte_timer_data_alloc(uint32_t *id_ptr);
/**
* @warning
* - 0: Success
* - -EINVAL: invalid timer data instance identifier
*/
-int __rte_experimental rte_timer_data_dealloc(uint32_t id);
+__rte_experimental
+int rte_timer_data_dealloc(uint32_t id);
/**
* Initialize the timer library.
*
* Initializes internal variables (list, locks and so on) for the RTE
* timer library.
- */
-void rte_timer_subsystem_init_v20(void);
-
-/**
- * Initialize the timer library.
*
- * Initializes internal variables (list, locks and so on) for the RTE
- * timer library.
+ * @note
+ * This function must be called in every process before using the library.
*
* @return
* - 0: Success
- * - -EEXIST: Returned in secondary process when primary process has not
- * yet initialized the timer subsystem
* - -ENOMEM: Unable to allocate memory needed to initialize timer
* subsystem
*/
-int rte_timer_subsystem_init_v1905(void);
int rte_timer_subsystem_init(void);
+int rte_timer_subsystem_init_v1905(void);
+void rte_timer_subsystem_init_v20(void);
/**
* @warning
*
* Free timer subsystem resources.
*/
-void __rte_experimental rte_timer_subsystem_finalize(void);
+__rte_experimental
+void rte_timer_subsystem_finalize(void);
/**
* Initialize a timer handle.
* - 0: Success; the timer is scheduled.
* - (-1): Timer is in the RUNNING or CONFIG state.
*/
-int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
- enum rte_timer_type type, unsigned int tim_lcore,
- rte_timer_cb_t fct, void *arg);
-int rte_timer_reset_v1905(struct rte_timer *tim, uint64_t ticks,
- enum rte_timer_type type, unsigned int tim_lcore,
- rte_timer_cb_t fct, void *arg);
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);
+int rte_timer_reset_v1905(struct rte_timer *tim, uint64_t ticks,
+ enum rte_timer_type type, unsigned int tim_lcore,
+ rte_timer_cb_t fct, void *arg);
+int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
+ enum rte_timer_type type, unsigned int tim_lcore,
+ rte_timer_cb_t fct, void *arg);
/**
* - 0: Success; the timer is stopped.
* - (-1): The timer is in the RUNNING or CONFIG state.
*/
-int rte_timer_stop_v20(struct rte_timer *tim);
-int rte_timer_stop_v1905(struct rte_timer *tim);
int rte_timer_stop(struct rte_timer *tim);
+int rte_timer_stop_v1905(struct rte_timer *tim);
+int rte_timer_stop_v20(struct rte_timer *tim);
/**
* Loop until rte_timer_stop() succeeds.
*/
int rte_timer_pending(struct rte_timer *tim);
-/**
- * Manage the timer list and execute callback functions.
- *
- * This function must be called periodically from EAL lcores
- * main_loop(). It browses the list of pending timers and runs all
- * timers that are expired.
- *
- * The precision of the timer depends on the call frequency of this
- * function. However, the more often the function is called, the more
- * CPU resources it will use.
- */
-void rte_timer_manage_v20(void);
-
/**
* Manage the timer list and execute callback functions.
*
* - 0: Success
* - -EINVAL: timer subsystem not yet initialized
*/
-int rte_timer_manage_v1905(void);
int rte_timer_manage(void);
-
-/**
- * Dump statistics about timers.
- *
- * @param f
- * A pointer to a file for output
- */
-void rte_timer_dump_stats_v20(FILE *f);
+int rte_timer_manage_v1905(void);
+void rte_timer_manage_v20(void);
/**
* Dump statistics about timers.
* - 0: Success
* - -EINVAL: timer subsystem not yet initialized
*/
-int rte_timer_dump_stats_v1905(FILE *f);
int rte_timer_dump_stats(FILE *f);
+int rte_timer_dump_stats_v1905(FILE *f);
+void rte_timer_dump_stats_v20(FILE *f);
/**
* @warning
* - (-1): Timer is in the RUNNING or CONFIG state.
* - -EINVAL: invalid timer_data_id
*/
-int __rte_experimental
+__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);
* - (-1): The timer is in the RUNNING or CONFIG state.
* - -EINVAL: invalid timer_data_id
*/
-int __rte_experimental
+__rte_experimental
+int
rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim);
/**
* - 0: success
* - -EINVAL: invalid timer_data_id
*/
-int __rte_experimental
+__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);
+/**
+ * Callback function type for rte_timer_stop_all().
+ */
+typedef void (*rte_timer_stop_all_cb_t)(struct rte_timer *tim, void *arg);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Walk the pending timer lists for the specified lcore IDs, and for each timer
+ * that is encountered, stop it and call the specified callback function to
+ * process it further.
+ *
+ * @param timer_data_id
+ * An identifier indicating which instance of timer data should be used for
+ * this operation.
+ * @param walk_lcores
+ * An array of lcore ids identifying the timer lists that should be processed.
+ * @param nb_walk_lcores
+ * The size of the walk_lcores array.
+ * @param f
+ * The callback function which should be called for each timers. Can be NULL.
+ * @param f_arg
+ * An arbitrary argument that will be passed to f, if it is called.
+ * @return
+ * - 0: success
+ * - EINVAL: invalid timer_data_id
+ */
+__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);
+
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice
* - 0: success
* - -EINVAL: invalid timer_data_id
*/
-int __rte_experimental
+__rte_experimental
+int
rte_timer_alt_dump_stats(uint32_t timer_data_id, FILE *f);
#ifdef __cplusplus