DPDK
24.07.0
|
Go to the source code of this file.
Data Structures | |
struct | rte_event_crypto_request |
union | rte_event_crypto_metadata |
struct | rte_event_crypto_adapter_conf |
struct | rte_event_crypto_adapter_runtime_params |
struct | rte_event_crypto_adapter_queue_conf |
struct | rte_event_crypto_adapter_vector_limits |
struct | rte_event_crypto_adapter_stats |
Macros | |
#define | RTE_EVENT_CRYPTO_ADAPTER_EVENT_VECTOR 0x1 |
Typedefs | |
typedef int(* | rte_event_crypto_adapter_conf_cb) (uint8_t id, uint8_t dev_id, struct rte_event_crypto_adapter_conf *conf, void *arg) |
Enumerations | |
enum | rte_event_crypto_adapter_mode { RTE_EVENT_CRYPTO_ADAPTER_OP_NEW, RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD } |
RTE Event crypto adapter
Eventdev library provides couple of adapters to bridge between various components for providing new event source. The event crypto adapter is one of those adapters which is intended to bridge between event devices and crypto devices.
The crypto adapter adds support to enqueue/dequeue crypto operations to/ from event device. The packet flow between crypto device and the event device can be accomplished using both SW and HW based transfer mechanisms. The adapter uses an EAL service core function for SW based packet transfer and uses the eventdev PMD functions to configure HW based packet transfer between the crypto device and the event device.
The application can choose to submit a crypto operation directly to crypto device or send it to the crypto adapter via eventdev based on RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. The first mode is known as the event new(RTE_EVENT_CRYPTO_ADAPTER_OP_NEW) mode and the second as the event forward(RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD) mode. The choice of mode can be specified while creating the adapter. In the former mode, it is an application responsibility to enable ingress packet ordering. In the latter mode, it is the adapter responsibility to enable the ingress packet ordering.
Working model of RTE_EVENT_CRYPTO_ADAPTER_OP_NEW mode:
+--------------+ +--------------+ | | | Crypto stage | | Application |---[2]-->| + enqueue to | | | | cryptodev | +--------------+ +--------------+ ^ ^ | | | [3] [6] [1] | | | | +--------------+ | | | | | Event device | | | | | +--------------+ | ^ | | | [5] | | v +--------------+ +--------------+ | | | | |Crypto adapter|<--[4]---| Cryptodev | | | | | +--------------+ +--------------+ [1] Application dequeues events from the previous stage. [2] Application prepares the crypto operations. [3] Crypto operations are submitted to cryptodev by application. [4] Crypto adapter dequeues crypto completions from cryptodev. [5] Crypto adapter enqueues events to the eventdev. [6] Application dequeues from eventdev and prepare for further processing.
In the RTE_EVENT_CRYPTO_ADAPTER_OP_NEW mode, application submits crypto operations directly to crypto device. The adapter then dequeues crypto completions from crypto device and enqueue events to the event device. This mode does not ensure ingress ordering, if the application directly enqueues to cryptodev without going through crypto/atomic stage i.e. removing item [1] and [2]. Events dequeued from the adapter will be treated as new events. In this mode, application needs to specify event information (response information) which is needed to enqueue an event after the crypto operation is completed.
Working model of RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode:
+--------------+ +--------------+ --[1]-->| |---[2]-->| Application | | Event device | | in | <--[8]--| |<--[3]---| Ordered stage| +--------------+ +--------------+ ^ | | [4] [7] | | v +----------------+ +--------------+ | |--[5]->| | | Crypto adapter | | Cryptodev | | |<-[6]--| | +----------------+ +--------------+ [1] Events from the previous stage. [2] Application in ordered stage dequeues events from eventdev. [3] Application enqueues crypto operations as events to eventdev. [4] Crypto adapter dequeues event from eventdev. [5] Crypto adapter submits crypto operations to cryptodev (Atomic stage). [6] Crypto adapter dequeues crypto completions from cryptodev [7] Crypto adapter enqueues events to the eventdev [8] Events to the next stage
In the RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode, if HW supports RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability the application can directly submit the crypto operations to the cryptodev. If not, application retrieves crypto adapter's event port using rte_event_crypto_adapter_event_port_get() API. Then, links its event queue to this port and starts enqueuing crypto operations as events to the eventdev. The adapter then dequeues the events and submits the crypto operations to the cryptodev. After the crypto completions, the adapter enqueues events to the event device. Application can use this mode, when ingress packet ordering is needed. Events dequeued from the adapter will be treated as forwarded events. In this mode, the application needs to specify the cryptodev ID and queue pair ID (request information) needed to enqueue a crypto operation in addition to the event information (response information) needed to enqueue an event after the crypto operation has completed.
The event crypto adapter provides common APIs to configure the packet flow from the crypto device to event devices for both SW and HW based transfers. The crypto event adapter's functions are:
The application creates an instance using rte_event_crypto_adapter_create() or rte_event_crypto_adapter_create_ext().
Cryptodev queue pair addition/deletion is done using the rte_event_crypto_adapter_queue_pair_xxx() APIs. If HW supports RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND capability, event information must be passed to the add API.
The SW adapter or HW PMD uses rte_crypto_op::sess_type to decide whether request/response(private) data is located in the crypto/security session or at an offset in the rte_crypto_op.
For session-based operations, the set and get API provides a mechanism for an application to store and retrieve the data information stored along with the crypto session. The RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA capability indicates whether HW or SW supports this feature.
For session-less mode, the adapter gets the private data information placed along with the struct rte_crypto_op
. The rte_crypto_op::private_data_offset provides an offset to locate the request/response information in the rte_crypto_op. This offset is counted from the start of the rte_crypto_op including initialization vector (IV).
Definition in file rte_event_crypto_adapter.h.
#define RTE_EVENT_CRYPTO_ADAPTER_EVENT_VECTOR 0x1 |
This flag indicates that crypto operations processed on the crypto adapter need to be vectorized
Definition at line 284 of file rte_event_crypto_adapter.h.
typedef int(* rte_event_crypto_adapter_conf_cb) (uint8_t id, uint8_t dev_id, struct rte_event_crypto_adapter_conf *conf, void *arg) |
Function type used for adapter configuration callback. The callback is used to fill in members of the struct rte_event_crypto_adapter_conf, this callback is invoked when creating a SW service for packet transfer from cryptodev queue pair to the event device. The SW service is created within the rte_event_crypto_adapter_queue_pair_add() function if SW based packet transfers from cryptodev queue pair to the event device are required.
id | Adapter identifier. |
dev_id | Event device identifier. |
conf | Structure that needs to be populated by this callback. |
arg | Argument to the callback. This is the same as the conf_arg passed to the rte_event_crypto_adapter_create_ext(). |
Definition at line 377 of file rte_event_crypto_adapter.h.
Crypto event adapter mode
Enumerator | |
---|---|
RTE_EVENT_CRYPTO_ADAPTER_OP_NEW | Start the crypto adapter in event new mode.
|
RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD | Start the crypto adapter in event forward mode.
|
Definition at line 181 of file rte_event_crypto_adapter.h.
int rte_event_crypto_adapter_create_ext | ( | uint8_t | id, |
uint8_t | dev_id, | ||
rte_event_crypto_adapter_conf_cb | conf_cb, | ||
enum rte_event_crypto_adapter_mode | mode, | ||
void * | conf_arg | ||
) |
Create a new event crypto adapter with the specified identifier.
id | Adapter identifier. |
dev_id | Event device identifier. |
conf_cb | Callback function that fills in members of a struct rte_event_crypto_adapter_conf struct passed into it. |
mode | Flag to indicate the mode of the adapter. |
conf_arg | Argument that is passed to the conf_cb function. |
int rte_event_crypto_adapter_create | ( | uint8_t | id, |
uint8_t | dev_id, | ||
struct rte_event_port_conf * | port_config, | ||
enum rte_event_crypto_adapter_mode | mode | ||
) |
Create a new event crypto adapter with the specified identifier. This function uses an internal configuration function that creates an event port. This default function reconfigures the event device with an additional event port and set up the event port using the port_config parameter passed into this function. In case the application needs more control in configuration of the service, it should use the rte_event_crypto_adapter_create_ext() version.
When this API is used for creating adapter instance, rte_event_dev_config::nb_event_ports
is automatically incremented, and the event device is reconfigured with additional event port during service initialization. This event device reconfigure logic also increments the rte_event_dev_config::nb_single_link_event_port_queues
parameter if the adapter event port config is of type RTE_EVENT_PORT_CFG_SINGLE_LINK
.
Application no longer needs to account for rte_event_dev_config::nb_event_ports
and rte_event_dev_config::nb_single_link_event_port_queues
parameters required for crypto adapter in event device configuration when the adapter is created with this API.
id | Adapter identifier. |
dev_id | Event device identifier. |
port_config | Argument of type rte_event_port_conf that is passed to the conf_cb function. |
mode | Flag to indicate the mode of the adapter. |
int rte_event_crypto_adapter_free | ( | uint8_t | id | ) |
Free an event crypto adapter
id | Adapter identifier. |
int rte_event_crypto_adapter_queue_pair_add | ( | uint8_t | id, |
uint8_t | cdev_id, | ||
int32_t | queue_pair_id, | ||
const struct rte_event_crypto_adapter_queue_conf * | conf | ||
) |
Add a queue pair to an event crypto adapter.
id | Adapter identifier. |
cdev_id | Cryptodev identifier. |
queue_pair_id | Cryptodev queue pair identifier. If queue_pair_id is set -1, adapter adds all the pre configured queue pairs to the instance. |
conf | Additional configuration structure of type rte_event_crypto_adapter_queue_conf |
int rte_event_crypto_adapter_queue_pair_del | ( | uint8_t | id, |
uint8_t | cdev_id, | ||
int32_t | queue_pair_id | ||
) |
Delete a queue pair from an event crypto adapter.
id | Adapter identifier. |
cdev_id | Cryptodev identifier. |
queue_pair_id | Cryptodev queue pair identifier. |
int rte_event_crypto_adapter_start | ( | uint8_t | id | ) |
Start event crypto adapter
id | Adapter identifier. |
int rte_event_crypto_adapter_stop | ( | uint8_t | id | ) |
Stop event crypto adapter
id | Adapter identifier. |
int rte_event_crypto_adapter_stats_get | ( | uint8_t | id, |
struct rte_event_crypto_adapter_stats * | stats | ||
) |
Retrieve statistics for an adapter
id | Adapter identifier. | |
[out] | stats | A pointer to structure used to retrieve statistics for an adapter. |
int rte_event_crypto_adapter_stats_reset | ( | uint8_t | id | ) |
Reset statistics for an adapter.
id | Adapter identifier. |
int rte_event_crypto_adapter_service_id_get | ( | uint8_t | id, |
uint32_t * | service_id | ||
) |
Retrieve the service ID of an adapter. If the adapter doesn't use a rte_service function, this function returns -ESRCH.
id | Adapter identifier. | |
[out] | service_id | A pointer to a uint32_t, to be filled in with the service id. |
int rte_event_crypto_adapter_event_port_get | ( | uint8_t | id, |
uint8_t * | event_port_id | ||
) |
Retrieve the event port of an adapter.
id | Adapter identifier. | |
[out] | event_port_id | Application links its event queue to this adapter port which is used in RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD mode. |
__rte_experimental int rte_event_crypto_adapter_runtime_params_init | ( | struct rte_event_crypto_adapter_runtime_params * | params | ) |
Initialize the adapter runtime configuration parameters
params | A pointer to structure of type struct rte_event_crypto_adapter_runtime_params |
__rte_experimental int rte_event_crypto_adapter_runtime_params_set | ( | uint8_t | id, |
struct rte_event_crypto_adapter_runtime_params * | params | ||
) |
Set the adapter runtime configuration parameters
id | Adapter identifier |
params | A pointer to structure of type struct rte_event_crypto_adapter_runtime_params with configuration parameter values. The reserved fields of this structure must be initialized to zero and the valid fields need to be set appropriately. This struct can be initialized using rte_event_crypto_adapter_runtime_params_init() API to default values or application may reset this struct and update required fields. |
__rte_experimental int rte_event_crypto_adapter_runtime_params_get | ( | uint8_t | id, |
struct rte_event_crypto_adapter_runtime_params * | params | ||
) |
Get the adapter runtime configuration parameters
id | Adapter identifier | |
[out] | params | A pointer to structure of type struct rte_event_crypto_adapter_runtime_params containing valid adapter parameters when return value is 0. |
int rte_event_crypto_adapter_vector_limits_get | ( | uint8_t | dev_id, |
uint16_t | cdev_id, | ||
struct rte_event_crypto_adapter_vector_limits * | limits | ||
) |
Retrieve vector limits for a given event dev and crypto dev pair.
dev_id | Event device identifier. | |
cdev_id | Crypto device identifier. | |
[out] | limits | A pointer to rte_event_crypto_adapter_vector_limits structure that has to be filled. |
|
inlinestatic |
Enqueue a burst of crypto operations as event objects supplied in rte_event structure on an event crypto adapter designated by its event dev_id through the event port specified by port_id. This function is supported if the eventdev PMD has the RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability flag set.
The nb_events parameter is the number of event objects to enqueue which are supplied in the ev array of rte_event structure.
The rte_event_crypto_adapter_enqueue() function returns the number of event objects it actually enqueued. A return value equal to nb_events means that all event objects have been enqueued.
dev_id | The identifier of the device. |
port_id | The identifier of the event port. |
ev | Points to an array of nb_events objects of type rte_event structure which contain the event object enqueue operations to be processed. |
nb_events | The number of event objects to enqueue, typically number of rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...) available for this port. |
Definition at line 757 of file rte_event_crypto_adapter.h.