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