X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Feventdev%2Feventdev_pmd.h;h=b05ffce549aeb3456557a8127a91bff61c34a402;hb=6e858b4d9244cf53505589673755ab18ac2a4a83;hp=94d99f4903076c92cb8350afb373cb42de3c8bf6;hpb=7a335720575507f55b723b1e10bfea7daeba1386;p=dpdk.git diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index 94d99f4903..b05ffce549 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -24,8 +24,8 @@ #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(...) \ @@ -80,6 +80,9 @@ #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 */ @@ -87,8 +90,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. @@ -99,6 +190,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) { @@ -127,6 +219,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) { @@ -144,7 +237,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. */ @@ -500,10 +593,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 @@ -557,6 +648,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) @@ -634,17 +751,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 @@ -652,21 +787,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 @@ -674,20 +816,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; @@ -1056,7 +1194,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. */ @@ -1103,6 +1241,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; @@ -1114,9 +1254,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 */ @@ -1136,6 +1273,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 */ @@ -1174,6 +1316,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); @@ -1185,7 +1328,42 @@ 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); + #endif /* _RTE_EVENTDEV_PMD_H_ */