1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2016-2018 Intel Corporation. 3 * Copyright(C) 2021 Marvell. 4 * Copyright 2016 NXP 5 * All rights reserved. 6 */ 7 8 #ifndef _RTE_EVENTDEV_CORE_H_ 9 #define _RTE_EVENTDEV_CORE_H_ 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 typedef uint16_t (*event_enqueue_t)(void *port, const struct rte_event *ev); 16 /**< @internal Enqueue event on port of a device */ 17 18 typedef uint16_t (*event_enqueue_burst_t)(void *port, 19 const struct rte_event ev[], 20 uint16_t nb_events); 21 /**< @internal Enqueue burst of events on port of a device */ 22 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 */ 26 27 typedef uint16_t (*event_dequeue_burst_t)(void *port, struct rte_event ev[], 28 uint16_t nb_events, 29 uint64_t timeout_ticks); 30 /**< @internal Dequeue burst of events from port of a device */ 31 32 typedef uint16_t (*event_tx_adapter_enqueue_t)(void *port, 33 struct rte_event ev[], 34 uint16_t nb_events); 35 /**< @internal Enqueue burst of events on port of a device */ 36 37 typedef uint16_t (*event_crypto_adapter_enqueue_t)(void *port, 38 struct rte_event ev[], 39 uint16_t nb_events); 40 /**< @internal Enqueue burst of events on crypto adapter */ 41 42 #define RTE_EVENTDEV_NAME_MAX_LEN (64) 43 /**< @internal Max length of name of event PMD */ 44 45 /** 46 * @internal 47 * The data part, with no function pointers, associated with each device. 48 * 49 * This structure is safe to place in shared memory to be common among 50 * different processes in a multi-process configuration. 51 */ 52 struct rte_eventdev_data { 53 int socket_id; 54 /**< Socket ID where memory is allocated */ 55 uint8_t dev_id; 56 /**< Device ID for this instance */ 57 uint8_t nb_queues; 58 /**< Number of event queues. */ 59 uint8_t nb_ports; 60 /**< Number of event ports. */ 61 void **ports; 62 /**< Array of pointers to ports. */ 63 struct rte_event_port_conf *ports_cfg; 64 /**< Array of port configuration structures. */ 65 struct rte_event_queue_conf *queues_cfg; 66 /**< Array of queue configuration structures. */ 67 uint16_t *links_map; 68 /**< Memory to store queues to port connections. */ 69 void *dev_private; 70 /**< PMD-specific private data */ 71 uint32_t event_dev_cap; 72 /**< Event device capabilities(RTE_EVENT_DEV_CAP_)*/ 73 struct rte_event_dev_config dev_conf; 74 /**< Configuration applied to device. */ 75 uint8_t service_inited; 76 /* Service initialization state */ 77 uint32_t service_id; 78 /* Service ID*/ 79 void *dev_stop_flush_arg; 80 /**< User-provided argument for event flush function */ 81 82 RTE_STD_C11 83 uint8_t dev_started : 1; 84 /**< Device state: STARTED(1)/STOPPED(0) */ 85 86 char name[RTE_EVENTDEV_NAME_MAX_LEN]; 87 /**< Unique identifier name */ 88 89 uint64_t reserved_64s[4]; /**< Reserved for future fields */ 90 void *reserved_ptrs[4]; /**< Reserved for future fields */ 91 } __rte_cache_aligned; 92 93 /** @internal The data structure associated with each event device. */ 94 struct rte_eventdev { 95 event_enqueue_t enqueue; 96 /**< Pointer to PMD enqueue function. */ 97 event_enqueue_burst_t enqueue_burst; 98 /**< Pointer to PMD enqueue burst function. */ 99 event_enqueue_burst_t enqueue_new_burst; 100 /**< Pointer to PMD enqueue burst function(op new variant) */ 101 event_enqueue_burst_t enqueue_forward_burst; 102 /**< Pointer to PMD enqueue burst function(op forward variant) */ 103 event_dequeue_t dequeue; 104 /**< Pointer to PMD dequeue function. */ 105 event_dequeue_burst_t dequeue_burst; 106 /**< Pointer to PMD dequeue burst function. */ 107 event_tx_adapter_enqueue_t txa_enqueue_same_dest; 108 /**< Pointer to PMD eth Tx adapter burst enqueue function with 109 * events destined to same Eth port & Tx queue. 110 */ 111 event_tx_adapter_enqueue_t txa_enqueue; 112 /**< Pointer to PMD eth Tx adapter enqueue function. */ 113 struct rte_eventdev_data *data; 114 /**< Pointer to device data */ 115 struct eventdev_ops *dev_ops; 116 /**< Functions exported by PMD */ 117 struct rte_device *dev; 118 /**< Device info. supplied by probing */ 119 120 RTE_STD_C11 121 uint8_t attached : 1; 122 /**< Flag indicating the device is attached */ 123 124 event_crypto_adapter_enqueue_t ca_enqueue; 125 /**< Pointer to PMD crypto adapter enqueue function. */ 126 127 uint64_t reserved_64s[4]; /**< Reserved for future fields */ 128 void *reserved_ptrs[3]; /**< Reserved for future fields */ 129 } __rte_cache_aligned; 130 131 extern struct rte_eventdev *rte_eventdevs; 132 /** @internal The pool of rte_eventdev structures. */ 133 134 #ifdef __cplusplus 135 } 136 #endif 137 138 #endif /*_RTE_EVENTDEV_CORE_H_*/ 139