1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2018 HUAWEI TECHNOLOGIES CO., LTD. 3 */ 4 5 #ifndef _VIRTIO_CRYPTODEV_H_ 6 #define _VIRTIO_CRYPTODEV_H_ 7 8 #include "virtio_crypto.h" 9 #include "virtio_pci.h" 10 #include "virtio_ring.h" 11 12 /* Features desired/implemented by this driver. */ 13 #define VIRTIO_CRYPTO_PMD_GUEST_FEATURES (1ULL << VIRTIO_F_VERSION_1) 14 15 #define CRYPTODEV_NAME_VIRTIO_PMD crypto_virtio 16 17 #define NUM_ENTRY_VIRTIO_CRYPTO_OP 7 18 19 #define VIRTIO_CRYPTO_MAX_IV_SIZE 16 20 21 #define VIRTIO_CRYPTO_MAX_KEY_SIZE 256 22 23 extern uint8_t cryptodev_virtio_driver_id; 24 25 enum virtio_crypto_cmd_id { 26 VIRTIO_CRYPTO_CMD_CIPHER = 0, 27 VIRTIO_CRYPTO_CMD_AUTH = 1, 28 VIRTIO_CRYPTO_CMD_CIPHER_HASH = 2, 29 VIRTIO_CRYPTO_CMD_HASH_CIPHER = 3 30 }; 31 32 struct virtio_crypto_op_cookie { 33 struct virtio_crypto_op_data_req data_req; 34 struct virtio_crypto_inhdr inhdr; 35 struct vring_desc desc[NUM_ENTRY_VIRTIO_CRYPTO_OP]; 36 uint8_t iv[VIRTIO_CRYPTO_MAX_IV_SIZE]; 37 }; 38 39 /* 40 * Control queue function prototype 41 */ 42 void virtio_crypto_ctrlq_start(struct rte_cryptodev *dev); 43 44 /* 45 * Data queue function prototype 46 */ 47 void virtio_crypto_dataq_start(struct rte_cryptodev *dev); 48 49 int virtio_crypto_queue_setup(struct rte_cryptodev *dev, 50 int queue_type, 51 uint16_t vtpci_queue_idx, 52 uint16_t nb_desc, 53 int socket_id, 54 struct virtqueue **pvq); 55 56 void virtio_crypto_queue_release(struct virtqueue *vq); 57 58 uint16_t virtio_crypto_pkt_tx_burst(void *tx_queue, 59 struct rte_crypto_op **tx_pkts, 60 uint16_t nb_pkts); 61 62 uint16_t virtio_crypto_pkt_rx_burst(void *tx_queue, 63 struct rte_crypto_op **tx_pkts, 64 uint16_t nb_pkts); 65 66 #endif /* _VIRTIO_CRYPTODEV_H_ */ 67