DPDK  18.02.2
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_config.h>
24 #include <rte_dev.h>
25 #include <rte_log.h>
26 #include <rte_malloc.h>
27 
28 #include "rte_eventdev.h"
29 
30 /* Logging Macros */
31 #define RTE_EDEV_LOG_ERR(...) \
32  RTE_LOG(ERR, EVENTDEV, \
33  RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
34  __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
35 
36 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
37 #define RTE_EDEV_LOG_DEBUG(...) \
38  RTE_LOG(DEBUG, EVENTDEV, \
39  RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
40  __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
41 #else
42 #define RTE_EDEV_LOG_DEBUG(...) (void)0
43 #endif
44 
45 /* Macros to check for valid device */
46 #define RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, retval) do { \
47  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
48  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
49  return retval; \
50  } \
51 } while (0)
52 
53 #define RTE_EVENTDEV_VALID_DEVID_OR_ERRNO_RET(dev_id, errno, retval) do { \
54  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
55  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
56  rte_errno = errno; \
57  return retval; \
58  } \
59 } while (0)
60 
61 #define RTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id) do { \
62  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
63  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
64  return; \
65  } \
66 } while (0)
67 
68 #define RTE_EVENT_ETH_RX_ADAPTER_SW_CAP \
69  ((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) | \
70  (RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ))
71 
76 #define RTE_EVENTDEV_DETACHED (0)
77 #define RTE_EVENTDEV_ATTACHED (1)
78 
79 struct rte_eth_dev;
80 
83  uint8_t nb_devs;
84 };
85 
86 extern struct rte_eventdev_global *rte_eventdev_globals;
88 extern struct rte_eventdev *rte_eventdevs;
100 static inline struct rte_eventdev *
102 {
103  struct rte_eventdev *dev;
104  unsigned int i;
105 
106  if (name == NULL)
107  return NULL;
108 
109  for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
110  dev = &rte_eventdevs[i];
111  if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
112  (strcmp(dev->data->name, name) == 0))
113  return dev;
114  }
115 
116  return NULL;
117 }
118 
128 static inline unsigned
130 {
131  struct rte_eventdev *dev;
132 
133  if (dev_id >= RTE_EVENT_MAX_DEVS)
134  return 0;
135 
136  dev = &rte_eventdevs[dev_id];
137  if (dev->attached != RTE_EVENTDEV_ATTACHED)
138  return 0;
139  else
140  return 1;
141 }
142 
160 typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev,
161  struct rte_event_dev_info *dev_info);
162 
172 typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev);
173 
183 typedef int (*eventdev_start_t)(struct rte_eventdev *dev);
184 
191 typedef void (*eventdev_stop_t)(struct rte_eventdev *dev);
192 
203 typedef int (*eventdev_close_t)(struct rte_eventdev *dev);
204 
216 typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev,
217  uint8_t queue_id, struct rte_event_queue_conf *queue_conf);
218 
232 typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
233  uint8_t queue_id,
234  const struct rte_event_queue_conf *queue_conf);
235 
245 typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
246  uint8_t queue_id);
247 
259 typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev,
260  uint8_t port_id, struct rte_event_port_conf *port_conf);
261 
275 typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev,
276  uint8_t port_id,
277  const struct rte_event_port_conf *port_conf);
278 
286 typedef void (*eventdev_port_release_t)(void *port);
287 
308 typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
309  const uint8_t queues[], const uint8_t priorities[],
310  uint16_t nb_links);
311 
328 typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
329  uint8_t queues[], uint16_t nb_unlinks);
330 
345 typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
346  uint64_t ns, uint64_t *timeout_ticks);
347 
357 typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
358 
373 typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
374  enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
375  const unsigned int ids[], uint64_t values[], unsigned int n);
376 
380 typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
381  enum rte_event_dev_xstats_mode mode,
382  int16_t queue_port_id,
383  const uint32_t ids[],
384  uint32_t nb_ids);
385 
401 typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
402  enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
403  struct rte_event_dev_xstats_name *xstats_names,
404  unsigned int *ids, unsigned int size);
405 
421 typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
422  const char *name, unsigned int *id);
423 
424 
445  (const struct rte_eventdev *dev,
446  const struct rte_eth_dev *eth_dev,
447  uint32_t *caps);
448 
449 struct rte_event_eth_rx_adapter_queue_conf *queue_conf;
450 
474  const struct rte_eventdev *dev,
475  const struct rte_eth_dev *eth_dev,
476  int32_t rx_queue_id,
477  const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
478 
499  (const struct rte_eventdev *dev,
500  const struct rte_eth_dev *eth_dev,
501  int32_t rx_queue_id);
502 
519 typedef int (*eventdev_eth_rx_adapter_start_t)
520  (const struct rte_eventdev *dev,
521  const struct rte_eth_dev *eth_dev);
522 
539 typedef int (*eventdev_eth_rx_adapter_stop_t)
540  (const struct rte_eventdev *dev,
541  const struct rte_eth_dev *eth_dev);
542 
543 struct rte_event_eth_rx_adapter_stats *stats;
544 
562  (const struct rte_eventdev *dev,
563  const struct rte_eth_dev *eth_dev,
564  struct rte_event_eth_rx_adapter_stats *stats);
578  (const struct rte_eventdev *dev,
579  const struct rte_eth_dev *eth_dev);
586 typedef int (*eventdev_selftest)(void);
587 
616  eventdev_dump_t dump;
617  /* Dump internal information */
618 
645 };
646 
658 struct rte_eventdev *
659 rte_event_pmd_allocate(const char *name, int socket_id);
660 
669 int
670 rte_event_pmd_release(struct rte_eventdev *eventdev);
671 
672 #ifdef __cplusplus
673 }
674 #endif
675 
676 #endif /* _RTE_EVENTDEV_PMD_H_ */