numam-dpdk/drivers/crypto/virtio/virtio_cryptodev.h
Fan Zhang b063e843fa crypto/virtio: fix IV physical address
The physical address of IV required by Virtio was computed using
crypto operations' physical address plus the offset. However not
all crypto ops will have physical address field initialized and
compute it runtimely is costly. This patch fixes this problem by
adding iv field in virtio_crypto_op_cookie and does a memcpy of
iv instead.

Fixes: 82adb12a1fce ("crypto/virtio: support burst enqueue/dequeue")
Cc: stable@dpdk.org

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Reviewed-by: Jay Zhou <jianjay.zhou@huawei.com>
2018-07-11 00:57:51 +02:00

65 lines
1.5 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2018 HUAWEI TECHNOLOGIES CO., LTD.
*/
#ifndef _VIRTIO_CRYPTODEV_H_
#define _VIRTIO_CRYPTODEV_H_
#include "virtio_crypto.h"
#include "virtio_pci.h"
#include "virtio_ring.h"
/* Features desired/implemented by this driver. */
#define VIRTIO_CRYPTO_PMD_GUEST_FEATURES (1ULL << VIRTIO_F_VERSION_1)
#define CRYPTODEV_NAME_VIRTIO_PMD crypto_virtio
#define NUM_ENTRY_VIRTIO_CRYPTO_OP 7
#define VIRTIO_CRYPTO_MAX_IV_SIZE 16
extern uint8_t cryptodev_virtio_driver_id;
enum virtio_crypto_cmd_id {
VIRTIO_CRYPTO_CMD_CIPHER = 0,
VIRTIO_CRYPTO_CMD_AUTH = 1,
VIRTIO_CRYPTO_CMD_CIPHER_HASH = 2,
VIRTIO_CRYPTO_CMD_HASH_CIPHER = 3
};
struct virtio_crypto_op_cookie {
struct virtio_crypto_op_data_req data_req;
struct virtio_crypto_inhdr inhdr;
struct vring_desc desc[NUM_ENTRY_VIRTIO_CRYPTO_OP];
uint8_t iv[VIRTIO_CRYPTO_MAX_IV_SIZE];
};
/*
* Control queue function prototype
*/
void virtio_crypto_ctrlq_start(struct rte_cryptodev *dev);
/*
* Data queue function prototype
*/
void virtio_crypto_dataq_start(struct rte_cryptodev *dev);
int virtio_crypto_queue_setup(struct rte_cryptodev *dev,
int queue_type,
uint16_t vtpci_queue_idx,
uint16_t nb_desc,
int socket_id,
struct virtqueue **pvq);
void virtio_crypto_queue_release(struct virtqueue *vq);
uint16_t virtio_crypto_pkt_tx_burst(void *tx_queue,
struct rte_crypto_op **tx_pkts,
uint16_t nb_pkts);
uint16_t virtio_crypto_pkt_rx_burst(void *tx_queue,
struct rte_crypto_op **tx_pkts,
uint16_t nb_pkts);
#endif /* _VIRTIO_CRYPTODEV_H_ */