1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (C) 2020 Marvell International Ltd.
4 #ifndef _EVENT_HELPER_H_
5 #define _EVENT_HELPER_H_
9 #define RTE_LOGTYPE_EH RTE_LOGTYPE_USER4
11 #define EH_LOG_ERR(...) \
13 RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
14 __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__ ,)))
16 #define EH_LOG_INFO(...) \
18 RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
19 __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__ ,)))
21 /* Max event devices supported */
22 #define EVENT_MODE_MAX_EVENT_DEVS RTE_EVENT_MAX_DEVS
24 /* Max Rx adapters supported */
25 #define EVENT_MODE_MAX_RX_ADAPTERS RTE_EVENT_MAX_DEVS
27 /* Max Tx adapters supported */
28 #define EVENT_MODE_MAX_TX_ADAPTERS RTE_EVENT_MAX_DEVS
30 /* Max Rx adapter connections */
31 #define EVENT_MODE_MAX_CONNECTIONS_PER_ADAPTER 16
33 /* Max Tx adapter connections */
34 #define EVENT_MODE_MAX_CONNECTIONS_PER_TX_ADAPTER 16
36 /* Max event queues supported per event device */
37 #define EVENT_MODE_MAX_EVENT_QUEUES_PER_DEV RTE_EVENT_MAX_QUEUES_PER_DEV
39 /* Max event-lcore links */
40 #define EVENT_MODE_MAX_LCORE_LINKS \
41 (EVENT_MODE_MAX_EVENT_DEVS * EVENT_MODE_MAX_EVENT_QUEUES_PER_DEV)
43 /* Max adapters that one Rx core can handle */
44 #define EVENT_MODE_MAX_ADAPTERS_PER_RX_CORE EVENT_MODE_MAX_RX_ADAPTERS
46 /* Max adapters that one Tx core can handle */
47 #define EVENT_MODE_MAX_ADAPTERS_PER_TX_CORE EVENT_MODE_MAX_TX_ADAPTERS
49 /* Used to indicate that queue schedule type is not set */
50 #define SCHED_TYPE_NOT_SET 3
53 * Packet transfer mode of the application
55 enum eh_pkt_transfer_mode {
56 EH_PKT_TRANSFER_MODE_POLL = 0,
57 EH_PKT_TRANSFER_MODE_EVENT,
61 * Event mode packet rx types
64 EH_RX_TYPE_NON_BURST = 0,
69 * Event mode packet tx types
72 EH_TX_TYPE_INTERNAL_PORT = 0,
73 EH_TX_TYPE_NO_INTERNAL_PORT
77 * Event mode ipsec mode types
79 enum eh_ipsec_mode_types {
80 EH_IPSEC_MODE_TYPE_APP = 0,
81 EH_IPSEC_MODE_TYPE_DRIVER
84 /* Event dev params */
85 struct eventdev_params {
87 uint8_t nb_eventqueue;
89 uint8_t ev_queue_mode;
90 uint8_t all_internal_ports;
94 * Event-lcore link configuration
96 struct eh_event_link_info {
98 /**< Event device ID */
99 uint8_t event_port_id;
100 /**< Event port ID */
102 /**< Event queue to be linked to the port */
104 /**< Lcore to be polling on this port */
107 /* Rx adapter connection info */
108 struct rx_adapter_connection_info {
111 int32_t ethdev_rx_qid;
114 /* Rx adapter conf */
115 struct rx_adapter_conf {
119 uint8_t nb_connections;
120 struct rx_adapter_connection_info
121 conn[EVENT_MODE_MAX_CONNECTIONS_PER_ADAPTER];
124 /* Tx adapter connection info */
125 struct tx_adapter_connection_info {
127 int32_t ethdev_tx_qid;
130 /* Tx adapter conf */
131 struct tx_adapter_conf {
135 uint8_t nb_connections;
136 struct tx_adapter_connection_info
137 conn[EVENT_MODE_MAX_CONNECTIONS_PER_TX_ADAPTER];
141 /* Eventmode conf data */
142 struct eventmode_conf {
144 /**< No of event devs */
145 struct eventdev_params eventdev_config[EVENT_MODE_MAX_EVENT_DEVS];
146 /**< Per event dev conf */
147 uint8_t nb_rx_adapter;
148 /**< No of Rx adapters */
149 struct rx_adapter_conf rx_adapter[EVENT_MODE_MAX_RX_ADAPTERS];
150 /**< Rx adapter conf */
151 uint8_t nb_tx_adapter;
152 /**< No of Tx adapters */
153 struct tx_adapter_conf tx_adapter[EVENT_MODE_MAX_TX_ADAPTERS];
154 /** Tx adapter conf */
157 struct eh_event_link_info
158 link[EVENT_MODE_MAX_LCORE_LINKS];
159 /**< Per link conf */
160 struct rte_bitmap *eth_core_mask;
161 /**< Core mask of cores to be used for software Rx and Tx */
162 uint32_t eth_portmask;
163 /**< Mask of the eth ports to be used */
167 uint64_t sched_type : 2;
168 /**< Schedule type */
169 uint64_t all_ev_queue_to_ev_port : 1;
171 * When enabled, all event queues need to be mapped to
174 uint64_t event_vector : 1;
176 * Enable event vector, when enabled application can
177 * receive vector of events.
179 uint64_t vector_size : 16;
183 /**< 64 bit field to specify extended params */
184 uint64_t vector_tmo_ns;
185 /**< Max vector timeout in nanoseconds */
189 * Event helper configuration
192 enum eh_pkt_transfer_mode mode;
193 /**< Packet transfer mode of the application */
194 uint32_t eth_portmask;
196 * Mask of the eth ports to be used. This portmask would be
197 * checked while initializing devices using helper routines.
200 /**< Mode specific parameters */
202 /** Application specific params */
203 enum eh_ipsec_mode_types ipsec_mode;
204 /**< Mode of ipsec run */
207 /* Workers registered by the application */
208 struct eh_app_worker_params {
213 /**< Specify status of rx type burst */
214 uint64_t tx_internal_port : 1;
215 /**< Specify whether tx internal port is available */
216 uint64_t ipsec_mode : 1;
217 /**< Specify ipsec processing level */
221 /**< Capabilities of this worker */
222 void (*worker_thread)(struct eh_event_link_info *links,
224 /**< Worker thread */
228 * Allocate memory for event helper configuration and initialize
229 * it with default values.
232 * - pointer to event helper configuration structure on success.
239 * Uninitialize event helper configuration and release its memory
242 * Event helper configuration
245 eh_conf_uninit(struct eh_conf *conf);
248 * Initialize event mode devices
250 * Application can call this function to get the event devices, eth devices
251 * and eth rx & tx adapters initialized according to the default config or
252 * config populated using the command line args.
254 * Application is expected to initialize the eth devices and then the event
255 * mode helper subsystem will stop & start eth devices according to its
256 * requirement. Call to this function should be done after the eth devices
257 * are successfully initialized.
260 * Event helper configuration
266 eh_devs_init(struct eh_conf *conf);
269 * Release event mode devices
271 * Application can call this function to release event devices,
272 * eth rx & tx adapters according to the config.
274 * Call to this function should be done before application stops
275 * and closes eth devices. This function will not close and stop
279 * Event helper configuration
285 eh_devs_uninit(struct eh_conf *conf);
288 * Get eventdev tx queue
290 * If the application uses event device which does not support internal port
291 * then it needs to submit the events to a Tx queue before final transmission.
292 * This Tx queue will be created internally by the eventmode helper subsystem,
293 * and application will need its queue ID when it runs the execution loop.
296 * Event helper configuration
303 eh_get_tx_queue(struct eh_conf *conf, uint8_t eventdev_id);
306 * Display event mode configuration
309 * Event helper configuration
312 eh_display_conf(struct eh_conf *conf);
316 * Launch eventmode worker
318 * The application can request the eventmode helper subsystem to launch the
319 * worker based on the capabilities of event device and the options selected
320 * while initializing the eventmode.
323 * Event helper configuration
325 * List of all the workers registered by application, along with its
327 * @param nb_wrkr_param
328 * Number of workers passed by the application
332 eh_launch_worker(struct eh_conf *conf, struct eh_app_worker_params *app_wrkr,
333 uint8_t nb_wrkr_param);
335 #endif /* _EVENT_HELPER_H_ */