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