1*53548ad3SPavan Nikhilesh /* SPDX-License-Identifier: BSD-3-Clause
2*53548ad3SPavan Nikhilesh  * Copyright(c) 2017-2018 Intel Corporation.
3*53548ad3SPavan Nikhilesh  * All rights reserved.
4*53548ad3SPavan Nikhilesh  */
5*53548ad3SPavan Nikhilesh 
6*53548ad3SPavan Nikhilesh #ifndef __EVENT_TIMER_ADAPTER_PMD_H__
7*53548ad3SPavan Nikhilesh #define __EVENT_TIMER_ADAPTER_PMD_H__
8*53548ad3SPavan Nikhilesh 
9*53548ad3SPavan Nikhilesh /**
10*53548ad3SPavan Nikhilesh  * @file
11*53548ad3SPavan Nikhilesh  * RTE Event Timer Adapter API (PMD Side)
12*53548ad3SPavan Nikhilesh  *
13*53548ad3SPavan Nikhilesh  * @note
14*53548ad3SPavan Nikhilesh  * This file provides implementation helpers for internal use by PMDs.  They
15*53548ad3SPavan Nikhilesh  * are not intended to be exposed to applications and are not subject to ABI
16*53548ad3SPavan Nikhilesh  * versioning.
17*53548ad3SPavan Nikhilesh  *
18*53548ad3SPavan Nikhilesh  */
19*53548ad3SPavan Nikhilesh 
20*53548ad3SPavan Nikhilesh #ifdef __cplusplus
21*53548ad3SPavan Nikhilesh extern "C" {
22*53548ad3SPavan Nikhilesh #endif
23*53548ad3SPavan Nikhilesh 
24*53548ad3SPavan Nikhilesh #include "rte_event_timer_adapter.h"
25*53548ad3SPavan Nikhilesh 
26*53548ad3SPavan Nikhilesh /*
27*53548ad3SPavan Nikhilesh  * Definitions of functions exported by an event timer adapter implementation
28*53548ad3SPavan Nikhilesh  * through *rte_event_timer_adapter_ops* structure supplied in the
29*53548ad3SPavan Nikhilesh  * *rte_event_timer_adapter* structure associated with an event timer adapter.
30*53548ad3SPavan Nikhilesh  */
31*53548ad3SPavan Nikhilesh 
32*53548ad3SPavan Nikhilesh typedef int (*rte_event_timer_adapter_init_t)(
33*53548ad3SPavan Nikhilesh 		struct rte_event_timer_adapter *adapter);
34*53548ad3SPavan Nikhilesh /**< @internal Event timer adapter implementation setup */
35*53548ad3SPavan Nikhilesh typedef int (*rte_event_timer_adapter_uninit_t)(
36*53548ad3SPavan Nikhilesh 		struct rte_event_timer_adapter *adapter);
37*53548ad3SPavan Nikhilesh /**< @internal Event timer adapter implementation teardown */
38*53548ad3SPavan Nikhilesh typedef int (*rte_event_timer_adapter_start_t)(
39*53548ad3SPavan Nikhilesh 		const struct rte_event_timer_adapter *adapter);
40*53548ad3SPavan Nikhilesh /**< @internal Start running event timer adapter */
41*53548ad3SPavan Nikhilesh typedef int (*rte_event_timer_adapter_stop_t)(
42*53548ad3SPavan Nikhilesh 		const struct rte_event_timer_adapter *adapter);
43*53548ad3SPavan Nikhilesh /**< @internal Stop running event timer adapter */
44*53548ad3SPavan Nikhilesh typedef void (*rte_event_timer_adapter_get_info_t)(
45*53548ad3SPavan Nikhilesh 		const struct rte_event_timer_adapter *adapter,
46*53548ad3SPavan Nikhilesh 		struct rte_event_timer_adapter_info *adapter_info);
47*53548ad3SPavan Nikhilesh /**< @internal Get contextual information for event timer adapter */
48*53548ad3SPavan Nikhilesh typedef int (*rte_event_timer_adapter_stats_get_t)(
49*53548ad3SPavan Nikhilesh 		const struct rte_event_timer_adapter *adapter,
50*53548ad3SPavan Nikhilesh 		struct rte_event_timer_adapter_stats *stats);
51*53548ad3SPavan Nikhilesh /**< @internal Get statistics for event timer adapter */
52*53548ad3SPavan Nikhilesh typedef int (*rte_event_timer_adapter_stats_reset_t)(
53*53548ad3SPavan Nikhilesh 		const struct rte_event_timer_adapter *adapter);
54*53548ad3SPavan Nikhilesh /**< @internal Reset statistics for event timer adapter */
55*53548ad3SPavan Nikhilesh 
56*53548ad3SPavan Nikhilesh /**
57*53548ad3SPavan Nikhilesh  * @internal Structure containing the functions exported by an event timer
58*53548ad3SPavan Nikhilesh  * adapter implementation.
59*53548ad3SPavan Nikhilesh  */
60*53548ad3SPavan Nikhilesh struct event_timer_adapter_ops {
61*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_init_t		init;  /**< Set up adapter */
62*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_uninit_t	uninit;/**< Tear down adapter */
63*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_start_t		start; /**< Start adapter */
64*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_stop_t		stop;  /**< Stop adapter */
65*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_get_info_t	get_info;
66*53548ad3SPavan Nikhilesh 	/**< Get info from driver */
67*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_stats_get_t	stats_get;
68*53548ad3SPavan Nikhilesh 	/**< Get adapter statistics */
69*53548ad3SPavan Nikhilesh 	rte_event_timer_adapter_stats_reset_t	stats_reset;
70*53548ad3SPavan Nikhilesh 	/**< Reset adapter statistics */
71*53548ad3SPavan Nikhilesh 	rte_event_timer_arm_burst_t		arm_burst;
72*53548ad3SPavan Nikhilesh 	/**< Arm one or more event timers */
73*53548ad3SPavan Nikhilesh 	rte_event_timer_arm_tmo_tick_burst_t	arm_tmo_tick_burst;
74*53548ad3SPavan Nikhilesh 	/**< Arm event timers with same expiration time */
75*53548ad3SPavan Nikhilesh 	rte_event_timer_cancel_burst_t		cancel_burst;
76*53548ad3SPavan Nikhilesh 	/**< Cancel one or more event timers */
77*53548ad3SPavan Nikhilesh };
78*53548ad3SPavan Nikhilesh 
79*53548ad3SPavan Nikhilesh /**
80*53548ad3SPavan Nikhilesh  * @internal Adapter data; structure to be placed in shared memory to be
81*53548ad3SPavan Nikhilesh  * accessible by various processes in a multi-process configuration.
82*53548ad3SPavan Nikhilesh  */
83*53548ad3SPavan Nikhilesh struct rte_event_timer_adapter_data {
84*53548ad3SPavan Nikhilesh 	uint8_t id;
85*53548ad3SPavan Nikhilesh 	/**< Event timer adapter ID */
86*53548ad3SPavan Nikhilesh 	uint8_t event_dev_id;
87*53548ad3SPavan Nikhilesh 	/**< Event device ID */
88*53548ad3SPavan Nikhilesh 	uint32_t socket_id;
89*53548ad3SPavan Nikhilesh 	/**< Socket ID where memory is allocated */
90*53548ad3SPavan Nikhilesh 	uint8_t event_port_id;
91*53548ad3SPavan Nikhilesh 	/**< Optional: event port ID used when the inbuilt port is absent */
92*53548ad3SPavan Nikhilesh 	const struct rte_memzone *mz;
93*53548ad3SPavan Nikhilesh 	/**< Event timer adapter memzone pointer */
94*53548ad3SPavan Nikhilesh 	struct rte_event_timer_adapter_conf conf;
95*53548ad3SPavan Nikhilesh 	/**< Configuration used to configure the adapter. */
96*53548ad3SPavan Nikhilesh 	uint32_t caps;
97*53548ad3SPavan Nikhilesh 	/**< Adapter capabilities */
98*53548ad3SPavan Nikhilesh 	void *adapter_priv;
99*53548ad3SPavan Nikhilesh 	/**< Timer adapter private data*/
100*53548ad3SPavan Nikhilesh 	uint8_t service_inited;
101*53548ad3SPavan Nikhilesh 	/**< Service initialization state */
102*53548ad3SPavan Nikhilesh 	uint32_t service_id;
103*53548ad3SPavan Nikhilesh 	/**< Service ID*/
104*53548ad3SPavan Nikhilesh 
105*53548ad3SPavan Nikhilesh 	RTE_STD_C11
106*53548ad3SPavan Nikhilesh 	uint8_t started : 1;
107*53548ad3SPavan Nikhilesh 	/**< Flag to indicate adapter started. */
108*53548ad3SPavan Nikhilesh } __rte_cache_aligned;
109*53548ad3SPavan Nikhilesh 
110*53548ad3SPavan Nikhilesh #ifdef __cplusplus
111*53548ad3SPavan Nikhilesh }
112*53548ad3SPavan Nikhilesh #endif
113*53548ad3SPavan Nikhilesh 
114*53548ad3SPavan Nikhilesh #endif /* __EVENT_TIMER_ADAPTER_PMD_H__ */
115