xref: /dpdk/drivers/crypto/virtio/virtio_cryptodev.h (revision 186b14d6850654eb84a8ae9ea29b736f0ba5e093)
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