DPDK  20.11.1
rte_eventdev_pmd.h
Go to the documentation of this file.
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 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 #include <string.h>
21 
22 #include <rte_common.h>
23 #include <rte_compat.h>
24 #include <rte_config.h>
25 #include <rte_dev.h>
26 #include <rte_log.h>
27 #include <rte_malloc.h>
28 #include <rte_mbuf.h>
29 #include <rte_mbuf_dyn.h>
30 
31 #include "rte_eventdev.h"
33 
34 /* Logging Macros */
35 #define RTE_EDEV_LOG_ERR(...) \
36  RTE_LOG(ERR, EVENTDEV, \
37  RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
38  __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
39 
40 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
41 #define RTE_EDEV_LOG_DEBUG(...) \
42  RTE_LOG(DEBUG, EVENTDEV, \
43  RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
44  __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
45 #else
46 #define RTE_EDEV_LOG_DEBUG(...) (void)0
47 #endif
48 
49 /* Macros to check for valid device */
50 #define RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, retval) do { \
51  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
52  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
53  return retval; \
54  } \
55 } while (0)
56 
57 #define RTE_EVENTDEV_VALID_DEVID_OR_ERRNO_RET(dev_id, errno, retval) do { \
58  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
59  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
60  rte_errno = errno; \
61  return retval; \
62  } \
63 } while (0)
64 
65 #define RTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id) do { \
66  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
67  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
68  return; \
69  } \
70 } while (0)
71 
72 #define RTE_EVENT_ETH_RX_ADAPTER_SW_CAP \
73  ((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) | \
74  (RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ))
75 
76 #define RTE_EVENT_CRYPTO_ADAPTER_SW_CAP \
77  RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA
78 
83 #define RTE_EVENTDEV_DETACHED (0)
84 #define RTE_EVENTDEV_ATTACHED (1)
85 
86 struct rte_eth_dev;
87 
90  uint8_t nb_devs;
91 };
92 
93 extern struct rte_eventdev *rte_eventdevs;
105 static inline struct rte_eventdev *
107 {
108  struct rte_eventdev *dev;
109  unsigned int i;
110 
111  if (name == NULL)
112  return NULL;
113 
114  for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
115  dev = &rte_eventdevs[i];
116  if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
117  (strcmp(dev->data->name, name) == 0))
118  return dev;
119  }
120 
121  return NULL;
122 }
123 
133 static inline unsigned
135 {
136  struct rte_eventdev *dev;
137 
138  if (dev_id >= RTE_EVENT_MAX_DEVS)
139  return 0;
140 
141  dev = &rte_eventdevs[dev_id];
142  if (dev->attached != RTE_EVENTDEV_ATTACHED)
143  return 0;
144  else
145  return 1;
146 }
147 
162 typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev,
163  struct rte_event_dev_info *dev_info);
164 
174 typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev);
175 
185 typedef int (*eventdev_start_t)(struct rte_eventdev *dev);
186 
193 typedef void (*eventdev_stop_t)(struct rte_eventdev *dev);
194 
205 typedef int (*eventdev_close_t)(struct rte_eventdev *dev);
206 
218 typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev,
219  uint8_t queue_id, struct rte_event_queue_conf *queue_conf);
220 
234 typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
235  uint8_t queue_id,
236  const struct rte_event_queue_conf *queue_conf);
237 
247 typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
248  uint8_t queue_id);
249 
261 typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev,
262  uint8_t port_id, struct rte_event_port_conf *port_conf);
263 
277 typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev,
278  uint8_t port_id,
279  const struct rte_event_port_conf *port_conf);
280 
288 typedef void (*eventdev_port_release_t)(void *port);
289 
310 typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
311  const uint8_t queues[], const uint8_t priorities[],
312  uint16_t nb_links);
313 
330 typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
331  uint8_t queues[], uint16_t nb_unlinks);
332 
347 typedef int (*eventdev_port_unlinks_in_progress_t)(struct rte_eventdev *dev,
348  void *port);
349 
364 typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
365  uint64_t ns, uint64_t *timeout_ticks);
366 
376 typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
377 
396 typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
397  enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
398  const unsigned int ids[], uint64_t values[], unsigned int n);
399 
403 typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
404  enum rte_event_dev_xstats_mode mode,
405  int16_t queue_port_id,
406  const uint32_t ids[],
407  uint32_t nb_ids);
408 
430 typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
431  enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
432  struct rte_event_dev_xstats_name *xstats_names,
433  unsigned int *ids, unsigned int size);
434 
450 typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
451  const char *name, unsigned int *id);
452 
453 
474  (const struct rte_eventdev *dev,
475  const struct rte_eth_dev *eth_dev,
476  uint32_t *caps);
477 
479 
506  const struct rte_eventdev *dev,
507  uint64_t flags,
508  uint32_t *caps,
509  const struct rte_event_timer_adapter_ops **ops);
510 
534  const struct rte_eventdev *dev,
535  const struct rte_eth_dev *eth_dev,
536  int32_t rx_queue_id,
537  const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
538 
559  (const struct rte_eventdev *dev,
560  const struct rte_eth_dev *eth_dev,
561  int32_t rx_queue_id);
562 
580  (const struct rte_eventdev *dev,
581  const struct rte_eth_dev *eth_dev);
582 
600  (const struct rte_eventdev *dev,
601  const struct rte_eth_dev *eth_dev);
602 
604 
622  (const struct rte_eventdev *dev,
623  const struct rte_eth_dev *eth_dev,
624  struct rte_event_eth_rx_adapter_stats *stats);
638  (const struct rte_eventdev *dev,
639  const struct rte_eth_dev *eth_dev);
646 typedef int (*eventdev_selftest)(void);
647 
648 typedef uint32_t rte_event_pmd_selftest_seqn_t;
649 extern int rte_event_pmd_selftest_seqn_dynfield_offset;
650 
657 __rte_internal
658 static inline rte_event_pmd_selftest_seqn_t *
660 {
661  return RTE_MBUF_DYNFIELD(mbuf,
662  rte_event_pmd_selftest_seqn_dynfield_offset,
663  rte_event_pmd_selftest_seqn_t *);
664 }
665 
666 struct rte_cryptodev;
667 
691  (const struct rte_eventdev *dev,
692  const struct rte_cryptodev *cdev,
693  uint32_t *caps);
694 
722  (const struct rte_eventdev *dev,
723  const struct rte_cryptodev *cdev,
724  int32_t queue_pair_id,
725  const struct rte_event *event);
726 
727 
750  (const struct rte_eventdev *dev,
751  const struct rte_cryptodev *cdev,
752  int32_t queue_pair_id);
753 
771  (const struct rte_eventdev *dev,
772  const struct rte_cryptodev *cdev);
773 
791  (const struct rte_eventdev *dev,
792  const struct rte_cryptodev *cdev);
793 
795 
813  (const struct rte_eventdev *dev,
814  const struct rte_cryptodev *cdev,
815  struct rte_event_crypto_adapter_stats *stats);
816 
831  (const struct rte_eventdev *dev,
832  const struct rte_cryptodev *cdev);
833 
852  (const struct rte_eventdev *dev,
853  const struct rte_eth_dev *eth_dev,
854  uint32_t *caps);
855 
869 typedef int (*eventdev_eth_tx_adapter_create_t)(uint8_t id,
870  const struct rte_eventdev *dev);
871 
885 typedef int (*eventdev_eth_tx_adapter_free_t)(uint8_t id,
886  const struct rte_eventdev *dev);
887 
910  uint8_t id,
911  const struct rte_eventdev *dev,
912  const struct rte_eth_dev *eth_dev,
913  int32_t tx_queue_id);
914 
938  uint8_t id,
939  const struct rte_eventdev *dev,
940  const struct rte_eth_dev *eth_dev,
941  int32_t tx_queue_id);
942 
956 typedef int (*eventdev_eth_tx_adapter_start_t)(uint8_t id,
957  const struct rte_eventdev *dev);
958 
972 typedef int (*eventdev_eth_tx_adapter_stop_t)(uint8_t id,
973  const struct rte_eventdev *dev);
974 
976 
994  uint8_t id,
995  const struct rte_eventdev *dev,
996  struct rte_event_eth_tx_adapter_stats *stats);
997 
1011 typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id,
1012  const struct rte_eventdev *dev);
1013 
1044  eventdev_dump_t dump;
1045  /* Dump internal information */
1046 
1114 };
1115 
1127 struct rte_eventdev *
1128 rte_event_pmd_allocate(const char *name, int socket_id);
1129 
1138 int
1139 rte_event_pmd_release(struct rte_eventdev *eventdev);
1140 
1141 #ifdef __cplusplus
1142 }
1143 #endif
1144 
1145 #endif /* _RTE_EVENTDEV_PMD_H_ */
rte_event_dev_xstats_mode
void(* eventdev_stop_flush_t)(uint8_t dev_id, struct rte_event event, void *arg)
Definition: rte_eventdev.h:868
void(* eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev, uint8_t queue_id, struct rte_event_queue_conf *queue_conf)
int(* eventdev_eth_rx_adapter_queue_add_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, int32_t rx_queue_id, const struct rte_event_eth_rx_adapter_queue_conf *queue_conf)
int(* eventdev_eth_tx_adapter_create_t)(uint8_t id, const struct rte_eventdev *dev)
int(* eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port, uint8_t queues[], uint16_t nb_unlinks)
int(* eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev, uint64_t ns, uint64_t *timeout_ticks)
int(* eventdev_start_t)(struct rte_eventdev *dev)
int(* eventdev_xstats_reset_t)(struct rte_eventdev *dev, enum rte_event_dev_xstats_mode mode, int16_t queue_port_id, const uint32_t ids[], uint32_t nb_ids)
int(* eventdev_eth_tx_adapter_free_t)(uint8_t id, const struct rte_eventdev *dev)
int(* eventdev_eth_rx_adapter_start_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev)
struct rte_eventdev * rte_event_pmd_allocate(const char *name, int socket_id)
int(* eventdev_eth_tx_adapter_queue_add_t)(uint8_t id, const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, int32_t tx_queue_id)
int(* eventdev_crypto_adapter_queue_pair_add_t)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev, int32_t queue_pair_id, const struct rte_event *event)
void(* eventdev_dump_t)(struct rte_eventdev *dev, FILE *f)
int(* eventdev_eth_tx_adapter_start_t)(uint8_t id, const struct rte_eventdev *dev)
int rte_event_pmd_release(struct rte_eventdev *eventdev)
int(* eventdev_eth_rx_adapter_stop_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev)
int(* eventdev_crypto_adapter_caps_get_t)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev, uint32_t *caps)
int(* eventdev_selftest)(void)
int(* eventdev_eth_tx_adapter_stop_t)(uint8_t id, const struct rte_eventdev *dev)
int(* eventdev_queue_setup_t)(struct rte_eventdev *dev, uint8_t queue_id, const struct rte_event_queue_conf *queue_conf)
void(* eventdev_info_get_t)(struct rte_eventdev *dev, struct rte_event_dev_info *dev_info)
int(* eventdev_port_unlinks_in_progress_t)(struct rte_eventdev *dev, void *port)
void(* eventdev_port_release_t)(void *port)
int(* eventdev_eth_rx_adapter_stats_get)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, struct rte_event_eth_rx_adapter_stats *stats)
int(* eventdev_timer_adapter_caps_get_t)(const struct rte_eventdev *dev, uint64_t flags, uint32_t *caps, const struct rte_event_timer_adapter_ops **ops)
int(* eventdev_xstats_get_t)(const struct rte_eventdev *dev, enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id, const unsigned int ids[], uint64_t values[], unsigned int n)
void(* eventdev_stop_t)(struct rte_eventdev *dev)
int(* eventdev_eth_tx_adapter_queue_del_t)(uint8_t id, const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, int32_t tx_queue_id)
int(* eventdev_eth_tx_adapter_stats_get_t)(uint8_t id, const struct rte_eventdev *dev, struct rte_event_eth_tx_adapter_stats *stats)
int(* eventdev_port_setup_t)(struct rte_eventdev *dev, uint8_t port_id, const struct rte_event_port_conf *port_conf)
int(* eventdev_xstats_get_names_t)(const struct rte_eventdev *dev, enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id, struct rte_event_dev_xstats_name *xstats_names, unsigned int *ids, unsigned int size)
int(* eventdev_crypto_adapter_stats_get)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev, struct rte_event_crypto_adapter_stats *stats)
int(* eventdev_crypto_adapter_stats_reset)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev)
static __rte_internal rte_event_pmd_selftest_seqn_t * rte_event_pmd_selftest_seqn(struct rte_mbuf *mbuf)
int(* eventdev_crypto_adapter_stop_t)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev)
int(* eventdev_eth_tx_adapter_caps_get_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, uint32_t *caps)
void(* eventdev_queue_release_t)(struct rte_eventdev *dev, uint8_t queue_id)
int(* eventdev_close_t)(struct rte_eventdev *dev)
int(* eventdev_configure_t)(const struct rte_eventdev *dev)
static struct rte_eventdev * rte_event_pmd_get_named_dev(const char *name)
int(* eventdev_crypto_adapter_queue_pair_del_t)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev, int32_t queue_pair_id)
int(* eventdev_eth_rx_adapter_queue_del_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, int32_t rx_queue_id)
int(* eventdev_eth_rx_adapter_stats_reset)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev)
int(* eventdev_crypto_adapter_start_t)(const struct rte_eventdev *dev, const struct rte_cryptodev *cdev)
int(* eventdev_port_link_t)(struct rte_eventdev *dev, void *port, const uint8_t queues[], const uint8_t priorities[], uint16_t nb_links)
int(* eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id, const struct rte_eventdev *dev)
uint64_t(* eventdev_xstats_get_by_name)(const struct rte_eventdev *dev, const char *name, unsigned int *id)
static unsigned rte_event_pmd_is_valid_dev(uint8_t dev_id)
void(* eventdev_port_default_conf_get_t)(struct rte_eventdev *dev, uint8_t port_id, struct rte_event_port_conf *port_conf)
int(* eventdev_eth_rx_adapter_caps_get_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, uint32_t *caps)
#define RTE_MBUF_DYNFIELD(m, offset, type)
Definition: rte_mbuf_dyn.h:235
eventdev_queue_default_conf_get_t queue_def_conf
eventdev_timer_adapter_caps_get_t timer_adapter_caps_get
eventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset
eventdev_xstats_reset_t xstats_reset
eventdev_stop_t dev_stop
eventdev_eth_rx_adapter_caps_get_t eth_rx_adapter_caps_get
eventdev_eth_tx_adapter_stop_t eth_tx_adapter_stop
eventdev_start_t dev_start
eventdev_stop_flush_t dev_stop_flush
eventdev_eth_rx_adapter_start_t eth_rx_adapter_start
eventdev_eth_rx_adapter_stats_reset eth_rx_adapter_stats_reset
eventdev_queue_setup_t queue_setup
eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del
eventdev_eth_tx_adapter_caps_get_t eth_tx_adapter_caps_get
eventdev_eth_tx_adapter_free_t eth_tx_adapter_free
eventdev_crypto_adapter_stop_t crypto_adapter_stop
eventdev_port_link_t port_link
eventdev_eth_tx_adapter_queue_add_t eth_tx_adapter_queue_add
eventdev_dequeue_timeout_ticks_t timeout_ticks
eventdev_crypto_adapter_start_t crypto_adapter_start
eventdev_eth_rx_adapter_stats_get eth_rx_adapter_stats_get
eventdev_queue_release_t queue_release
eventdev_crypto_adapter_queue_pair_add_t crypto_adapter_queue_pair_add
eventdev_selftest dev_selftest
eventdev_port_default_conf_get_t port_def_conf
eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset
eventdev_eth_tx_adapter_stats_get_t eth_tx_adapter_stats_get
eventdev_port_unlinks_in_progress_t port_unlinks_in_progress
eventdev_crypto_adapter_queue_pair_del_t crypto_adapter_queue_pair_del
eventdev_port_release_t port_release
eventdev_close_t dev_close
eventdev_configure_t dev_configure
eventdev_info_get_t dev_infos_get
eventdev_xstats_get_t xstats_get
eventdev_port_unlink_t port_unlink
eventdev_port_setup_t port_setup
eventdev_xstats_get_names_t xstats_get_names
eventdev_xstats_get_by_name xstats_get_by_name
eventdev_crypto_adapter_stats_get crypto_adapter_stats_get
eventdev_crypto_adapter_caps_get_t crypto_adapter_caps_get
eventdev_eth_tx_adapter_create_t eth_tx_adapter_create
eventdev_eth_rx_adapter_queue_add_t eth_rx_adapter_queue_add
eventdev_eth_tx_adapter_queue_del_t eth_tx_adapter_queue_del
eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop
eventdev_eth_tx_adapter_start_t eth_tx_adapter_start