X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Feventdev%2Feventdev_pmd.h;h=69402668d82a89559b6ff14a33b5a478a3a7ba76;hb=c6db4a15749c497d162f035130887f3fd83b7892;hp=0f724ac85d77848f1e0bb343487d8f5ee642bcb2;hpb=99a2dd955fba6e4cc23b77d590a033650ced9c45;p=dpdk.git diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index 0f724ac85d..69402668d8 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -5,6 +5,10 @@ #ifndef _RTE_EVENTDEV_PMD_H_ #define _RTE_EVENTDEV_PMD_H_ +#ifdef __cplusplus +extern "C" { +#endif + /** @file * RTE Event PMD APIs * @@ -13,10 +17,6 @@ * them directly. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -28,8 +28,8 @@ extern "C" { #include #include +#include "event_timer_adapter_pmd.h" #include "rte_eventdev.h" -#include "rte_event_timer_adapter_pmd.h" /* Logging Macros */ #define RTE_EDEV_LOG_ERR(...) \ @@ -84,6 +84,9 @@ extern "C" { #define RTE_EVENTDEV_DETACHED (0) #define RTE_EVENTDEV_ATTACHED (1) +#define RTE_EVENTDEV_NAME_MAX_LEN (64) +/**< @internal Max length of name of event PMD */ + struct rte_eth_dev; /** Global structure used for maintaining state of allocated event devices */ @@ -91,8 +94,96 @@ struct rte_eventdev_global { uint8_t nb_devs; /**< Number of devices found */ }; +/** + * @internal + * The data part, with no function pointers, associated with each device. + * + * This structure is safe to place in shared memory to be common among + * different processes in a multi-process configuration. + */ +struct rte_eventdev_data { + int socket_id; + /**< Socket ID where memory is allocated */ + uint8_t dev_id; + /**< Device ID for this instance */ + uint8_t nb_queues; + /**< Number of event queues. */ + uint8_t nb_ports; + /**< Number of event ports. */ + void *ports[RTE_EVENT_MAX_PORTS_PER_DEV]; + /**< Array of pointers to ports. */ + struct rte_event_port_conf ports_cfg[RTE_EVENT_MAX_PORTS_PER_DEV]; + /**< Array of port configuration structures. */ + struct rte_event_queue_conf queues_cfg[RTE_EVENT_MAX_QUEUES_PER_DEV]; + /**< Array of queue configuration structures. */ + uint16_t links_map[RTE_EVENT_MAX_PORTS_PER_DEV * + RTE_EVENT_MAX_QUEUES_PER_DEV]; + /**< Memory to store queues to port connections. */ + void *dev_private; + /**< PMD-specific private data */ + uint32_t event_dev_cap; + /**< Event device capabilities(RTE_EVENT_DEV_CAP_)*/ + struct rte_event_dev_config dev_conf; + /**< Configuration applied to device. */ + uint8_t service_inited; + /* Service initialization state */ + uint32_t service_id; + /* Service ID*/ + void *dev_stop_flush_arg; + /**< User-provided argument for event flush function */ + + RTE_STD_C11 + uint8_t dev_started : 1; + /**< Device state: STARTED(1)/STOPPED(0) */ + + char name[RTE_EVENTDEV_NAME_MAX_LEN]; + /**< Unique identifier name */ + + uint64_t reserved_64s[4]; /**< Reserved for future fields */ + void *reserved_ptrs[4]; /**< Reserved for future fields */ +} __rte_cache_aligned; + +/** @internal The data structure associated with each event device. */ +struct rte_eventdev { + struct rte_eventdev_data *data; + /**< Pointer to device data */ + struct eventdev_ops *dev_ops; + /**< Functions exported by PMD */ + struct rte_device *dev; + /**< Device info. supplied by probing */ + + RTE_STD_C11 + uint8_t attached : 1; + /**< Flag indicating the device is attached */ + + event_enqueue_t enqueue; + /**< Pointer to PMD enqueue function. */ + event_enqueue_burst_t enqueue_burst; + /**< Pointer to PMD enqueue burst function. */ + event_enqueue_burst_t enqueue_new_burst; + /**< Pointer to PMD enqueue burst function(op new variant) */ + event_enqueue_burst_t enqueue_forward_burst; + /**< Pointer to PMD enqueue burst function(op forward variant) */ + event_dequeue_t dequeue; + /**< Pointer to PMD dequeue function. */ + event_dequeue_burst_t dequeue_burst; + /**< Pointer to PMD dequeue burst function. */ + event_maintain_t maintain; + /**< Pointer to PMD port maintenance function. */ + event_tx_adapter_enqueue_t txa_enqueue_same_dest; + /**< Pointer to PMD eth Tx adapter burst enqueue function with + * events destined to same Eth port & Tx queue. + */ + event_tx_adapter_enqueue_t txa_enqueue; + /**< Pointer to PMD eth Tx adapter enqueue function. */ + event_crypto_adapter_enqueue_t ca_enqueue; + + uint64_t reserved_64s[4]; /**< Reserved for future fields */ + void *reserved_ptrs[3]; /**< Reserved for future fields */ +} __rte_cache_aligned; + extern struct rte_eventdev *rte_eventdevs; -/** The pool of rte_eventdev structures. */ +/** @internal The pool of rte_eventdev structures. */ /** * Get the rte_eventdev structure device pointer for the named device. @@ -103,6 +194,7 @@ extern struct rte_eventdev *rte_eventdevs; * @return * - The rte_eventdev structure pointer for the given device ID. */ +__rte_internal static inline struct rte_eventdev * rte_event_pmd_get_named_dev(const char *name) { @@ -131,6 +223,7 @@ rte_event_pmd_get_named_dev(const char *name) * @return * - If the device index is valid (1) or not (0). */ +__rte_internal static inline unsigned rte_event_pmd_is_valid_dev(uint8_t dev_id) { @@ -148,7 +241,7 @@ rte_event_pmd_is_valid_dev(uint8_t dev_id) /** * Definitions of all functions exported by a driver through the - * the generic structure of type *event_dev_ops* supplied in the + * generic structure of type *event_dev_ops* supplied in the * *rte_eventdev* structure associated with a device. */ @@ -248,6 +341,46 @@ typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev, typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev, uint8_t queue_id); +/** + * Get an event queue attribute at runtime. + * + * @param dev + * Event device pointer + * @param queue_id + * Event queue index + * @param attr_id + * Event queue attribute id + * @param[out] attr_value + * Event queue attribute value + * + * @return + * - 0: Success. + * - <0: Error code on failure. + */ +typedef int (*eventdev_queue_attr_get_t)(struct rte_eventdev *dev, + uint8_t queue_id, uint32_t attr_id, + uint32_t *attr_value); + +/** + * Set an event queue attribute at runtime. + * + * @param dev + * Event device pointer + * @param queue_id + * Event queue index + * @param attr_id + * Event queue attribute id + * @param attr_value + * Event queue attribute value + * + * @return + * - 0: Success. + * - <0: Error code on failure. + */ +typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev, + uint8_t queue_id, uint32_t attr_id, + uint64_t attr_value); + /** * Retrieve the default event port configuration. * @@ -288,6 +421,23 @@ typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev, */ typedef void (*eventdev_port_release_t)(void *port); +/** + * Quiesce any core specific resources consumed by the event port + * + * @param dev + * Event device pointer. + * @param port + * Event port pointer. + * @param flush_cb + * User-provided event flush function. + * @param args + * Arguments to be passed to the user-provided event flush function. + * + */ +typedef void (*eventdev_port_quiesce_t)(struct rte_eventdev *dev, void *port, + rte_eventdev_port_flush_t flush_cb, + void *args); + /** * Link multiple source event queues to destination event port. * @@ -504,10 +654,8 @@ struct rte_event_eth_rx_adapter_queue_conf; * */ typedef 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); + const struct rte_eventdev *dev, uint64_t flags, uint32_t *caps, + const struct event_timer_adapter_ops **ops); /** * Add ethernet Rx queues to event device. This callback is invoked if @@ -561,6 +709,32 @@ typedef int (*eventdev_eth_rx_adapter_queue_del_t) const struct rte_eth_dev *eth_dev, int32_t rx_queue_id); +/** + * Retrieve Rx adapter queue config information for the specified + * rx queue ID. + * + * @param dev + * Event device pointer + * + * @param eth_dev + * Ethernet device pointer + * + * @param rx_queue_id + * Ethernet device receive queue index. + * + * @param[out] queue_conf + * Pointer to rte_event_eth_rx_adapter_queue_conf structure + * + * @return + * - 0: Success + * - <0: Error code on failure. + */ +typedef int (*eventdev_eth_rx_adapter_queue_conf_get_t) + (const struct rte_eventdev *dev, + const struct rte_eth_dev *eth_dev, + uint16_t rx_queue_id, + struct rte_event_eth_rx_adapter_queue_conf *queue_conf); + /** * Start ethernet Rx adapter. This callback is invoked if * the caps returned from eventdev_eth_rx_adapter_caps_get(.., eth_port_id) @@ -638,17 +812,35 @@ typedef int (*eventdev_eth_rx_adapter_stats_get) typedef int (*eventdev_eth_rx_adapter_stats_reset) (const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev); + +struct rte_event_eth_rx_adapter_queue_stats; + /** - * Start eventdev selftest. + * Retrieve ethernet Rx adapter queue statistics. + * + * @param dev + * Event device pointer + * + * @param eth_dev + * Ethernet device pointer + * + * @param rx_queue_id + * Ethernet device receive queue index. + * + * @param[out] q_stats + * Pointer to queue stats structure * * @return * Return 0 on success. */ -typedef int (*eventdev_selftest)(void); +typedef int (*eventdev_eth_rx_adapter_q_stats_get) + (const struct rte_eventdev *dev, + const struct rte_eth_dev *eth_dev, + uint16_t rx_queue_id, + struct rte_event_eth_rx_adapter_queue_stats *q_stats); -struct rte_event_eth_rx_adapter_vector_limits; /** - * Get event vector limits for a given event, ethernet device pair. + * Reset ethernet Rx adapter queue statistics. * * @param dev * Event device pointer @@ -656,21 +848,28 @@ struct rte_event_eth_rx_adapter_vector_limits; * @param eth_dev * Ethernet device pointer * - * @param[out] limits - * Pointer to the limits structure to be filled. + * @param rx_queue_id + * Ethernet device receive queue index. * * @return - * - 0: Success. - * - <0: Error code returned by the driver function. + * Return 0 on success. */ -typedef int (*eventdev_eth_rx_adapter_vector_limits_get_t)( - const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, - struct rte_event_eth_rx_adapter_vector_limits *limits); +typedef int (*eventdev_eth_rx_adapter_q_stats_reset) + (const struct rte_eventdev *dev, + const struct rte_eth_dev *eth_dev, + uint16_t rx_queue_id); + +/** + * Start eventdev selftest. + * + * @return + * Return 0 on success. + */ +typedef int (*eventdev_selftest)(void); -struct rte_event_eth_rx_adapter_event_vector_config; +struct rte_event_eth_rx_adapter_vector_limits; /** - * Enable event vector on an given Rx queue of a ethernet devices belonging to - * the Rx adapter. + * Get event vector limits for a given event, ethernet device pair. * * @param dev * Event device pointer @@ -678,20 +877,16 @@ struct rte_event_eth_rx_adapter_event_vector_config; * @param eth_dev * Ethernet device pointer * - * @param rx_queue_id - * The Rx queue identifier - * - * @param config - * Pointer to the event vector configuration structure. + * @param[out] limits + * Pointer to the limits structure to be filled. * * @return * - 0: Success. * - <0: Error code returned by the driver function. */ -typedef int (*eventdev_eth_rx_adapter_event_vector_config_t)( +typedef int (*eventdev_eth_rx_adapter_vector_limits_get_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_event_vector_config *config); + struct rte_event_eth_rx_adapter_vector_limits *limits); typedef uint32_t rte_event_pmd_selftest_seqn_t; extern int rte_event_pmd_selftest_seqn_dynfield_offset; @@ -1060,7 +1255,7 @@ typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id, const struct rte_eventdev *dev); /** Event device operations function pointer table */ -struct rte_eventdev_ops { +struct eventdev_ops { eventdev_info_get_t dev_infos_get; /**< Get device info. */ eventdev_configure_t dev_configure; /**< Configure device. */ eventdev_start_t dev_start; /**< Start device. */ @@ -1073,6 +1268,10 @@ struct rte_eventdev_ops { /**< Set up an event queue. */ eventdev_queue_release_t queue_release; /**< Release an event queue. */ + eventdev_queue_attr_get_t queue_attr_get; + /**< Get an event queue attribute. */ + eventdev_queue_attr_set_t queue_attr_set; + /**< Set an event queue attribute. */ eventdev_port_default_conf_get_t port_def_conf; /**< Get default port configuration. */ @@ -1080,6 +1279,8 @@ struct rte_eventdev_ops { /**< Set up an event port. */ eventdev_port_release_t port_release; /**< Release an event port. */ + eventdev_port_quiesce_t port_quiesce; + /**< Quiesce an event port. */ eventdev_port_link_t port_link; /**< Link event queues to an event port. */ @@ -1107,6 +1308,8 @@ struct rte_eventdev_ops { /**< Add Rx queues to ethernet Rx adapter */ eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del; /**< Delete Rx queues from ethernet Rx adapter */ + eventdev_eth_rx_adapter_queue_conf_get_t eth_rx_adapter_queue_conf_get; + /**< Get Rx adapter queue info */ eventdev_eth_rx_adapter_start_t eth_rx_adapter_start; /**< Start ethernet Rx adapter */ eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop; @@ -1118,9 +1321,6 @@ struct rte_eventdev_ops { eventdev_eth_rx_adapter_vector_limits_get_t eth_rx_adapter_vector_limits_get; /**< Get event vector limits for the Rx adapter */ - eventdev_eth_rx_adapter_event_vector_config_t - eth_rx_adapter_event_vector_config; - /**< Configure Rx adapter with event vector */ eventdev_timer_adapter_caps_get_t timer_adapter_caps_get; /**< Get timer adapter capabilities */ @@ -1140,6 +1340,11 @@ struct rte_eventdev_ops { eventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset; /**< Reset crypto stats */ + eventdev_eth_rx_adapter_q_stats_get eth_rx_adapter_queue_stats_get; + /**< Get ethernet Rx queue stats */ + eventdev_eth_rx_adapter_q_stats_reset eth_rx_adapter_queue_stats_reset; + /**< Reset ethernet Rx queue stats */ + eventdev_eth_tx_adapter_caps_get_t eth_tx_adapter_caps_get; /**< Get ethernet Tx adapter capabilities */ @@ -1178,6 +1383,7 @@ struct rte_eventdev_ops { * @return * - Slot in the rte_dev_devices array for a new device; */ +__rte_internal struct rte_eventdev * rte_event_pmd_allocate(const char *name, int socket_id); @@ -1189,9 +1395,44 @@ rte_event_pmd_allocate(const char *name, int socket_id); * @return * - 0 on success, negative on error */ +__rte_internal int rte_event_pmd_release(struct rte_eventdev *eventdev); +/** + * + * @internal + * This is the last step of device probing. + * It must be called after a port is allocated and initialized successfully. + * + * @param eventdev + * New event device. + */ +__rte_internal +void +event_dev_probing_finish(struct rte_eventdev *eventdev); + +/** + * Reset eventdevice fastpath APIs to dummy values. + * + * @param fp_ops + * The *fp_ops* pointer to reset. + */ +__rte_internal +void +event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op); + +/** + * Set eventdevice fastpath APIs to event device values. + * + * @param fp_ops + * The *fp_ops* pointer to set. + */ +__rte_internal +void +event_dev_fp_ops_set(struct rte_event_fp_ops *fp_ops, + const struct rte_eventdev *dev); + #ifdef __cplusplus } #endif