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