DPDK  17.11.0
rte_eventdev_pmd.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright(c) 2016 Cavium, Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  * * Neither the name of Cavium, Inc nor the names of its
16  * contributors may be used to endorse or promote products derived
17  * from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef _RTE_EVENTDEV_PMD_H_
33 #define _RTE_EVENTDEV_PMD_H_
34 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 #include <string.h>
48 
49 #include <rte_common.h>
50 #include <rte_dev.h>
51 #include <rte_log.h>
52 #include <rte_malloc.h>
53 
54 #include "rte_eventdev.h"
55 
56 /* Logging Macros */
57 #define RTE_EDEV_LOG_ERR(...) \
58  RTE_LOG(ERR, EVENTDEV, \
59  RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
60  __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
61 
62 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
63 #define RTE_EDEV_LOG_DEBUG(...) \
64  RTE_LOG(DEBUG, EVENTDEV, \
65  RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
66  __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
67 #else
68 #define RTE_EDEV_LOG_DEBUG(...) (void)0
69 #endif
70 
71 /* Macros to check for valid device */
72 #define RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, retval) do { \
73  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
74  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
75  return retval; \
76  } \
77 } while (0)
78 
79 #define RTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id) do { \
80  if (!rte_event_pmd_is_valid_dev((dev_id))) { \
81  RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
82  return; \
83  } \
84 } while (0)
85 
86 #define RTE_EVENT_ETH_RX_ADAPTER_SW_CAP \
87  ((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) | \
88  (RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ))
89 
94 #define RTE_EVENTDEV_DETACHED (0)
95 #define RTE_EVENTDEV_ATTACHED (1)
96 
97 struct rte_eth_dev;
98 
101  uint8_t nb_devs;
102 };
103 
104 extern struct rte_eventdev_global *rte_eventdev_globals;
106 extern struct rte_eventdev *rte_eventdevs;
118 static inline struct rte_eventdev *
120 {
121  struct rte_eventdev *dev;
122  unsigned int i;
123 
124  if (name == NULL)
125  return NULL;
126 
127  for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
128  dev = &rte_eventdevs[i];
129  if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
130  (strcmp(dev->data->name, name) == 0))
131  return dev;
132  }
133 
134  return NULL;
135 }
136 
146 static inline unsigned
148 {
149  struct rte_eventdev *dev;
150 
151  if (dev_id >= RTE_EVENT_MAX_DEVS)
152  return 0;
153 
154  dev = &rte_eventdevs[dev_id];
155  if (dev->attached != RTE_EVENTDEV_ATTACHED)
156  return 0;
157  else
158  return 1;
159 }
160 
178 typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev,
179  struct rte_event_dev_info *dev_info);
180 
190 typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev);
191 
201 typedef int (*eventdev_start_t)(struct rte_eventdev *dev);
202 
209 typedef void (*eventdev_stop_t)(struct rte_eventdev *dev);
210 
221 typedef int (*eventdev_close_t)(struct rte_eventdev *dev);
222 
234 typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev,
235  uint8_t queue_id, struct rte_event_queue_conf *queue_conf);
236 
250 typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
251  uint8_t queue_id,
252  const struct rte_event_queue_conf *queue_conf);
253 
263 typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
264  uint8_t queue_id);
265 
277 typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev,
278  uint8_t port_id, struct rte_event_port_conf *port_conf);
279 
293 typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev,
294  uint8_t port_id,
295  const struct rte_event_port_conf *port_conf);
296 
304 typedef void (*eventdev_port_release_t)(void *port);
305 
326 typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
327  const uint8_t queues[], const uint8_t priorities[],
328  uint16_t nb_links);
329 
346 typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
347  uint8_t queues[], uint16_t nb_unlinks);
348 
363 typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
364  uint64_t ns, uint64_t *timeout_ticks);
365 
375 typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
376 
391 typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
392  enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
393  const unsigned int ids[], uint64_t values[], unsigned int n);
394 
398 typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
399  enum rte_event_dev_xstats_mode mode,
400  int16_t queue_port_id,
401  const uint32_t ids[],
402  uint32_t nb_ids);
403 
419 typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
420  enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
421  struct rte_event_dev_xstats_name *xstats_names,
422  unsigned int *ids, unsigned int size);
423 
439 typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
440  const char *name, unsigned int *id);
441 
442 
463  (const struct rte_eventdev *dev,
464  const struct rte_eth_dev *eth_dev,
465  uint32_t *caps);
466 
467 struct rte_event_eth_rx_adapter_queue_conf *queue_conf;
468 
492  const struct rte_eventdev *dev,
493  const struct rte_eth_dev *eth_dev,
494  int32_t rx_queue_id,
495  const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
496 
517  (const struct rte_eventdev *dev,
518  const struct rte_eth_dev *eth_dev,
519  int32_t rx_queue_id);
520 
537 typedef int (*eventdev_eth_rx_adapter_start_t)
538  (const struct rte_eventdev *dev,
539  const struct rte_eth_dev *eth_dev);
540 
557 typedef int (*eventdev_eth_rx_adapter_stop_t)
558  (const struct rte_eventdev *dev,
559  const struct rte_eth_dev *eth_dev);
560 
561 struct rte_event_eth_rx_adapter_stats *stats;
562 
580  (const struct rte_eventdev *dev,
581  const struct rte_eth_dev *eth_dev,
582  struct rte_event_eth_rx_adapter_stats *stats);
596  (const struct rte_eventdev *dev,
597  const struct rte_eth_dev *eth_dev);
598 
627  eventdev_dump_t dump;
628  /* Dump internal information */
629 
653 };
654 
666 struct rte_eventdev *
667 rte_event_pmd_allocate(const char *name, int socket_id);
668 
677 int
678 rte_event_pmd_release(struct rte_eventdev *eventdev);
679 
680 #ifdef __cplusplus
681 }
682 #endif
683 
684 #endif /* _RTE_EVENTDEV_PMD_H_ */
uint64_t(* eventdev_xstats_get_by_name)(const struct rte_eventdev *dev, const char *name, unsigned int *id)
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)
eventdev_stop_t dev_stop
int(* eventdev_port_link_t)(struct rte_eventdev *dev, void *port, const uint8_t queues[], const uint8_t priorities[], uint16_t nb_links)
eventdev_port_release_t port_release
struct rte_eventdev * rte_eventdevs
int(* eventdev_port_setup_t)(struct rte_eventdev *dev, uint8_t port_id, const struct rte_event_port_conf *port_conf)
eventdev_eth_rx_adapter_stats_reset eth_rx_adapter_stats_reset
eventdev_port_default_conf_get_t port_def_conf
eventdev_configure_t dev_configure
void(* eventdev_port_default_conf_get_t)(struct rte_eventdev *dev, uint8_t port_id, struct rte_event_port_conf *port_conf)
eventdev_eth_rx_adapter_caps_get_t eth_rx_adapter_caps_get
eventdev_queue_release_t queue_release
void(* eventdev_port_release_t)(void *port)
eventdev_eth_rx_adapter_start_t eth_rx_adapter_start
eventdev_port_link_t port_link
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)
eventdev_info_get_t dev_infos_get
eventdev_port_setup_t port_setup
int(* eventdev_eth_rx_adapter_stop_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev)
static unsigned rte_event_pmd_is_valid_dev(uint8_t dev_id)
eventdev_eth_rx_adapter_queue_add_t eth_rx_adapter_queue_add
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_rx_adapter_start_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev)
eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del
eventdev_queue_setup_t queue_setup
eventdev_xstats_get_by_name xstats_get_by_name
eventdev_queue_default_conf_get_t queue_def_conf
eventdev_eth_rx_adapter_stats_get eth_rx_adapter_stats_get
void(* eventdev_info_get_t)(struct rte_eventdev *dev, struct rte_event_dev_info *dev_info)
eventdev_port_unlink_t port_unlink
void(* eventdev_stop_t)(struct rte_eventdev *dev)
int(* eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev, uint64_t ns, uint64_t *timeout_ticks)
int rte_event_pmd_release(struct rte_eventdev *eventdev)
rte_event_dev_xstats_mode
int(* eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port, uint8_t queues[], uint16_t nb_unlinks)
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)
struct rte_eventdev * rte_event_pmd_allocate(const char *name, int socket_id)
int(* eventdev_queue_setup_t)(struct rte_eventdev *dev, uint8_t queue_id, const struct rte_event_queue_conf *queue_conf)
static struct rte_eventdev * rte_event_pmd_get_named_dev(const char *name)
int(* eventdev_eth_rx_adapter_stats_reset)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev)
eventdev_start_t dev_start
eventdev_dequeue_timeout_ticks_t timeout_ticks
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)
eventdev_xstats_reset_t xstats_reset
void(* eventdev_dump_t)(struct rte_eventdev *dev, FILE *f)
int(* eventdev_configure_t)(const struct rte_eventdev *dev)
int(* eventdev_close_t)(struct rte_eventdev *dev)
eventdev_xstats_get_names_t xstats_get_names
void(* eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev, uint8_t queue_id, struct rte_event_queue_conf *queue_conf)
eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop
eventdev_close_t dev_close
eventdev_xstats_get_t xstats_get
int(* eventdev_eth_rx_adapter_caps_get_t)(const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, uint32_t *caps)
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)
int(* eventdev_start_t)(struct rte_eventdev *dev)
void(* eventdev_queue_release_t)(struct rte_eventdev *dev, uint8_t queue_id)