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