18769079aSJay Zhou /* SPDX-License-Identifier: BSD-3-Clause 28769079aSJay Zhou * Copyright(c) 2018 HUAWEI TECHNOLOGIES CO., LTD. 38769079aSJay Zhou */ 48769079aSJay Zhou 58769079aSJay Zhou #ifndef _VIRTIO_CRYPTODEV_H_ 68769079aSJay Zhou #define _VIRTIO_CRYPTODEV_H_ 78769079aSJay Zhou 86f0175ffSJay Zhou #include "virtio_crypto.h" 96f0175ffSJay Zhou #include "virtio_pci.h" 106f0175ffSJay Zhou #include "virtio_ring.h" 1125500d4bSJay Zhou 1225500d4bSJay Zhou /* Features desired/implemented by this driver. */ 1325500d4bSJay Zhou #define VIRTIO_CRYPTO_PMD_GUEST_FEATURES (1ULL << VIRTIO_F_VERSION_1) 1425500d4bSJay Zhou 158769079aSJay Zhou #define CRYPTODEV_NAME_VIRTIO_PMD crypto_virtio 168769079aSJay Zhou 176f0175ffSJay Zhou #define NUM_ENTRY_VIRTIO_CRYPTO_OP 7 186f0175ffSJay Zhou 19b063e843SFan Zhang #define VIRTIO_CRYPTO_MAX_IV_SIZE 16 20b063e843SFan Zhang 21*186b14d6SFan Zhang #define VIRTIO_CRYPTO_MAX_KEY_SIZE 256 22*186b14d6SFan Zhang 2382adb12aSJay Zhou extern uint8_t cryptodev_virtio_driver_id; 2482adb12aSJay Zhou 25b7fa78c7SJay Zhou enum virtio_crypto_cmd_id { 26b7fa78c7SJay Zhou VIRTIO_CRYPTO_CMD_CIPHER = 0, 27b7fa78c7SJay Zhou VIRTIO_CRYPTO_CMD_AUTH = 1, 28b7fa78c7SJay Zhou VIRTIO_CRYPTO_CMD_CIPHER_HASH = 2, 29b7fa78c7SJay Zhou VIRTIO_CRYPTO_CMD_HASH_CIPHER = 3 30b7fa78c7SJay Zhou }; 31b7fa78c7SJay Zhou 326f0175ffSJay Zhou struct virtio_crypto_op_cookie { 336f0175ffSJay Zhou struct virtio_crypto_op_data_req data_req; 346f0175ffSJay Zhou struct virtio_crypto_inhdr inhdr; 356f0175ffSJay Zhou struct vring_desc desc[NUM_ENTRY_VIRTIO_CRYPTO_OP]; 36b063e843SFan Zhang uint8_t iv[VIRTIO_CRYPTO_MAX_IV_SIZE]; 376f0175ffSJay Zhou }; 386f0175ffSJay Zhou 396f0175ffSJay Zhou /* 406f0175ffSJay Zhou * Control queue function prototype 416f0175ffSJay Zhou */ 426f0175ffSJay Zhou void virtio_crypto_ctrlq_start(struct rte_cryptodev *dev); 436f0175ffSJay Zhou 446f0175ffSJay Zhou /* 456f0175ffSJay Zhou * Data queue function prototype 466f0175ffSJay Zhou */ 476f0175ffSJay Zhou void virtio_crypto_dataq_start(struct rte_cryptodev *dev); 486f0175ffSJay Zhou 496f0175ffSJay Zhou int virtio_crypto_queue_setup(struct rte_cryptodev *dev, 506f0175ffSJay Zhou int queue_type, 516f0175ffSJay Zhou uint16_t vtpci_queue_idx, 526f0175ffSJay Zhou uint16_t nb_desc, 536f0175ffSJay Zhou int socket_id, 546f0175ffSJay Zhou struct virtqueue **pvq); 556f0175ffSJay Zhou 566f0175ffSJay Zhou void virtio_crypto_queue_release(struct virtqueue *vq); 576f0175ffSJay Zhou 5825500d4bSJay Zhou uint16_t virtio_crypto_pkt_tx_burst(void *tx_queue, 5925500d4bSJay Zhou struct rte_crypto_op **tx_pkts, 6025500d4bSJay Zhou uint16_t nb_pkts); 6125500d4bSJay Zhou 6225500d4bSJay Zhou uint16_t virtio_crypto_pkt_rx_burst(void *tx_queue, 6325500d4bSJay Zhou struct rte_crypto_op **tx_pkts, 6425500d4bSJay Zhou uint16_t nb_pkts); 6525500d4bSJay Zhou 668769079aSJay Zhou #endif /* _VIRTIO_CRYPTODEV_H_ */ 67