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