Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2016 Cavium, Inc
3 : : */
4 : :
5 : : #ifndef _RTE_EVENTDEV_PMD_H_
6 : : #define _RTE_EVENTDEV_PMD_H_
7 : :
8 : : /** @file
9 : : * RTE Event PMD APIs
10 : : *
11 : : * @note
12 : : * These API are from event PMD only and user applications should not call
13 : : * them directly.
14 : : */
15 : :
16 : : #include <string.h>
17 : :
18 : : #include <rte_common.h>
19 : : #include <rte_compat.h>
20 : : #include <rte_config.h>
21 : : #include <dev_driver.h>
22 : : #include <rte_log.h>
23 : : #include <rte_malloc.h>
24 : : #include <rte_mbuf.h>
25 : : #include <rte_mbuf_dyn.h>
26 : :
27 : : #include "event_timer_adapter_pmd.h"
28 : : #include "rte_event_eth_rx_adapter.h"
29 : : #include "rte_event_vector_adapter.h"
30 : : #include "rte_eventdev.h"
31 : :
32 : : #ifdef __cplusplus
33 : : extern "C" {
34 : : #endif
35 : :
36 : : extern int rte_event_logtype;
37 : : #define RTE_LOGTYPE_EVENTDEV rte_event_logtype
38 : :
39 : : /* Logging Macros */
40 : : #define RTE_EDEV_LOG_ERR(...) \
41 : : RTE_LOG_LINE_PREFIX(ERR, EVENTDEV, \
42 : : "%s() line %u: ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__)
43 : :
44 : : #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
45 : : #define RTE_EDEV_LOG_DEBUG(...) \
46 : : RTE_LOG_LINE_PREFIX(DEBUG, EVENTDEV, \
47 : : "%s() line %u: ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__)
48 : : #else
49 : : #define RTE_EDEV_LOG_DEBUG(...) (void)0
50 : : #endif
51 : :
52 : : /* Macros to check for valid device */
53 : : #define RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, retval) do { \
54 : : if (!rte_event_pmd_is_valid_dev((dev_id))) { \
55 : : RTE_EDEV_LOG_ERR("Invalid dev_id=%d", dev_id); \
56 : : return retval; \
57 : : } \
58 : : } while (0)
59 : :
60 : : #define RTE_EVENTDEV_VALID_DEVID_OR_ERRNO_RET(dev_id, errno, retval) do { \
61 : : if (!rte_event_pmd_is_valid_dev((dev_id))) { \
62 : : RTE_EDEV_LOG_ERR("Invalid dev_id=%d", dev_id); \
63 : : rte_errno = errno; \
64 : : return retval; \
65 : : } \
66 : : } while (0)
67 : :
68 : : #define RTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id) do { \
69 : : if (!rte_event_pmd_is_valid_dev((dev_id))) { \
70 : : RTE_EDEV_LOG_ERR("Invalid dev_id=%d", dev_id); \
71 : : return; \
72 : : } \
73 : : } while (0)
74 : :
75 : : #define RTE_EVENT_ETH_RX_ADAPTER_SW_CAP \
76 : : ((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) | \
77 : : (RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ) | \
78 : : (RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR))
79 : :
80 : : #define RTE_EVENT_CRYPTO_ADAPTER_SW_CAP \
81 : : RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA
82 : :
83 : : /**< Ethernet Rx adapter cap to return If the packet transfers from
84 : : * the ethdev to eventdev use a SW service function
85 : : */
86 : :
87 : : #define RTE_EVENT_TIMER_ADAPTER_SW_CAP \
88 : : RTE_EVENT_TIMER_ADAPTER_CAP_PERIODIC
89 : :
90 : : #define RTE_EVENT_VECTOR_ADAPTER_SW_CAP RTE_EVENT_VECTOR_ADAPTER_CAP_SOV_EOV
91 : :
92 : : #define RTE_EVENTDEV_DETACHED (0)
93 : : #define RTE_EVENTDEV_ATTACHED (1)
94 : :
95 : : #define RTE_EVENTDEV_NAME_MAX_LEN (64)
96 : : /**< @internal Max length of name of event PMD */
97 : :
98 : : struct rte_eth_dev;
99 : :
100 : : /** Global structure used for maintaining state of allocated event devices */
101 : : struct rte_eventdev_global {
102 : : uint8_t nb_devs; /**< Number of devices found */
103 : : };
104 : :
105 : : /**
106 : : * @internal
107 : : * The data part, with no function pointers, associated with each device.
108 : : *
109 : : * This structure is safe to place in shared memory to be common among
110 : : * different processes in a multi-process configuration.
111 : : */
112 : : struct __rte_cache_aligned rte_eventdev_data {
113 : : int socket_id;
114 : : /**< Socket ID where memory is allocated */
115 : : uint8_t dev_id;
116 : : /**< Device ID for this instance */
117 : : uint8_t nb_queues;
118 : : /**< Number of event queues. */
119 : : uint8_t nb_ports;
120 : : /**< Number of event ports. */
121 : : void *ports[RTE_EVENT_MAX_PORTS_PER_DEV];
122 : : /**< Array of pointers to ports. */
123 : : struct rte_event_port_conf ports_cfg[RTE_EVENT_MAX_PORTS_PER_DEV];
124 : : /**< Array of port configuration structures. */
125 : : struct rte_event_queue_conf queues_cfg[RTE_EVENT_MAX_QUEUES_PER_DEV];
126 : : /**< Array of queue configuration structures. */
127 : : uint16_t links_map[RTE_EVENT_MAX_PROFILES_PER_PORT]
128 : : [RTE_EVENT_MAX_PORTS_PER_DEV * RTE_EVENT_MAX_QUEUES_PER_DEV];
129 : : /**< Memory to store queues to port connections. */
130 : : void *dev_private;
131 : : /**< PMD-specific private data */
132 : : uint32_t event_dev_cap;
133 : : /**< Event device capabilities(RTE_EVENT_DEV_CAP_)*/
134 : : struct rte_event_dev_config dev_conf;
135 : : /**< Configuration applied to device. */
136 : : uint8_t service_inited;
137 : : /* Service initialization state */
138 : : uint32_t service_id;
139 : : /* Service ID*/
140 : : void *dev_stop_flush_arg;
141 : : /**< User-provided argument for event flush function */
142 : :
143 : : uint8_t dev_started : 1;
144 : : /**< Device state: STARTED(1)/STOPPED(0) */
145 : :
146 : : char name[RTE_EVENTDEV_NAME_MAX_LEN];
147 : : /**< Unique identifier name */
148 : :
149 : : uint64_t reserved_64s[4]; /**< Reserved for future fields */
150 : : void *reserved_ptrs[4]; /**< Reserved for future fields */
151 : : };
152 : :
153 : : /** @internal The data structure associated with each event device. */
154 : : struct __rte_cache_aligned rte_eventdev {
155 : : struct rte_eventdev_data *data;
156 : : /**< Pointer to device data */
157 : : struct eventdev_ops *dev_ops;
158 : : /**< Functions exported by PMD */
159 : : struct rte_device *dev;
160 : : /**< Device info. supplied by probing */
161 : :
162 : : uint8_t attached : 1;
163 : : /**< Flag indicating the device is attached */
164 : :
165 : : event_enqueue_burst_t enqueue_burst;
166 : : /**< Pointer to PMD enqueue burst function. */
167 : : event_enqueue_burst_t enqueue_new_burst;
168 : : /**< Pointer to PMD enqueue burst function(op new variant) */
169 : : event_enqueue_burst_t enqueue_forward_burst;
170 : : /**< Pointer to PMD enqueue burst function(op forward variant) */
171 : : event_dequeue_burst_t dequeue_burst;
172 : : /**< Pointer to PMD dequeue burst function. */
173 : : event_maintain_t maintain;
174 : : /**< Pointer to PMD port maintenance function. */
175 : : event_tx_adapter_enqueue_t txa_enqueue_same_dest;
176 : : /**< Pointer to PMD eth Tx adapter burst enqueue function with
177 : : * events destined to same Eth port & Tx queue.
178 : : */
179 : : event_tx_adapter_enqueue_t txa_enqueue;
180 : : /**< Pointer to PMD eth Tx adapter enqueue function. */
181 : : event_crypto_adapter_enqueue_t ca_enqueue;
182 : : /**< Pointer to PMD crypto adapter enqueue function. */
183 : : event_dma_adapter_enqueue_t dma_enqueue;
184 : : /**< Pointer to PMD DMA adapter enqueue function. */
185 : : event_profile_switch_t profile_switch;
186 : : /**< Pointer to PMD Event switch profile function. */
187 : : event_preschedule_modify_t preschedule_modify;
188 : : /**< Pointer to PMD Event port pre-schedule type modify function. */
189 : : event_preschedule_t preschedule;
190 : : /**< Pointer to PMD Event port pre-schedule function. */
191 : :
192 : : uint64_t reserved_64s[3]; /**< Reserved for future fields */
193 : : void *reserved_ptrs[3]; /**< Reserved for future fields */
194 : : };
195 : :
196 : : extern struct rte_eventdev *rte_eventdevs;
197 : : /** @internal The pool of rte_eventdev structures. */
198 : :
199 : : /**
200 : : * Get the rte_eventdev structure device pointer for the named device.
201 : : *
202 : : * @param name
203 : : * device name to select the device structure.
204 : : *
205 : : * @return
206 : : * - The rte_eventdev structure pointer for the given device ID.
207 : : */
208 : : __rte_internal
209 : : static inline struct rte_eventdev *
210 : 8 : rte_event_pmd_get_named_dev(const char *name)
211 : : {
212 : : struct rte_eventdev *dev;
213 : : unsigned int i;
214 : :
215 [ + - ]: 8 : if (name == NULL)
216 : : return NULL;
217 : :
218 [ + + ]: 72 : for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
219 : 68 : dev = &rte_eventdevs[i];
220 [ + + ]: 68 : if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
221 [ + - ]: 4 : (strcmp(dev->data->name, name) == 0))
222 : 4 : return dev;
223 : : }
224 : :
225 : : return NULL;
226 : : }
227 : :
228 : : /**
229 : : * Validate if the event device index is valid attached event device.
230 : : *
231 : : * @param dev_id
232 : : * Event device index.
233 : : *
234 : : * @return
235 : : * - If the device index is valid (1) or not (0).
236 : : */
237 : : __rte_internal
238 : : static inline unsigned
239 : : rte_event_pmd_is_valid_dev(uint8_t dev_id)
240 : : {
241 : : struct rte_eventdev *dev;
242 : :
243 [ - - + - : 6288 : if (dev_id >= RTE_EVENT_MAX_DEVS)
- - - - -
- - - - -
- - + - +
- + - + -
+ - + - +
- + - + -
- - + - +
- + - + -
- - + - +
- + - - -
+ - + - +
- + - + -
+ - - - -
- - - + -
+ + - - +
- + - -
- ]
244 : : return 0;
245 : :
246 : 6287 : dev = &rte_eventdevs[dev_id];
247 [ - - + - : 6287 : if (dev->attached != RTE_EVENTDEV_ATTACHED)
- - - - -
- - - - -
- - + - +
- + - + -
+ - + - +
- + - + -
- - + - +
- + - + -
- - + - +
- + - - -
+ - + - +
- + - + -
+ - - - -
- - - + -
+ - - - +
- + - - -
- - ]
248 : : return 0;
249 : : else
250 : : return 1;
251 : : }
252 : :
253 : : /**
254 : : * Definitions of all functions exported by a driver through the
255 : : * generic structure of type *event_dev_ops* supplied in the
256 : : * *rte_eventdev* structure associated with a device.
257 : : */
258 : :
259 : : /**
260 : : * Get device information of a device.
261 : : *
262 : : * @param dev
263 : : * Event device pointer
264 : : * @param dev_info
265 : : * Event device information structure
266 : : */
267 : : typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev,
268 : : struct rte_event_dev_info *dev_info);
269 : :
270 : : /**
271 : : * Configure a device.
272 : : *
273 : : * @param dev
274 : : * Event device pointer
275 : : *
276 : : * @return
277 : : * Returns 0 on success
278 : : */
279 : : typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev);
280 : :
281 : : /**
282 : : * Start a configured device.
283 : : *
284 : : * @param dev
285 : : * Event device pointer
286 : : *
287 : : * @return
288 : : * Returns 0 on success
289 : : */
290 : : typedef int (*eventdev_start_t)(struct rte_eventdev *dev);
291 : :
292 : : /**
293 : : * Stop a configured device.
294 : : *
295 : : * @param dev
296 : : * Event device pointer
297 : : */
298 : : typedef void (*eventdev_stop_t)(struct rte_eventdev *dev);
299 : :
300 : : /**
301 : : * Close a configured device.
302 : : *
303 : : * @param dev
304 : : * Event device pointer
305 : : *
306 : : * @return
307 : : * - 0 on success
308 : : * - (-EAGAIN) if can't close as device is busy
309 : : */
310 : : typedef int (*eventdev_close_t)(struct rte_eventdev *dev);
311 : :
312 : : /**
313 : : * Retrieve the default event queue configuration.
314 : : *
315 : : * @param dev
316 : : * Event device pointer
317 : : * @param queue_id
318 : : * Event queue index
319 : : * @param[out] queue_conf
320 : : * Event queue configuration structure
321 : : */
322 : : typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev,
323 : : uint8_t queue_id, struct rte_event_queue_conf *queue_conf);
324 : :
325 : : /**
326 : : * Setup an event queue.
327 : : *
328 : : * @param dev
329 : : * Event device pointer
330 : : * @param queue_id
331 : : * Event queue index
332 : : * @param queue_conf
333 : : * Event queue configuration structure
334 : : *
335 : : * @return
336 : : * Returns 0 on success.
337 : : */
338 : : typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
339 : : uint8_t queue_id,
340 : : const struct rte_event_queue_conf *queue_conf);
341 : :
342 : : /**
343 : : * Release resources allocated by given event queue.
344 : : *
345 : : * @param dev
346 : : * Event device pointer
347 : : * @param queue_id
348 : : * Event queue index
349 : : */
350 : : typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
351 : : uint8_t queue_id);
352 : :
353 : : /**
354 : : * Set an event queue attribute at runtime.
355 : : *
356 : : * @param dev
357 : : * Event device pointer
358 : : * @param queue_id
359 : : * Event queue index
360 : : * @param attr_id
361 : : * Event queue attribute id
362 : : * @param attr_value
363 : : * Event queue attribute value
364 : : *
365 : : * @return
366 : : * - 0: Success.
367 : : * - <0: Error code on failure.
368 : : */
369 : : typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev,
370 : : uint8_t queue_id, uint32_t attr_id,
371 : : uint64_t attr_value);
372 : :
373 : : /**
374 : : * Retrieve the default event port configuration.
375 : : *
376 : : * @param dev
377 : : * Event device pointer
378 : : * @param port_id
379 : : * Event port index
380 : : * @param[out] port_conf
381 : : * Event port configuration structure
382 : : */
383 : : typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev,
384 : : uint8_t port_id, struct rte_event_port_conf *port_conf);
385 : :
386 : : /**
387 : : * Setup an event port.
388 : : *
389 : : * @param dev
390 : : * Event device pointer
391 : : * @param port_id
392 : : * Event port index
393 : : * @param port_conf
394 : : * Event port configuration structure
395 : : *
396 : : * @return
397 : : * Returns 0 on success.
398 : : */
399 : : typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev,
400 : : uint8_t port_id,
401 : : const struct rte_event_port_conf *port_conf);
402 : :
403 : : /**
404 : : * Release memory resources allocated by given event port.
405 : : *
406 : : * @param port
407 : : * Event port pointer
408 : : */
409 : : typedef void (*eventdev_port_release_t)(void *port);
410 : :
411 : : /**
412 : : * Quiesce any core specific resources consumed by the event port
413 : : *
414 : : * @param dev
415 : : * Event device pointer.
416 : : * @param port
417 : : * Event port pointer.
418 : : * @param flush_cb
419 : : * User-provided event flush function.
420 : : * @param args
421 : : * Arguments to be passed to the user-provided event flush function.
422 : : */
423 : : typedef void (*eventdev_port_quiesce_t)(struct rte_eventdev *dev, void *port,
424 : : rte_eventdev_port_flush_t flush_cb,
425 : : void *args);
426 : :
427 : : /**
428 : : * Link multiple source event queues to destination event port.
429 : : *
430 : : * @param dev
431 : : * Event device pointer
432 : : * @param port
433 : : * Event port pointer
434 : : * @param queues
435 : : * Points to an array of *nb_links* event queues to be linked
436 : : * to the event port.
437 : : * @param priorities
438 : : * Points to an array of *nb_links* service priorities associated with each
439 : : * event queue link to event port.
440 : : * @param nb_links
441 : : * The number of links to establish
442 : : *
443 : : * @return
444 : : * Returns 0 on success.
445 : : */
446 : : typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
447 : : const uint8_t queues[], const uint8_t priorities[],
448 : : uint16_t nb_links);
449 : :
450 : : /**
451 : : * Link multiple source event queues associated with a link profile to a
452 : : * destination event port.
453 : : *
454 : : * @param dev
455 : : * Event device pointer
456 : : * @param port
457 : : * Event port pointer
458 : : * @param queues
459 : : * Points to an array of *nb_links* event queues to be linked
460 : : * to the event port.
461 : : * @param priorities
462 : : * Points to an array of *nb_links* service priorities associated with each
463 : : * event queue link to event port.
464 : : * @param nb_links
465 : : * The number of links to establish.
466 : : * @param profile_id
467 : : * The profile ID to associate the links.
468 : : *
469 : : * @return
470 : : * Returns 0 on success.
471 : : */
472 : : typedef int (*eventdev_port_link_profile_t)(struct rte_eventdev *dev, void *port,
473 : : const uint8_t queues[], const uint8_t priorities[],
474 : : uint16_t nb_links, uint8_t profile_id);
475 : :
476 : : /**
477 : : * Unlink multiple source event queues from destination event port.
478 : : *
479 : : * @param dev
480 : : * Event device pointer
481 : : * @param port
482 : : * Event port pointer
483 : : * @param queues
484 : : * An array of *nb_unlinks* event queues to be unlinked from the event port.
485 : : * @param nb_unlinks
486 : : * The number of unlinks to establish
487 : : *
488 : : * @return
489 : : * Returns 0 on success.
490 : : */
491 : : typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
492 : : uint8_t queues[], uint16_t nb_unlinks);
493 : :
494 : : /**
495 : : * Unlink multiple source event queues associated with a link profile from
496 : : * destination event port.
497 : : *
498 : : * @param dev
499 : : * Event device pointer
500 : : * @param port
501 : : * Event port pointer
502 : : * @param queues
503 : : * An array of *nb_unlinks* event queues to be unlinked from the event port.
504 : : * @param nb_unlinks
505 : : * The number of unlinks to establish
506 : : * @param profile_id
507 : : * The profile ID of the associated links.
508 : : *
509 : : * @return
510 : : * Returns 0 on success.
511 : : */
512 : : typedef int (*eventdev_port_unlink_profile_t)(struct rte_eventdev *dev, void *port,
513 : : uint8_t queues[], uint16_t nb_unlinks,
514 : : uint8_t profile_id);
515 : :
516 : : /**
517 : : * Unlinks in progress. Returns number of unlinks that the PMD is currently
518 : : * performing, but have not yet been completed.
519 : : *
520 : : * @param dev
521 : : * Event device pointer
522 : : *
523 : : * @param port
524 : : * Event port pointer
525 : : *
526 : : * @return
527 : : * Returns the number of in-progress unlinks. Zero is returned if none are
528 : : * in progress.
529 : : */
530 : : typedef int (*eventdev_port_unlinks_in_progress_t)(struct rte_eventdev *dev,
531 : : void *port);
532 : :
533 : : /**
534 : : * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue()
535 : : *
536 : : * @param dev
537 : : * Event device pointer
538 : : * @param ns
539 : : * Wait time in nanosecond
540 : : * @param[out] timeout_ticks
541 : : * Value for the *timeout_ticks* parameter in rte_event_dequeue() function
542 : : *
543 : : * @return
544 : : * Returns 0 on success.
545 : : */
546 : : typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
547 : : uint64_t ns, uint64_t *timeout_ticks);
548 : :
549 : : /**
550 : : * Dump internal information
551 : : *
552 : : * @param dev
553 : : * Event device pointer
554 : : * @param f
555 : : * A pointer to a file for output
556 : : */
557 : : typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
558 : :
559 : : /**
560 : : * Retrieve a set of statistics from device
561 : : *
562 : : * @param dev
563 : : * Event device pointer
564 : : * @param mode
565 : : * Level (device, port or queue)
566 : : * @param queue_port_id
567 : : * Queue or port number depending on mode
568 : : * @param ids
569 : : * The stat ids to retrieve
570 : : * @param values
571 : : * The returned stat values
572 : : * @param n
573 : : * The number of id values and entries in the values array
574 : : * @return
575 : : * The number of stat values successfully filled into the values array
576 : : */
577 : : typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
578 : : enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
579 : : const uint64_t ids[], uint64_t values[], unsigned int n);
580 : :
581 : : /**
582 : : * Resets the statistic values in xstats for the device, based on mode.
583 : : */
584 : : typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
585 : : enum rte_event_dev_xstats_mode mode,
586 : : int16_t queue_port_id,
587 : : const uint64_t ids[],
588 : : uint32_t nb_ids);
589 : :
590 : : /**
591 : : * Get names of extended stats of an event device
592 : : *
593 : : * @param dev
594 : : * Event device pointer
595 : : * @param mode
596 : : * Level (device, port or queue)
597 : : * @param queue_port_id
598 : : * Queue or port number depending on mode
599 : : * @param xstats_names
600 : : * Array of name values to be filled in
601 : : * @param ids
602 : : * The stat ids to retrieve
603 : : * @param size
604 : : * Number of values in the xstats_names array
605 : : * @return
606 : : * When size >= the number of stats, return the number of stat values filled
607 : : * into the array.
608 : : * When size < the number of available stats, return the number of stats
609 : : * values, and do not fill in any data into xstats_names.
610 : : */
611 : : typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
612 : : enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
613 : : struct rte_event_dev_xstats_name *xstats_names,
614 : : uint64_t *ids, unsigned int size);
615 : :
616 : : /**
617 : : * Get value of one stats and optionally return its id
618 : : *
619 : : * @param dev
620 : : * Event device pointer
621 : : * @param name
622 : : * The name of the stat to retrieve
623 : : * @param id
624 : : * Pointer to an unsigned int where we store the stat-id for future reference.
625 : : * This pointer may be null if the id is not required.
626 : : * @return
627 : : * The value of the stat, or (uint64_t)-1 if the stat is not found.
628 : : * If the stat is not found, the id value will be returned as (unsigned)-1,
629 : : * if id pointer is non-NULL
630 : : */
631 : : typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
632 : : const char *name, uint64_t *id);
633 : :
634 : :
635 : : /**
636 : : * Retrieve the event device's ethdev Rx adapter capabilities for the
637 : : * specified ethernet port
638 : : *
639 : : * @param dev
640 : : * Event device pointer
641 : : *
642 : : * @param eth_dev
643 : : * Ethernet device pointer
644 : : *
645 : : * @param[out] caps
646 : : * A pointer to memory filled with Rx event adapter capabilities.
647 : : *
648 : : * @return
649 : : * - 0: Success, driver provides Rx event adapter capabilities for the
650 : : * ethernet device.
651 : : * - <0: Error code returned by the driver function.
652 : : */
653 : : typedef int (*eventdev_eth_rx_adapter_caps_get_t)
654 : : (const struct rte_eventdev *dev,
655 : : const struct rte_eth_dev *eth_dev,
656 : : uint32_t *caps);
657 : :
658 : : struct rte_event_eth_rx_adapter_queue_conf;
659 : :
660 : : /**
661 : : * Retrieve the event device's timer adapter capabilities, as well as the ops
662 : : * structure that an event timer adapter should call through to enter the
663 : : * driver
664 : : *
665 : : * @param dev
666 : : * Event device pointer
667 : : *
668 : : * @param flags
669 : : * Flags that can be used to determine how to select an event timer
670 : : * adapter ops structure
671 : : *
672 : : * @param[out] caps
673 : : * A pointer to memory filled with Rx event adapter capabilities.
674 : : *
675 : : * @param[out] ops
676 : : * A pointer to the ops pointer to set with the address of the desired ops
677 : : * structure
678 : : *
679 : : * @return
680 : : * - 0: Success, driver provides Rx event adapter capabilities for the
681 : : * ethernet device.
682 : : * - <0: Error code returned by the driver function.
683 : : */
684 : : typedef int (*eventdev_timer_adapter_caps_get_t)(
685 : : const struct rte_eventdev *dev, uint64_t flags, uint32_t *caps,
686 : : const struct event_timer_adapter_ops **ops);
687 : :
688 : : /**
689 : : * Add ethernet Rx queues to event device. This callback is invoked if
690 : : * the caps returned from rte_eventdev_eth_rx_adapter_caps_get(, eth_port_id)
691 : : * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
692 : : *
693 : : * @param dev
694 : : * Event device pointer
695 : : *
696 : : * @param eth_dev
697 : : * Ethernet device pointer
698 : : *
699 : : * @param rx_queue_id
700 : : * Ethernet device receive queue index
701 : : *
702 : : * @param queue_conf
703 : : * Additional configuration structure
704 : :
705 : : * @return
706 : : * - 0: Success, ethernet receive queue added successfully.
707 : : * - <0: Error code returned by the driver function.
708 : : */
709 : : typedef int (*eventdev_eth_rx_adapter_queue_add_t)(
710 : : const struct rte_eventdev *dev,
711 : : const struct rte_eth_dev *eth_dev,
712 : : int32_t rx_queue_id,
713 : : const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
714 : :
715 : : /**
716 : : * Add ethernet Rx queues to event device in burst. This callback is invoked if
717 : : * the caps returned from rte_eventdev_eth_rx_adapter_caps_get(, eth_port_id)
718 : : * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
719 : : *
720 : : * @param dev
721 : : * Event device pointer
722 : : *
723 : : * @param eth_dev
724 : : * Ethernet device pointer
725 : : *
726 : : * @param rx_queue_id
727 : : * Ethernet device receive queue index array
728 : : *
729 : : * @param queue_conf
730 : : * Additional configuration structure array
731 : : *
732 : : * @param nb_rx_queues
733 : : * Number of ethernet device receive queues
734 : : *
735 : : * @return
736 : : * - 0: Success, ethernet receive queues added successfully.
737 : : * - <0: Error code returned by the driver function.
738 : : */
739 : : typedef int (*eventdev_eth_rx_adapter_queues_add_t)(
740 : : const struct rte_eventdev *dev,
741 : : const struct rte_eth_dev *eth_dev,
742 : : int32_t rx_queue_id[],
743 : : const struct rte_event_eth_rx_adapter_queue_conf queue_conf[],
744 : : uint16_t nb_rx_queues);
745 : :
746 : : /**
747 : : * Delete ethernet Rx queues from event device. This callback is invoked if
748 : : * the caps returned from eventdev_eth_rx_adapter_caps_get(, eth_port_id)
749 : : * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
750 : : *
751 : : * @param dev
752 : : * Event device pointer
753 : : *
754 : : * @param eth_dev
755 : : * Ethernet device pointer
756 : : *
757 : : * @param rx_queue_id
758 : : * Ethernet device receive queue index
759 : : *
760 : : * @return
761 : : * - 0: Success, ethernet receive queue deleted successfully.
762 : : * - <0: Error code returned by the driver function.
763 : : */
764 : : typedef int (*eventdev_eth_rx_adapter_queue_del_t)
765 : : (const struct rte_eventdev *dev,
766 : : const struct rte_eth_dev *eth_dev,
767 : : int32_t rx_queue_id);
768 : :
769 : : /**
770 : : * Retrieve Rx adapter queue config information for the specified
771 : : * rx queue ID.
772 : : *
773 : : * @param dev
774 : : * Event device pointer
775 : : *
776 : : * @param eth_dev
777 : : * Ethernet device pointer
778 : : *
779 : : * @param rx_queue_id
780 : : * Ethernet device receive queue index.
781 : : *
782 : : * @param[out] queue_conf
783 : : * Pointer to rte_event_eth_rx_adapter_queue_conf structure
784 : : *
785 : : * @return
786 : : * - 0: Success
787 : : * - <0: Error code on failure.
788 : : */
789 : : typedef int (*eventdev_eth_rx_adapter_queue_conf_get_t)
790 : : (const struct rte_eventdev *dev,
791 : : const struct rte_eth_dev *eth_dev,
792 : : uint16_t rx_queue_id,
793 : : struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
794 : :
795 : : /**
796 : : * Start ethernet Rx adapter. This callback is invoked if
797 : : * the caps returned from eventdev_eth_rx_adapter_caps_get(.., eth_port_id)
798 : : * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues
799 : : * from eth_port_id have been added to the event device.
800 : : *
801 : : * @param dev
802 : : * Event device pointer
803 : : *
804 : : * @param eth_dev
805 : : * Ethernet device pointer
806 : : *
807 : : * @return
808 : : * - 0: Success, ethernet Rx adapter started successfully.
809 : : * - <0: Error code returned by the driver function.
810 : : */
811 : : typedef int (*eventdev_eth_rx_adapter_start_t)
812 : : (const struct rte_eventdev *dev,
813 : : const struct rte_eth_dev *eth_dev);
814 : :
815 : : /**
816 : : * Stop ethernet Rx adapter. This callback is invoked if
817 : : * the caps returned from eventdev_eth_rx_adapter_caps_get(..,eth_port_id)
818 : : * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues
819 : : * from eth_port_id have been added to the event device.
820 : : *
821 : : * @param dev
822 : : * Event device pointer
823 : : *
824 : : * @param eth_dev
825 : : * Ethernet device pointer
826 : : *
827 : : * @return
828 : : * - 0: Success, ethernet Rx adapter stopped successfully.
829 : : * - <0: Error code returned by the driver function.
830 : : */
831 : : typedef int (*eventdev_eth_rx_adapter_stop_t)
832 : : (const struct rte_eventdev *dev,
833 : : const struct rte_eth_dev *eth_dev);
834 : :
835 : : struct rte_event_eth_rx_adapter_stats;
836 : :
837 : : /**
838 : : * Retrieve ethernet Rx adapter statistics.
839 : : *
840 : : * @param dev
841 : : * Event device pointer
842 : : *
843 : : * @param eth_dev
844 : : * Ethernet device pointer
845 : : *
846 : : * @param[out] stats
847 : : * Pointer to stats structure
848 : : *
849 : : * @return
850 : : * Return 0 on success.
851 : : */
852 : :
853 : : typedef int (*eventdev_eth_rx_adapter_stats_get)
854 : : (const struct rte_eventdev *dev,
855 : : const struct rte_eth_dev *eth_dev,
856 : : struct rte_event_eth_rx_adapter_stats *stats);
857 : : /**
858 : : * Reset ethernet Rx adapter statistics.
859 : : *
860 : : * @param dev
861 : : * Event device pointer
862 : : *
863 : : * @param eth_dev
864 : : * Ethernet device pointer
865 : : *
866 : : * @return
867 : : * Return 0 on success.
868 : : */
869 : : typedef int (*eventdev_eth_rx_adapter_stats_reset)
870 : : (const struct rte_eventdev *dev,
871 : : const struct rte_eth_dev *eth_dev);
872 : :
873 : : struct rte_event_eth_rx_adapter_queue_stats;
874 : :
875 : : /**
876 : : * Retrieve ethernet Rx adapter queue statistics.
877 : : *
878 : : * @param dev
879 : : * Event device pointer
880 : : *
881 : : * @param eth_dev
882 : : * Ethernet device pointer
883 : : *
884 : : * @param rx_queue_id
885 : : * Ethernet device receive queue index.
886 : : *
887 : : * @param[out] q_stats
888 : : * Pointer to queue stats structure
889 : : *
890 : : * @return
891 : : * Return 0 on success.
892 : : */
893 : : typedef int (*eventdev_eth_rx_adapter_q_stats_get)
894 : : (const struct rte_eventdev *dev,
895 : : const struct rte_eth_dev *eth_dev,
896 : : uint16_t rx_queue_id,
897 : : struct rte_event_eth_rx_adapter_queue_stats *q_stats);
898 : :
899 : : /**
900 : : * Reset ethernet Rx adapter queue statistics.
901 : : *
902 : : * @param dev
903 : : * Event device pointer
904 : : *
905 : : * @param eth_dev
906 : : * Ethernet device pointer
907 : : *
908 : : * @param rx_queue_id
909 : : * Ethernet device receive queue index.
910 : : *
911 : : * @return
912 : : * Return 0 on success.
913 : : */
914 : : typedef int (*eventdev_eth_rx_adapter_q_stats_reset)
915 : : (const struct rte_eventdev *dev,
916 : : const struct rte_eth_dev *eth_dev,
917 : : uint16_t rx_queue_id);
918 : :
919 : : /**
920 : : * Start eventdev selftest.
921 : : *
922 : : * @return
923 : : * Return 0 on success.
924 : : */
925 : : typedef int (*eventdev_selftest)(void);
926 : :
927 : : struct rte_event_eth_rx_adapter_vector_limits;
928 : : /**
929 : : * Get event vector limits for a given event, ethernet device pair.
930 : : *
931 : : * @param dev
932 : : * Event device pointer
933 : : *
934 : : * @param eth_dev
935 : : * Ethernet device pointer
936 : : *
937 : : * @param[out] limits
938 : : * Pointer to the limits structure to be filled.
939 : : *
940 : : * @return
941 : : * - 0: Success.
942 : : * - <0: Error code returned by the driver function.
943 : : */
944 : : typedef int (*eventdev_eth_rx_adapter_vector_limits_get_t)(
945 : : const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev,
946 : : struct rte_event_eth_rx_adapter_vector_limits *limits);
947 : :
948 : : /**
949 : : * Get Rx adapter instance ID for Rx queue
950 : : *
951 : : * @param eth_dev_id
952 : : * Port identifier of ethernet device
953 : : *
954 : : * @param rx_queue_id
955 : : * Ethernet device Rx queue index
956 : : *
957 : : * @param[out] rxa_inst_id
958 : : * Pointer to Rx adapter instance identifier.
959 : : * Contains valid Rx adapter instance ID when return value is 0
960 : : *
961 : : * @return
962 : : * - 0: Success
963 : : * - <0: Error code on failure
964 : : */
965 : : typedef int (*eventdev_eth_rx_adapter_instance_get_t)
966 : : (uint16_t eth_dev_id, uint16_t rx_queue_id, uint8_t *rxa_inst_id);
967 : :
968 : : typedef uint32_t rte_event_pmd_selftest_seqn_t;
969 : : extern int rte_event_pmd_selftest_seqn_dynfield_offset;
970 : :
971 : : /**
972 : : * Read test sequence number from mbuf.
973 : : *
974 : : * @param mbuf Structure to read from.
975 : : * @return pointer to test sequence number.
976 : : */
977 : : __rte_internal
978 : : static inline rte_event_pmd_selftest_seqn_t *
979 : : rte_event_pmd_selftest_seqn(struct rte_mbuf *mbuf)
980 : : {
981 [ - + - + : 45 : return RTE_MBUF_DYNFIELD(mbuf,
- + - + -
+ - + ]
982 : : rte_event_pmd_selftest_seqn_dynfield_offset,
983 : : rte_event_pmd_selftest_seqn_t *);
984 : : }
985 : :
986 : : struct rte_cryptodev;
987 : : struct rte_event_crypto_adapter_queue_conf;
988 : :
989 : : /**
990 : : * This API may change without prior notice
991 : : *
992 : : * Retrieve the event device's crypto adapter capabilities for the
993 : : * specified cryptodev
994 : : *
995 : : * @param dev
996 : : * Event device pointer
997 : : *
998 : : * @param cdev
999 : : * cryptodev pointer
1000 : : *
1001 : : * @param[out] caps
1002 : : * A pointer to memory filled with event adapter capabilities.
1003 : : * It is expected to be pre-allocated & initialized by caller.
1004 : : *
1005 : : * @return
1006 : : * - 0: Success, driver provides event adapter capabilities for the
1007 : : * cryptodev.
1008 : : * - <0: Error code returned by the driver function.
1009 : : */
1010 : : typedef int (*eventdev_crypto_adapter_caps_get_t)
1011 : : (const struct rte_eventdev *dev,
1012 : : const struct rte_cryptodev *cdev,
1013 : : uint32_t *caps);
1014 : :
1015 : : /**
1016 : : * This API may change without prior notice
1017 : : *
1018 : : * Add crypto queue pair to event device. This callback is invoked if
1019 : : * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id)
1020 : : * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set.
1021 : : *
1022 : : * @param dev
1023 : : * Event device pointer
1024 : : *
1025 : : * @param cdev
1026 : : * cryptodev pointer
1027 : : *
1028 : : * @param queue_pair_id
1029 : : * cryptodev queue pair identifier.
1030 : : *
1031 : : * @param event
1032 : : * Event information required for binding cryptodev queue pair to event queue.
1033 : : * This structure will have a valid value for only those HW PMDs supporting
1034 : : * @see RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND capability.
1035 : : *
1036 : : * @return
1037 : : * - 0: Success, cryptodev queue pair added successfully.
1038 : : * - <0: Error code returned by the driver function.
1039 : : */
1040 : : typedef int (*eventdev_crypto_adapter_queue_pair_add_t)(
1041 : : const struct rte_eventdev *dev,
1042 : : const struct rte_cryptodev *cdev,
1043 : : int32_t queue_pair_id,
1044 : : const struct rte_event_crypto_adapter_queue_conf *queue_conf);
1045 : :
1046 : :
1047 : : /**
1048 : : * This API may change without prior notice
1049 : : *
1050 : : * Delete crypto queue pair to event device. This callback is invoked if
1051 : : * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id)
1052 : : * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set.
1053 : : *
1054 : : * @param dev
1055 : : * Event device pointer
1056 : : *
1057 : : * @param cdev
1058 : : * cryptodev pointer
1059 : : *
1060 : : * @param queue_pair_id
1061 : : * cryptodev queue pair identifier.
1062 : : *
1063 : : * @return
1064 : : * - 0: Success, cryptodev queue pair deleted successfully.
1065 : : * - <0: Error code returned by the driver function.
1066 : : */
1067 : : typedef int (*eventdev_crypto_adapter_queue_pair_del_t)
1068 : : (const struct rte_eventdev *dev,
1069 : : const struct rte_cryptodev *cdev,
1070 : : int32_t queue_pair_id);
1071 : :
1072 : : /**
1073 : : * Start crypto adapter. This callback is invoked if
1074 : : * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id)
1075 : : * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs
1076 : : * from cdev_id have been added to the event device.
1077 : : *
1078 : : * @param dev
1079 : : * Event device pointer
1080 : : *
1081 : : * @param cdev
1082 : : * Crypto device pointer
1083 : : *
1084 : : * @return
1085 : : * - 0: Success, crypto adapter started successfully.
1086 : : * - <0: Error code returned by the driver function.
1087 : : */
1088 : : typedef int (*eventdev_crypto_adapter_start_t)
1089 : : (const struct rte_eventdev *dev,
1090 : : const struct rte_cryptodev *cdev);
1091 : :
1092 : : /**
1093 : : * Stop crypto adapter. This callback is invoked if
1094 : : * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id)
1095 : : * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs
1096 : : * from cdev_id have been added to the event device.
1097 : : *
1098 : : * @param dev
1099 : : * Event device pointer
1100 : : *
1101 : : * @param cdev
1102 : : * Crypto device pointer
1103 : : *
1104 : : * @return
1105 : : * - 0: Success, crypto adapter stopped successfully.
1106 : : * - <0: Error code returned by the driver function.
1107 : : */
1108 : : typedef int (*eventdev_crypto_adapter_stop_t)
1109 : : (const struct rte_eventdev *dev,
1110 : : const struct rte_cryptodev *cdev);
1111 : :
1112 : : struct rte_event_crypto_adapter_stats;
1113 : :
1114 : : /**
1115 : : * Retrieve crypto adapter statistics.
1116 : : *
1117 : : * @param dev
1118 : : * Event device pointer
1119 : : *
1120 : : * @param cdev
1121 : : * Crypto device pointer
1122 : : *
1123 : : * @param[out] stats
1124 : : * Pointer to stats structure
1125 : : *
1126 : : * @return
1127 : : * Return 0 on success.
1128 : : */
1129 : :
1130 : : typedef int (*eventdev_crypto_adapter_stats_get)
1131 : : (const struct rte_eventdev *dev,
1132 : : const struct rte_cryptodev *cdev,
1133 : : struct rte_event_crypto_adapter_stats *stats);
1134 : :
1135 : : /**
1136 : : * Reset crypto adapter statistics.
1137 : : *
1138 : : * @param dev
1139 : : * Event device pointer
1140 : : *
1141 : : * @param cdev
1142 : : * Crypto device pointer
1143 : : *
1144 : : * @return
1145 : : * Return 0 on success.
1146 : : */
1147 : :
1148 : : typedef int (*eventdev_crypto_adapter_stats_reset)
1149 : : (const struct rte_eventdev *dev,
1150 : : const struct rte_cryptodev *cdev);
1151 : :
1152 : : struct rte_event_crypto_adapter_vector_limits;
1153 : : /**
1154 : : * Get event vector limits for a given event, crypto device pair.
1155 : : *
1156 : : * @param dev
1157 : : * Event device pointer
1158 : : *
1159 : : * @param cdev
1160 : : * Crypto device pointer
1161 : : *
1162 : : * @param[out] limits
1163 : : * Pointer to the limits structure to be filled.
1164 : : *
1165 : : * @return
1166 : : * - 0: Success.
1167 : : * - <0: Error code returned by the driver function.
1168 : : */
1169 : : typedef int (*eventdev_crypto_adapter_vector_limits_get_t)(
1170 : : const struct rte_eventdev *dev, const struct rte_cryptodev *cdev,
1171 : : struct rte_event_crypto_adapter_vector_limits *limits);
1172 : :
1173 : : /**
1174 : : * Retrieve the event device's eth Tx adapter capabilities.
1175 : : *
1176 : : * @param dev
1177 : : * Event device pointer
1178 : : *
1179 : : * @param eth_dev
1180 : : * Ethernet device pointer
1181 : : *
1182 : : * @param[out] caps
1183 : : * A pointer to memory filled with eth Tx adapter capabilities.
1184 : : *
1185 : : * @return
1186 : : * - 0: Success, driver provides eth Tx adapter capabilities
1187 : : * - <0: Error code returned by the driver function.
1188 : : */
1189 : : typedef int (*eventdev_eth_tx_adapter_caps_get_t)
1190 : : (const struct rte_eventdev *dev,
1191 : : const struct rte_eth_dev *eth_dev,
1192 : : uint32_t *caps);
1193 : :
1194 : : /**
1195 : : * Create adapter callback.
1196 : : *
1197 : : * @param id
1198 : : * Adapter identifier
1199 : : *
1200 : : * @param dev
1201 : : * Event device pointer
1202 : : *
1203 : : * @return
1204 : : * - 0: Success.
1205 : : * - <0: Error code on failure.
1206 : : */
1207 : : typedef int (*eventdev_eth_tx_adapter_create_t)(uint8_t id,
1208 : : const struct rte_eventdev *dev);
1209 : :
1210 : : /**
1211 : : * Free adapter callback.
1212 : : *
1213 : : * @param id
1214 : : * Adapter identifier
1215 : : *
1216 : : * @param dev
1217 : : * Event device pointer
1218 : : *
1219 : : * @return
1220 : : * - 0: Success.
1221 : : * - <0: Error code on failure.
1222 : : */
1223 : : typedef int (*eventdev_eth_tx_adapter_free_t)(uint8_t id,
1224 : : const struct rte_eventdev *dev);
1225 : :
1226 : : /**
1227 : : * Add a Tx queue to the adapter.
1228 : : * A queue value of -1 is used to indicate all
1229 : : * queues within the device.
1230 : : *
1231 : : * @param id
1232 : : * Adapter identifier
1233 : : *
1234 : : * @param dev
1235 : : * Event device pointer
1236 : : *
1237 : : * @param eth_dev
1238 : : * Ethernet device pointer
1239 : : *
1240 : : * @param tx_queue_id
1241 : : * Transmit queue index
1242 : : *
1243 : : * @return
1244 : : * - 0: Success.
1245 : : * - <0: Error code on failure.
1246 : : */
1247 : : typedef int (*eventdev_eth_tx_adapter_queue_add_t)(
1248 : : uint8_t id,
1249 : : const struct rte_eventdev *dev,
1250 : : const struct rte_eth_dev *eth_dev,
1251 : : int32_t tx_queue_id);
1252 : :
1253 : : /**
1254 : : * Delete a Tx queue from the adapter.
1255 : : * A queue value of -1 is used to indicate all
1256 : : * queues within the device, that have been added to this
1257 : : * adapter.
1258 : : *
1259 : : * @param id
1260 : : * Adapter identifier
1261 : : *
1262 : : * @param dev
1263 : : * Event device pointer
1264 : : *
1265 : : * @param eth_dev
1266 : : * Ethernet device pointer
1267 : : *
1268 : : * @param tx_queue_id
1269 : : * Transmit queue index
1270 : : *
1271 : : * @return
1272 : : * - 0: Success, Queues deleted successfully.
1273 : : * - <0: Error code on failure.
1274 : : */
1275 : : typedef int (*eventdev_eth_tx_adapter_queue_del_t)(
1276 : : uint8_t id,
1277 : : const struct rte_eventdev *dev,
1278 : : const struct rte_eth_dev *eth_dev,
1279 : : int32_t tx_queue_id);
1280 : :
1281 : : /**
1282 : : * Start the adapter.
1283 : : *
1284 : : * @param id
1285 : : * Adapter identifier
1286 : : *
1287 : : * @param dev
1288 : : * Event device pointer
1289 : : *
1290 : : * @return
1291 : : * - 0: Success, Adapter started correctly.
1292 : : * - <0: Error code on failure.
1293 : : */
1294 : : typedef int (*eventdev_eth_tx_adapter_start_t)(uint8_t id,
1295 : : const struct rte_eventdev *dev);
1296 : :
1297 : : /**
1298 : : * Stop the adapter.
1299 : : *
1300 : : * @param id
1301 : : * Adapter identifier
1302 : : *
1303 : : * @param dev
1304 : : * Event device pointer
1305 : : *
1306 : : * @return
1307 : : * - 0: Success.
1308 : : * - <0: Error code on failure.
1309 : : */
1310 : : typedef int (*eventdev_eth_tx_adapter_stop_t)(uint8_t id,
1311 : : const struct rte_eventdev *dev);
1312 : :
1313 : : struct rte_event_eth_tx_adapter_stats;
1314 : :
1315 : : /**
1316 : : * Retrieve statistics for an adapter
1317 : : *
1318 : : * @param id
1319 : : * Adapter identifier
1320 : : *
1321 : : * @param dev
1322 : : * Event device pointer
1323 : : *
1324 : : * @param [out] stats
1325 : : * A pointer to structure used to retrieve statistics for an adapter
1326 : : *
1327 : : * @return
1328 : : * - 0: Success, statistics retrieved successfully.
1329 : : * - <0: Error code on failure.
1330 : : */
1331 : : typedef int (*eventdev_eth_tx_adapter_stats_get_t)(
1332 : : uint8_t id,
1333 : : const struct rte_eventdev *dev,
1334 : : struct rte_event_eth_tx_adapter_stats *stats);
1335 : :
1336 : : /**
1337 : : * Reset statistics for an adapter
1338 : : *
1339 : : * @param id
1340 : : * Adapter identifier
1341 : : *
1342 : : * @param dev
1343 : : * Event device pointer
1344 : : *
1345 : : * @return
1346 : : * - 0: Success, statistics retrieved successfully.
1347 : : * - <0: Error code on failure.
1348 : : */
1349 : : typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id,
1350 : : const struct rte_eventdev *dev);
1351 : :
1352 : : /**
1353 : : * Get TX adapter instance ID for Tx queue
1354 : : *
1355 : : * @param eth_dev_id
1356 : : * Port identifier of Ethernet device
1357 : : *
1358 : : * @param tx_queue_id
1359 : : * Ethernet device Tx queue index
1360 : : *
1361 : : * @param[out] txa_inst_id
1362 : : * Pointer to Tx adapter instance identifier
1363 : : * Contains valid Tx adapter instance ID when return value is 0
1364 : : *
1365 : : * @return
1366 : : * - 0: Success
1367 : : * - <0: Error code on failure
1368 : : */
1369 : : typedef int (*eventdev_eth_tx_adapter_instance_get_t)
1370 : : (uint16_t eth_dev_id, uint16_t tx_queue_id, uint8_t *txa_inst_id);
1371 : :
1372 : : /**
1373 : : * Start a Tx queue that is assigned to Tx adapter instance
1374 : : *
1375 : : * @param id
1376 : : * Adapter identifier
1377 : : *
1378 : : * @param eth_dev_id
1379 : : * Port identifier of Ethernet device
1380 : : *
1381 : : * @param tx_queue_id
1382 : : * Ethernet device Tx queue index
1383 : : *
1384 : : * @return
1385 : : * - 0: Success
1386 : : * - <0: Error code on failure
1387 : : */
1388 : : typedef int (*eventdev_eth_tx_adapter_queue_start)
1389 : : (uint8_t id, uint16_t eth_dev_id, uint16_t tx_queue_id);
1390 : :
1391 : : /**
1392 : : * Stop a Tx queue that is assigned to Tx adapter instance
1393 : : *
1394 : : * @param id
1395 : : * Adapter identifier
1396 : : *
1397 : : * @param eth_dev_id
1398 : : * Port identifier of Ethernet device
1399 : : *
1400 : : * @param tx_queue_id
1401 : : * Ethernet device Tx queue index
1402 : : *
1403 : : * @return
1404 : : * - 0: Success
1405 : : * - <0: Error code on failure
1406 : : */
1407 : : typedef int (*eventdev_eth_tx_adapter_queue_stop)
1408 : : (uint8_t id, uint16_t eth_dev_id, uint16_t tx_queue_id);
1409 : :
1410 : : #define eventdev_stop_flush_t rte_eventdev_stop_flush_t
1411 : :
1412 : : /**
1413 : : * Retrieve the event device's DMA adapter capabilities for the
1414 : : * specified DMA device
1415 : : *
1416 : : * @param dev
1417 : : * Event device pointer
1418 : : *
1419 : : * @param dma_dev_id
1420 : : * DMA device identifier
1421 : : *
1422 : : * @param[out] caps
1423 : : * A pointer to memory filled with event adapter capabilities.
1424 : : * It is expected to be pre-allocated & initialized by caller.
1425 : : *
1426 : : * @return
1427 : : * - 0: Success, driver provides event adapter capabilities for the
1428 : : * dmadev.
1429 : : * - <0: Error code returned by the driver function.
1430 : : *
1431 : : */
1432 : : typedef int (*eventdev_dma_adapter_caps_get_t)(const struct rte_eventdev *dev,
1433 : : const int16_t dma_dev_id, uint32_t *caps);
1434 : :
1435 : : /**
1436 : : * Add DMA vchan queue to event device. This callback is invoked if
1437 : : * the caps returned from rte_event_dma_adapter_caps_get(, dmadev_id)
1438 : : * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set.
1439 : : *
1440 : : * @param dev
1441 : : * Event device pointer
1442 : : *
1443 : : * @param dma_dev_id
1444 : : * DMA device identifier
1445 : : *
1446 : : * @param vchan_id
1447 : : * dmadev vchan queue identifier.
1448 : : *
1449 : : * @param event
1450 : : * Event information required for binding dmadev vchan to event queue.
1451 : : * This structure will have a valid value for only those HW PMDs supporting
1452 : : * @see RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND capability.
1453 : : *
1454 : : * @return
1455 : : * - 0: Success, dmadev vchan added successfully.
1456 : : * - <0: Error code returned by the driver function.
1457 : : *
1458 : : */
1459 : : typedef int (*eventdev_dma_adapter_vchan_add_t)(const struct rte_eventdev *dev,
1460 : : const int16_t dma_dev_id,
1461 : : uint16_t vchan_id,
1462 : : const struct rte_event *event);
1463 : :
1464 : : /**
1465 : : * Delete DMA vhcan to event device. This callback is invoked if
1466 : : * the caps returned from rte_event_dma_adapter_caps_get(, dmadev_id)
1467 : : * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set.
1468 : : *
1469 : : * @param dev
1470 : : * Event device pointer
1471 : : *
1472 : : * @param dma_dev_id
1473 : : * DMA device identifier
1474 : : *
1475 : : * @param vchan_id
1476 : : * dmadev vchan identifier.
1477 : : *
1478 : : * @return
1479 : : * - 0: Success, dmadev vchan deleted successfully.
1480 : : * - <0: Error code returned by the driver function.
1481 : : *
1482 : : */
1483 : : typedef int (*eventdev_dma_adapter_vchan_del_t)(const struct rte_eventdev *dev,
1484 : : const int16_t dma_dev_id,
1485 : : uint16_t vchan_id);
1486 : :
1487 : : /**
1488 : : * Start DMA adapter. This callback is invoked if
1489 : : * the caps returned from rte_event_dma_adapter_caps_get(.., dmadev_id)
1490 : : * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set and vchan for dmadev_id
1491 : : * have been added to the event device.
1492 : : *
1493 : : * @param dev
1494 : : * Event device pointer
1495 : : *
1496 : : * @param dma_dev_id
1497 : : * DMA device identifier
1498 : : *
1499 : : * @return
1500 : : * - 0: Success, DMA adapter started successfully.
1501 : : * - <0: Error code returned by the driver function.
1502 : : */
1503 : : typedef int (*eventdev_dma_adapter_start_t)(const struct rte_eventdev *dev,
1504 : : const int16_t dma_dev_id);
1505 : :
1506 : : /**
1507 : : * Stop DMA adapter. This callback is invoked if
1508 : : * the caps returned from rte_event_dma_adapter_caps_get(.., dmadev_id)
1509 : : * has RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_* set and vchan for dmadev_id
1510 : : * have been added to the event device.
1511 : : *
1512 : : * @param dev
1513 : : * Event device pointer
1514 : : *
1515 : : * @param dma_dev_id
1516 : : * DMA device identifier
1517 : : *
1518 : : * @return
1519 : : * - 0: Success, DMA adapter stopped successfully.
1520 : : * - <0: Error code returned by the driver function.
1521 : : */
1522 : : typedef int (*eventdev_dma_adapter_stop_t)(const struct rte_eventdev *dev,
1523 : : const int16_t dma_dev_id);
1524 : :
1525 : : struct rte_event_dma_adapter_stats;
1526 : :
1527 : : /**
1528 : : * Retrieve DMA adapter statistics.
1529 : : *
1530 : : * @param dev
1531 : : * Event device pointer
1532 : : *
1533 : : * @param dma_dev_id
1534 : : * DMA device identifier
1535 : : *
1536 : : * @param[out] stats
1537 : : * Pointer to stats structure
1538 : : *
1539 : : * @return
1540 : : * Return 0 on success.
1541 : : */
1542 : : typedef int (*eventdev_dma_adapter_stats_get)(const struct rte_eventdev *dev,
1543 : : const int16_t dma_dev_id,
1544 : : struct rte_event_dma_adapter_stats *stats);
1545 : :
1546 : : /**
1547 : : * Reset DMA adapter statistics.
1548 : : *
1549 : : * @param dev
1550 : : * Event device pointer
1551 : : *
1552 : : * @param dma_dev_id
1553 : : * DMA device identifier
1554 : : *
1555 : : * @return
1556 : : * Return 0 on success.
1557 : : */
1558 : : typedef int (*eventdev_dma_adapter_stats_reset)(const struct rte_eventdev *dev,
1559 : : const int16_t dma_dev_id);
1560 : :
1561 : : /**
1562 : : * Event device vector adapter capabilities.
1563 : : *
1564 : : * @param dev
1565 : : * Event device pointer
1566 : : * @param caps
1567 : : * Vector adapter capabilities
1568 : : * @param ops
1569 : : * Vector adapter ops
1570 : : *
1571 : : * @return
1572 : : * Return 0 on success.
1573 : : *
1574 : : */
1575 : : typedef int (*eventdev_vector_adapter_caps_get_t)(const struct rte_eventdev *dev, uint32_t *caps,
1576 : : const struct event_vector_adapter_ops **ops);
1577 : :
1578 : : /**
1579 : : * Event device vector adapter info.
1580 : : *
1581 : : * @param dev
1582 : : * Event device pointer
1583 : : * @param info
1584 : : * Vector adapter info
1585 : : *
1586 : : * @return
1587 : : * Return 0 on success.
1588 : : */
1589 : : typedef int (*eventdev_vector_adapter_info_get_t)(const struct rte_eventdev *dev,
1590 : : struct rte_event_vector_adapter_info *info);
1591 : :
1592 : : /** Event device operations function pointer table */
1593 : : struct eventdev_ops {
1594 : : eventdev_info_get_t dev_infos_get; /**< Get device info. */
1595 : : eventdev_configure_t dev_configure; /**< Configure device. */
1596 : : eventdev_start_t dev_start; /**< Start device. */
1597 : : eventdev_stop_t dev_stop; /**< Stop device. */
1598 : : eventdev_close_t dev_close; /**< Close device. */
1599 : :
1600 : : eventdev_queue_default_conf_get_t queue_def_conf;
1601 : : /**< Get default queue configuration. */
1602 : : eventdev_queue_setup_t queue_setup;
1603 : : /**< Set up an event queue. */
1604 : : eventdev_queue_release_t queue_release;
1605 : : /**< Release an event queue. */
1606 : : eventdev_queue_attr_set_t queue_attr_set;
1607 : : /**< Set an event queue attribute. */
1608 : :
1609 : : eventdev_port_default_conf_get_t port_def_conf;
1610 : : /**< Get default port configuration. */
1611 : : eventdev_port_setup_t port_setup;
1612 : : /**< Set up an event port. */
1613 : : eventdev_port_release_t port_release;
1614 : : /**< Release an event port. */
1615 : : eventdev_port_quiesce_t port_quiesce;
1616 : : /**< Quiesce an event port. */
1617 : :
1618 : : eventdev_port_link_t port_link;
1619 : : /**< Link event queues to an event port. */
1620 : : eventdev_port_link_profile_t port_link_profile;
1621 : : /**< Link event queues associated with a profile to an event port. */
1622 : : eventdev_port_unlink_t port_unlink;
1623 : : /**< Unlink event queues from an event port. */
1624 : : eventdev_port_unlink_profile_t port_unlink_profile;
1625 : : /**< Unlink event queues associated with a profile from an event port. */
1626 : : eventdev_port_unlinks_in_progress_t port_unlinks_in_progress;
1627 : : /**< Unlinks in progress on an event port. */
1628 : : eventdev_dequeue_timeout_ticks_t timeout_ticks;
1629 : : /**< Converts ns to *timeout_ticks* value for rte_event_dequeue() */
1630 : : eventdev_dump_t dump;
1631 : : /* Dump internal information */
1632 : :
1633 : : eventdev_xstats_get_t xstats_get;
1634 : : /**< Get extended device statistics. */
1635 : : eventdev_xstats_get_names_t xstats_get_names;
1636 : : /**< Get names of extended stats. */
1637 : : eventdev_xstats_get_by_name xstats_get_by_name;
1638 : : /**< Get one value by name. */
1639 : : eventdev_xstats_reset_t xstats_reset;
1640 : : /**< Reset the statistics values in xstats. */
1641 : :
1642 : : eventdev_eth_rx_adapter_caps_get_t eth_rx_adapter_caps_get;
1643 : : /**< Get ethernet Rx adapter capabilities */
1644 : : eventdev_eth_rx_adapter_queue_add_t eth_rx_adapter_queue_add;
1645 : : /**< Add Rx queues to ethernet Rx adapter */
1646 : : eventdev_eth_rx_adapter_queues_add_t eth_rx_adapter_queues_add;
1647 : : /**< Add Rx queues to ethernet Rx adapter in burst */
1648 : : eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del;
1649 : : /**< Delete Rx queues from ethernet Rx adapter */
1650 : : eventdev_eth_rx_adapter_queue_conf_get_t eth_rx_adapter_queue_conf_get;
1651 : : /**< Get Rx adapter queue info */
1652 : : eventdev_eth_rx_adapter_start_t eth_rx_adapter_start;
1653 : : /**< Start ethernet Rx adapter */
1654 : : eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop;
1655 : : /**< Stop ethernet Rx adapter */
1656 : : eventdev_eth_rx_adapter_stats_get eth_rx_adapter_stats_get;
1657 : : /**< Get ethernet Rx stats */
1658 : : eventdev_eth_rx_adapter_stats_reset eth_rx_adapter_stats_reset;
1659 : : /**< Reset ethernet Rx stats */
1660 : : eventdev_eth_rx_adapter_vector_limits_get_t
1661 : : eth_rx_adapter_vector_limits_get;
1662 : : /**< Get event vector limits for the Rx adapter */
1663 : : eventdev_eth_rx_adapter_instance_get_t eth_rx_adapter_instance_get;
1664 : : /**< Get Rx adapter instance ID for Rx queue */
1665 : :
1666 : : eventdev_timer_adapter_caps_get_t timer_adapter_caps_get;
1667 : : /**< Get timer adapter capabilities */
1668 : :
1669 : : eventdev_crypto_adapter_caps_get_t crypto_adapter_caps_get;
1670 : : /**< Get crypto adapter capabilities */
1671 : : eventdev_crypto_adapter_queue_pair_add_t crypto_adapter_queue_pair_add;
1672 : : /**< Add queue pair to crypto adapter */
1673 : : eventdev_crypto_adapter_queue_pair_del_t crypto_adapter_queue_pair_del;
1674 : : /**< Delete queue pair from crypto adapter */
1675 : : eventdev_crypto_adapter_start_t crypto_adapter_start;
1676 : : /**< Start crypto adapter */
1677 : : eventdev_crypto_adapter_stop_t crypto_adapter_stop;
1678 : : /**< Stop crypto adapter */
1679 : : eventdev_crypto_adapter_stats_get crypto_adapter_stats_get;
1680 : : /**< Get crypto stats */
1681 : : eventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset;
1682 : : /**< Reset crypto stats */
1683 : : eventdev_crypto_adapter_vector_limits_get_t
1684 : : crypto_adapter_vector_limits_get;
1685 : : /**< Get event vector limits for the crypto adapter */
1686 : :
1687 : : eventdev_eth_rx_adapter_q_stats_get eth_rx_adapter_queue_stats_get;
1688 : : /**< Get ethernet Rx queue stats */
1689 : : eventdev_eth_rx_adapter_q_stats_reset eth_rx_adapter_queue_stats_reset;
1690 : : /**< Reset ethernet Rx queue stats */
1691 : :
1692 : : eventdev_eth_tx_adapter_caps_get_t eth_tx_adapter_caps_get;
1693 : : /**< Get ethernet Tx adapter capabilities */
1694 : :
1695 : : eventdev_eth_tx_adapter_create_t eth_tx_adapter_create;
1696 : : /**< Create adapter callback */
1697 : : eventdev_eth_tx_adapter_free_t eth_tx_adapter_free;
1698 : : /**< Free adapter callback */
1699 : : eventdev_eth_tx_adapter_queue_add_t eth_tx_adapter_queue_add;
1700 : : /**< Add Tx queues to the eth Tx adapter */
1701 : : eventdev_eth_tx_adapter_queue_del_t eth_tx_adapter_queue_del;
1702 : : /**< Delete Tx queues from the eth Tx adapter */
1703 : : eventdev_eth_tx_adapter_start_t eth_tx_adapter_start;
1704 : : /**< Start eth Tx adapter */
1705 : : eventdev_eth_tx_adapter_stop_t eth_tx_adapter_stop;
1706 : : /**< Stop eth Tx adapter */
1707 : : eventdev_eth_tx_adapter_stats_get_t eth_tx_adapter_stats_get;
1708 : : /**< Get eth Tx adapter statistics */
1709 : : eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset;
1710 : : /**< Reset eth Tx adapter statistics */
1711 : : eventdev_eth_tx_adapter_instance_get_t eth_tx_adapter_instance_get;
1712 : : /**< Get Tx adapter instance ID for Tx queue */
1713 : : eventdev_eth_tx_adapter_queue_start eth_tx_adapter_queue_start;
1714 : : /**< Start Tx queue assigned to Tx adapter instance */
1715 : : eventdev_eth_tx_adapter_queue_stop eth_tx_adapter_queue_stop;
1716 : : /**< Stop Tx queue assigned to Tx adapter instance */
1717 : :
1718 : : eventdev_dma_adapter_caps_get_t dma_adapter_caps_get;
1719 : : /**< Get DMA adapter capabilities */
1720 : : eventdev_dma_adapter_vchan_add_t dma_adapter_vchan_add;
1721 : : /**< Add vchan queue to DMA adapter */
1722 : : eventdev_dma_adapter_vchan_del_t dma_adapter_vchan_del;
1723 : : /**< Delete vchan queue from DMA adapter */
1724 : : eventdev_dma_adapter_start_t dma_adapter_start;
1725 : : /**< Start DMA adapter */
1726 : : eventdev_dma_adapter_stop_t dma_adapter_stop;
1727 : : /**< Stop DMA adapter */
1728 : : eventdev_dma_adapter_stats_get dma_adapter_stats_get;
1729 : : /**< Get DMA stats */
1730 : : eventdev_dma_adapter_stats_reset dma_adapter_stats_reset;
1731 : : /**< Reset DMA stats */
1732 : :
1733 : : eventdev_vector_adapter_caps_get_t vector_adapter_caps_get;
1734 : : /**< Get vector adapter capabilities */
1735 : : eventdev_vector_adapter_info_get_t vector_adapter_info_get;
1736 : : /**< Get vector adapter info */
1737 : :
1738 : : eventdev_selftest dev_selftest;
1739 : : /**< Start eventdev Selftest */
1740 : :
1741 : : eventdev_stop_flush_t dev_stop_flush;
1742 : : /**< User-provided event flush function */
1743 : : };
1744 : :
1745 : : /**
1746 : : * Allocates a new eventdev slot for an event device and returns the pointer
1747 : : * to that slot for the driver to use.
1748 : : *
1749 : : * @param name
1750 : : * Unique identifier name for each device
1751 : : * @param socket_id
1752 : : * Socket to allocate resources on.
1753 : : * @return
1754 : : * - Slot in the rte_dev_devices array for a new device;
1755 : : */
1756 : : __rte_internal
1757 : : struct rte_eventdev *
1758 : : rte_event_pmd_allocate(const char *name, int socket_id);
1759 : :
1760 : : /**
1761 : : * Release the specified eventdev device.
1762 : : *
1763 : : * @param eventdev
1764 : : * The *eventdev* pointer is the address of the *rte_eventdev* structure.
1765 : : * @return
1766 : : * - 0 on success, negative on error
1767 : : */
1768 : : __rte_internal
1769 : : int
1770 : : rte_event_pmd_release(struct rte_eventdev *eventdev);
1771 : :
1772 : : /**
1773 : : *
1774 : : * @internal
1775 : : * This is the last step of device probing.
1776 : : * It must be called after a port is allocated and initialized successfully.
1777 : : *
1778 : : * @param eventdev
1779 : : * New event device.
1780 : : */
1781 : : __rte_internal
1782 : : void
1783 : : event_dev_probing_finish(struct rte_eventdev *eventdev);
1784 : :
1785 : : /**
1786 : : * Reset eventdevice fastpath APIs to dummy values.
1787 : : *
1788 : : * @param fp_ops
1789 : : * The *fp_ops* pointer to reset.
1790 : : */
1791 : : __rte_internal
1792 : : void
1793 : : event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op);
1794 : :
1795 : : /**
1796 : : * Set eventdevice fastpath APIs to event device values.
1797 : : *
1798 : : * @param fp_ops
1799 : : * The *fp_ops* pointer to set.
1800 : : */
1801 : : __rte_internal
1802 : : void
1803 : : event_dev_fp_ops_set(struct rte_event_fp_ops *fp_ops,
1804 : : const struct rte_eventdev *dev);
1805 : :
1806 : : #ifdef __cplusplus
1807 : : }
1808 : : #endif
1809 : :
1810 : : #endif /* _RTE_EVENTDEV_PMD_H_ */
|