-----Original Message----- > Date: Tue, 24 Apr 2018 18:13:23 +0530 > From: Abhinandan Gujjar <abhinandan.guj...@intel.com> > To: jerin.ja...@caviumnetworks.com, hemant.agra...@nxp.com, > akhil.go...@nxp.com, dev@dpdk.org > CC: narender.vang...@intel.com, abhinandan.guj...@intel.com, > nikhil....@intel.com, gage.e...@intel.com > Subject: [v2,2/6] eventdev: add APIs and PMD callbacks for crypto adapter > X-Mailer: git-send-email 1.9.1 > > Signed-off-by: Abhinandan Gujjar <abhinandan.guj...@intel.com> > --- > drivers/event/sw/sw_evdev.c | 13 +++ > lib/librte_eventdev/rte_eventdev.c | 25 +++++ > lib/librte_eventdev/rte_eventdev.h | 52 +++++++++ > lib/librte_eventdev/rte_eventdev_pmd.h | 189 > +++++++++++++++++++++++++++++++++ > 4 files changed, 279 insertions(+) > > diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c > index dcb6551..10f0e1a 100644 > --- a/drivers/event/sw/sw_evdev.c > +++ b/drivers/event/sw/sw_evdev.c > @@ -480,6 +480,17 @@ > return 0; > } > > +static int > +sw_crypto_adapter_caps_get(const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev, > + uint32_t *caps) > +{ > + RTE_SET_USED(dev); > + RTE_SET_USED(cdev); > + *caps = RTE_EVENT_CRYPTO_ADAPTER_SW_CAP; > + return 0; > +} > + > static void > sw_info_get(struct rte_eventdev *dev, struct rte_event_dev_info *info) > { > @@ -809,6 +820,8 @@ static int32_t sw_sched_service_func(void *args) > > .timer_adapter_caps_get = sw_timer_adapter_caps_get, > > + .crypto_adapter_caps_get = sw_crypto_adapter_caps_get, > + > .xstats_get = sw_xstats_get, > .xstats_get_names = sw_xstats_get_names, > .xstats_get_by_name = sw_xstats_get_by_name, > diff --git a/lib/librte_eventdev/rte_eventdev.c > b/lib/librte_eventdev/rte_eventdev.c > index 3f016f4..7ca9fd1 100644 > --- a/lib/librte_eventdev/rte_eventdev.c > +++ b/lib/librte_eventdev/rte_eventdev.c > @@ -29,6 +29,8 @@ > #include <rte_malloc.h> > #include <rte_errno.h> > #include <rte_ethdev.h> > +#include <rte_cryptodev.h> > +#include <rte_cryptodev_pmd.h> > > #include "rte_eventdev.h" > #include "rte_eventdev_pmd.h" > @@ -145,6 +147,29 @@ > : 0; > } > > +int __rte_experimental > +rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id, > + uint32_t *caps) > +{ > + struct rte_eventdev *dev; > + struct rte_cryptodev *cdev; > + > + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); > + if (!rte_cryptodev_pmd_is_valid_dev(cdev_id)) > + return -EINVAL; > + > + dev = &rte_eventdevs[dev_id]; > + cdev = rte_cryptodev_pmd_get_dev(cdev_id); > + > + if (caps == NULL) > + return -EINVAL; > + *caps = 0; > + > + return dev->dev_ops->crypto_adapter_caps_get ? > + (*dev->dev_ops->crypto_adapter_caps_get) > + (dev, cdev, caps) : -ENOTSUP; > +} > + > static inline int > rte_event_dev_queue_config(struct rte_eventdev *dev, uint8_t nb_queues) > { > diff --git a/lib/librte_eventdev/rte_eventdev.h > b/lib/librte_eventdev/rte_eventdev.h > index 8297f24..9822747 100644 > --- a/lib/librte_eventdev/rte_eventdev.h > +++ b/lib/librte_eventdev/rte_eventdev.h > @@ -8,6 +8,8 @@ > #ifndef _RTE_EVENTDEV_H_ > #define _RTE_EVENTDEV_H_ > > +#include <rte_compat.h> > + > /** > * @file > * > @@ -1135,6 +1137,56 @@ struct rte_event { > int __rte_experimental > rte_event_timer_adapter_caps_get(uint8_t dev_id, uint32_t *caps); > > +/* Crypto adapter capability bitmap flag */ > +#define RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW 0x1 > +/**< Flag indicates HW is capable of generating events.
events in RTE_EVENT_OP_NEW enqueue operation > + * Cryptodev will send packets to the event device as new events > + * using an internal event port. > + */ > + > +#define RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD 0x2 > +/**< Flag indicates HW is capable of generating events. events in RTE_EVENT_OP_FWD enqueue operation > + * Cryptodev will send packets to the event device as forwarded event > + * using an internal event port. > + */ > + > +#define RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND 0x4 > +/**< Flag indicates HW is capable of mapping crypto queue pair to > + * event queue. > + */ > + > +#define RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA 0x8 > +/**< Flag indicates HW/SW suports a mechanism to store and retrieve > + * the private data information along with the crypto session. > + */ > + > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * Retrieve the event device's crypto adapter capabilities for the > + * specified cryptodev device > + * > + * @param dev_id > + * The identifier of the device. > + * > + * @param cdev_id > + * The identifier of the cryptodev device. > + * > + * @param[out] caps > + * A pointer to memory filled with event adapter capabilities. > + * It is expected to be pre-allocated & initialized by caller. > + * > + * @return > + * - 0: Success, driver provides event adapter capabilities for the > + * cryptodev device. > + * - <0: Error code returned by the driver function. > + * > + */ > +int __rte_experimental > +rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id, > + uint32_t *caps); > + > struct rte_eventdev_ops; > struct rte_eventdev; > > diff --git a/lib/librte_eventdev/rte_eventdev_pmd.h > b/lib/librte_eventdev/rte_eventdev_pmd.h > index 2dcb528..739b984 100644 > --- a/lib/librte_eventdev/rte_eventdev_pmd.h > +++ b/lib/librte_eventdev/rte_eventdev_pmd.h > @@ -70,6 +70,9 @@ > ((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) | \ > (RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ)) > > +#define RTE_EVENT_CRYPTO_ADAPTER_SW_CAP \ > + RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA > + > /**< Ethernet Rx adapter cap to return If the packet transfers from > * the ethdev to eventdev use a SW service function > */ > @@ -617,6 +620,177 @@ typedef int (*eventdev_eth_rx_adapter_stats_reset) > */ > typedef int (*eventdev_selftest)(void); > > + > +struct rte_cryptodev; > +struct rte_event_crypto_queue_pair_conf *conf; Can we get rid of this conf global variable? > + > +/** > + * This API may change without prior notice > + * > + * Retrieve the event device's crypto adapter capabilities for the > + * specified cryptodev > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * cryptodev pointer > + * > + * @param[out] caps > + * A pointer to memory filled with event adapter capabilities. > + * It is expected to be pre-allocated & initialized by caller. > + * > + * @return > + * - 0: Success, driver provides event adapter capabilities for the > + * cryptodev. > + * - <0: Error code returned by the driver function. > + * > + */ > +typedef int (*eventdev_crypto_adapter_caps_get_t) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev, > + uint32_t *caps); > + > +/** > + * This API may change without prior notice > + * > + * Add crypto queue pair to event device. This callback is invoked if > + * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id) > + * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set. > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * cryptodev pointer > + * > + * @param queue_pair_id > + * cryptodev queue pair identifier. > + * > + * @param conf > + * Additional configuration structure of type > + * *rte_event_crypto_queue_pair_conf*. > + * This structure will have a valid value for only those HW PMDs supporting > + * @see RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND capability. > + * > + * @return > + * - 0: Success, cryptodev queue pair added successfully. > + * - <0: Error code returned by the driver function. > + * > + */ > +typedef int (*eventdev_crypto_adapter_queue_pair_add_t) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev, > + int32_t queue_pair_id, > + const struct rte_event_crypto_queue_pair_conf *conf); > + > + > +/** > + * This API may change without prior notice > + * > + * Delete crypto queue pair to event device. This callback is invoked if > + * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id) > + * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set. > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * cryptodev pointer > + * > + * @param queue_pair_id > + * cryptodev queue pair identifier. > + * > + * @return > + * - 0: Success, cryptodev queue pair deleted successfully. > + * - <0: Error code returned by the driver function. > + * > + */ > +typedef int (*eventdev_crypto_adapter_queue_pair_del_t) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev, > + int32_t queue_pair_id); > + > +/** > + * Start crypto adapter. This callback is invoked if > + * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id) > + * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs > + * from cdev_id have been added to the event device. > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * Crypto device pointer > + * > + * @return > + * - 0: Success, crypto adapter started successfully. > + * - <0: Error code returned by the driver function. > + */ > +typedef int (*eventdev_crypto_adapter_start_t) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev); > + > +/** > + * Stop crypto adapter. This callback is invoked if > + * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id) > + * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs > + * from cdev_id have been added to the event device. > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * Crypto device pointer > + * > + * @return > + * - 0: Success, crypto adapter stopped successfully. > + * - <0: Error code returned by the driver function. > + */ > +typedef int (*eventdev_crypto_adapter_stop_t) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev); > + > +struct rte_event_crypto_adapter_stats; > + > +/** > + * Retrieve crypto adapter statistics. > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * Crypto device pointer > + * > + * @param[out] stats > + * Pointer to stats structure > + * > + * @return > + * Return 0 on success. > + */ > + > +typedef int (*eventdev_crypto_adapter_stats_get) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev, > + struct rte_event_crypto_adapter_stats *stats); > + > +/** > + * Reset crypto adapter statistics. > + * > + * @param dev > + * Event device pointer > + * > + * @param cdev > + * Crypto device pointer > + * > + * @return > + * Return 0 on success. > + */ > + > +typedef int (*eventdev_crypto_adapter_stats_reset) > + (const struct rte_eventdev *dev, > + const struct rte_cryptodev *cdev); > + > /** Event device operations function pointer table */ > struct rte_eventdev_ops { > eventdev_info_get_t dev_infos_get; /**< Get device info. */ > @@ -675,6 +849,21 @@ struct rte_eventdev_ops { > eventdev_timer_adapter_caps_get_t timer_adapter_caps_get; > /**< Get timer adapter capabilities */ > > + eventdev_crypto_adapter_caps_get_t crypto_adapter_caps_get; > + /**< Get crypto adapter capabilities */ > + eventdev_crypto_adapter_queue_pair_add_t crypto_adapter_queue_pair_add; > + /**< Add queue pair to crypto adapter */ > + eventdev_crypto_adapter_queue_pair_del_t crypto_adapter_queue_pair_del; > + /**< Delete queue pair from crypto adapter */ > + eventdev_crypto_adapter_start_t crypto_adapter_start; > + /**< Start crypto adapter */ > + eventdev_crypto_adapter_stop_t crypto_adapter_stop; > + /**< Stop crypto adapter */ > + eventdev_crypto_adapter_stats_get crypto_adapter_stats_get; > + /**< Get crypto stats */ > + eventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset; > + /**< Reset crypto stats */ > + > eventdev_selftest dev_selftest; > /**< Start eventdev Selftest */ > > -- > 1.9.1 >