1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2016-2018 Intel Corporation.
3 * Copyright(C) 2021 Marvell.
8 #ifndef _RTE_EVENTDEV_CORE_H_
9 #define _RTE_EVENTDEV_CORE_H_
15 typedef uint16_t (*event_enqueue_t)(void *port, const struct rte_event *ev);
16 /**< @internal Enqueue event on port of a device */
18 typedef uint16_t (*event_enqueue_burst_t)(void *port,
19 const struct rte_event ev[],
21 /**< @internal Enqueue burst of events on port of a device */
23 typedef uint16_t (*event_dequeue_t)(void *port, struct rte_event *ev,
24 uint64_t timeout_ticks);
25 /**< @internal Dequeue event from port of a device */
27 typedef uint16_t (*event_dequeue_burst_t)(void *port, struct rte_event ev[],
29 uint64_t timeout_ticks);
30 /**< @internal Dequeue burst of events from port of a device */
32 typedef uint16_t (*event_tx_adapter_enqueue_t)(void *port,
33 struct rte_event ev[],
35 /**< @internal Enqueue burst of events on port of a device */
37 typedef uint16_t (*event_crypto_adapter_enqueue_t)(void *port,
38 struct rte_event ev[],
40 /**< @internal Enqueue burst of events on crypto adapter */
42 struct rte_event_fp_ops {
44 /**< points to array of internal port data pointers */
45 event_enqueue_t enqueue;
46 /**< PMD enqueue function. */
47 event_enqueue_burst_t enqueue_burst;
48 /**< PMD enqueue burst function. */
49 event_enqueue_burst_t enqueue_new_burst;
50 /**< PMD enqueue burst new function. */
51 event_enqueue_burst_t enqueue_forward_burst;
52 /**< PMD enqueue burst fwd function. */
53 event_dequeue_t dequeue;
54 /**< PMD dequeue function. */
55 event_dequeue_burst_t dequeue_burst;
56 /**< PMD dequeue burst function. */
57 event_tx_adapter_enqueue_t txa_enqueue;
58 /**< PMD Tx adapter enqueue function. */
59 event_tx_adapter_enqueue_t txa_enqueue_same_dest;
60 /**< PMD Tx adapter enqueue same destination function. */
61 event_crypto_adapter_enqueue_t ca_enqueue;
62 /**< PMD Crypto adapter enqueue function. */
63 uintptr_t reserved[6];
64 } __rte_cache_aligned;
66 extern struct rte_event_fp_ops rte_event_fp_ops[RTE_EVENT_MAX_DEVS];
68 #define RTE_EVENTDEV_NAME_MAX_LEN (64)
69 /**< @internal Max length of name of event PMD */
73 * The data part, with no function pointers, associated with each device.
75 * This structure is safe to place in shared memory to be common among
76 * different processes in a multi-process configuration.
78 struct rte_eventdev_data {
80 /**< Socket ID where memory is allocated */
82 /**< Device ID for this instance */
84 /**< Number of event queues. */
86 /**< Number of event ports. */
87 void *ports[RTE_EVENT_MAX_PORTS_PER_DEV];
88 /**< Array of pointers to ports. */
89 struct rte_event_port_conf ports_cfg[RTE_EVENT_MAX_PORTS_PER_DEV];
90 /**< Array of port configuration structures. */
91 struct rte_event_queue_conf queues_cfg[RTE_EVENT_MAX_QUEUES_PER_DEV];
92 /**< Array of queue configuration structures. */
93 uint16_t links_map[RTE_EVENT_MAX_PORTS_PER_DEV *
94 RTE_EVENT_MAX_QUEUES_PER_DEV];
95 /**< Memory to store queues to port connections. */
97 /**< PMD-specific private data */
98 uint32_t event_dev_cap;
99 /**< Event device capabilities(RTE_EVENT_DEV_CAP_)*/
100 struct rte_event_dev_config dev_conf;
101 /**< Configuration applied to device. */
102 uint8_t service_inited;
103 /* Service initialization state */
106 void *dev_stop_flush_arg;
107 /**< User-provided argument for event flush function */
110 uint8_t dev_started : 1;
111 /**< Device state: STARTED(1)/STOPPED(0) */
113 char name[RTE_EVENTDEV_NAME_MAX_LEN];
114 /**< Unique identifier name */
116 uint64_t reserved_64s[4]; /**< Reserved for future fields */
117 void *reserved_ptrs[4]; /**< Reserved for future fields */
118 } __rte_cache_aligned;
120 /** @internal The data structure associated with each event device. */
121 struct rte_eventdev {
122 event_enqueue_t enqueue;
123 /**< Pointer to PMD enqueue function. */
124 event_enqueue_burst_t enqueue_burst;
125 /**< Pointer to PMD enqueue burst function. */
126 event_enqueue_burst_t enqueue_new_burst;
127 /**< Pointer to PMD enqueue burst function(op new variant) */
128 event_enqueue_burst_t enqueue_forward_burst;
129 /**< Pointer to PMD enqueue burst function(op forward variant) */
130 event_dequeue_t dequeue;
131 /**< Pointer to PMD dequeue function. */
132 event_dequeue_burst_t dequeue_burst;
133 /**< Pointer to PMD dequeue burst function. */
134 event_tx_adapter_enqueue_t txa_enqueue_same_dest;
135 /**< Pointer to PMD eth Tx adapter burst enqueue function with
136 * events destined to same Eth port & Tx queue.
138 event_tx_adapter_enqueue_t txa_enqueue;
139 /**< Pointer to PMD eth Tx adapter enqueue function. */
140 struct rte_eventdev_data *data;
141 /**< Pointer to device data */
142 struct eventdev_ops *dev_ops;
143 /**< Functions exported by PMD */
144 struct rte_device *dev;
145 /**< Device info. supplied by probing */
148 uint8_t attached : 1;
149 /**< Flag indicating the device is attached */
151 event_crypto_adapter_enqueue_t ca_enqueue;
152 /**< Pointer to PMD crypto adapter enqueue function. */
154 uint64_t reserved_64s[4]; /**< Reserved for future fields */
155 void *reserved_ptrs[3]; /**< Reserved for future fields */
156 } __rte_cache_aligned;
158 extern struct rte_eventdev *rte_eventdevs;
159 /** @internal The pool of rte_eventdev structures. */
165 #endif /*_RTE_EVENTDEV_CORE_H_*/