If an eventdev PMD does not wish to provide event timer adapter ops definitions, the library will fall back to a default software implementation whose entry points are added by this commit.
Signed-off-by: Erik Gabriel Carrillo <erik.g.carri...@intel.com> --- lib/librte_eventdev/rte_event_timer_adapter.c | 107 ++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/lib/librte_eventdev/rte_event_timer_adapter.c b/lib/librte_eventdev/rte_event_timer_adapter.c index 3e58db4..540be95 100644 --- a/lib/librte_eventdev/rte_event_timer_adapter.c +++ b/lib/librte_eventdev/rte_event_timer_adapter.c @@ -48,6 +48,8 @@ static struct rte_event_timer_adapter adapters[MAX_EVENT_TIMER_ADAPTERS]; +const struct rte_event_timer_adapter_ops sw_event_adapter_timer_ops; + static inline int adapter_valid(const struct rte_event_timer_adapter *adapter) { @@ -211,6 +213,12 @@ rte_event_timer_adapter_create_ext( } } + /* If eventdev PMD did not provide ops, use default software + * implementation. + */ + if (adapter->ops == NULL) + adapter->ops = &sw_event_adapter_timer_ops; + /* Allow driver to do some setup */ FUNC_PTR_OR_NULL_RET_WITH_ERRNO(adapter->ops->init, -ENOTSUP); ret = adapter->ops->init(adapter); @@ -318,6 +326,12 @@ rte_event_timer_adapter_lookup(uint16_t adapter_id) return NULL; } + /* If eventdev PMD did not provide ops, use default software + * implementation. + */ + if (adapter->ops == NULL) + adapter->ops = &sw_event_adapter_timer_ops; + /* Set fast-path function pointers */ adapter->arm_burst = adapter->ops->arm_burst; adapter->arm_tmo_tick_burst = adapter->ops->arm_tmo_tick_burst; @@ -393,3 +407,96 @@ rte_event_timer_cancel_burst(const struct rte_event_timer_adapter *adapter, return adapter->cancel_burst(adapter, evtims, nb_evtims); } + +/* + * Software event timer adapter ops definitions + */ + +static int +sw_event_timer_adapter_init(struct rte_event_timer_adapter *adapter) +{ + RTE_SET_USED(adapter); + + return 0; +} + +static int +sw_event_timer_adapter_uninit(struct rte_event_timer_adapter *adapter) +{ + RTE_SET_USED(adapter); + + return 0; +} + +static int +sw_event_timer_adapter_start(const struct rte_event_timer_adapter *adapter) +{ + RTE_SET_USED(adapter); + + return 0; +} + +static int +sw_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter) +{ + RTE_SET_USED(adapter); + + return 0; +} + +static void +sw_event_timer_adapter_get_info(const struct rte_event_timer_adapter *adapter, + struct rte_event_timer_adapter_info *adapter_info) +{ + RTE_SET_USED(adapter); + RTE_SET_USED(adapter_info); +} + +static int +sw_event_timer_arm_burst(const struct rte_event_timer_adapter *adapter, + struct rte_event_timer **evtims, + uint16_t nb_evtims) +{ + RTE_SET_USED(adapter); + RTE_SET_USED(evtims); + RTE_SET_USED(nb_evtims); + + return 0; +} + +static int +sw_event_timer_cancel_burst(const struct rte_event_timer_adapter *adapter, + struct rte_event_timer **evtims, + uint16_t nb_evtims) +{ + RTE_SET_USED(adapter); + RTE_SET_USED(evtims); + RTE_SET_USED(nb_evtims); + + return 0; +} + +static int +sw_event_timer_arm_tmo_tick_burst(const struct rte_event_timer_adapter *adapter, + struct rte_event_timer **tims, + uint64_t timeout_tick, + uint16_t nb_tims) +{ + RTE_SET_USED(adapter); + RTE_SET_USED(tims); + RTE_SET_USED(timeout_tick); + RTE_SET_USED(nb_tims); + + return 0; +} + +const struct rte_event_timer_adapter_ops sw_event_adapter_timer_ops = { + .init = sw_event_timer_adapter_init, + .uninit = sw_event_timer_adapter_uninit, + .start = sw_event_timer_adapter_start, + .stop = sw_event_timer_adapter_stop, + .get_info = sw_event_timer_adapter_get_info, + .arm_burst = sw_event_timer_arm_burst, + .arm_tmo_tick_burst = sw_event_timer_arm_tmo_tick_burst, + .cancel_burst = sw_event_timer_cancel_burst, +}; -- 2.6.4