crypto/ccp: support basic PMD ops
[dpdk.git] / drivers / crypto / ccp / ccp_pmd_private.h
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
3  */
4
5 #ifndef _CCP_PMD_PRIVATE_H_
6 #define _CCP_PMD_PRIVATE_H_
7
8 #include <rte_cryptodev.h>
9
10 #define CRYPTODEV_NAME_CCP_PMD crypto_ccp
11
12 #define CCP_LOG_ERR(fmt, args...) \
13         RTE_LOG(ERR, CRYPTODEV, "[%s] %s() line %u: " fmt "\n",  \
14                         RTE_STR(CRYPTODEV_NAME_CCP_PMD), \
15                         __func__, __LINE__, ## args)
16
17 #ifdef RTE_LIBRTE_CCP_DEBUG
18 #define CCP_LOG_INFO(fmt, args...) \
19         RTE_LOG(INFO, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
20                         RTE_STR(CRYPTODEV_NAME_CCP_PMD), \
21                         __func__, __LINE__, ## args)
22
23 #define CCP_LOG_DBG(fmt, args...) \
24         RTE_LOG(DEBUG, CRYPTODEV, "[%s] %s() line %u: " fmt "\n", \
25                         RTE_STR(CRYPTODEV_NAME_CCP_PMD), \
26                         __func__, __LINE__, ## args)
27 #else
28 #define CCP_LOG_INFO(fmt, args...)
29 #define CCP_LOG_DBG(fmt, args...)
30 #endif
31
32 /**< Maximum queue pairs supported by CCP PMD */
33 #define CCP_PMD_MAX_QUEUE_PAIRS 1
34 #define CCP_NB_MAX_DESCRIPTORS 1024
35 #define CCP_MAX_BURST 64
36
37 #include "ccp_dev.h"
38
39 /* private data structure for each CCP crypto device */
40 struct ccp_private {
41         unsigned int max_nb_qpairs;     /**< Max number of queue pairs */
42         unsigned int max_nb_sessions;   /**< Max number of sessions */
43         uint8_t crypto_num_dev;         /**< Number of working crypto devices */
44         struct ccp_device *last_dev;    /**< Last working crypto device */
45 };
46
47 /* CCP batch info */
48 struct ccp_batch_info {
49         struct rte_crypto_op *op[CCP_MAX_BURST];
50         /**< optable populated at enque time from app*/
51         int op_idx;
52         struct ccp_queue *cmd_q;
53         uint16_t opcnt;
54         /**< no. of crypto ops in batch*/
55         int desccnt;
56         /**< no. of ccp queue descriptors*/
57         uint32_t head_offset;
58         /**< ccp queue head tail offsets time of enqueue*/
59         uint32_t tail_offset;
60         uint8_t lsb_buf[CCP_SB_BYTES * CCP_MAX_BURST];
61         phys_addr_t lsb_buf_phys;
62         /**< LSB intermediate buf for passthru */
63         int lsb_buf_idx;
64 } __rte_cache_aligned;
65
66 /**< CCP crypto queue pair */
67 struct ccp_qp {
68         uint16_t id;
69         /**< Queue Pair Identifier */
70         char name[RTE_CRYPTODEV_NAME_MAX_LEN];
71         /**< Unique Queue Pair Name */
72         struct rte_ring *processed_pkts;
73         /**< Ring for placing process packets */
74         struct rte_mempool *sess_mp;
75         /**< Session Mempool */
76         struct rte_mempool *batch_mp;
77         /**< Session Mempool for batch info */
78         struct rte_cryptodev_stats qp_stats;
79         /**< Queue pair statistics */
80         struct ccp_batch_info *b_info;
81         /**< Store ops pulled out of queue */
82         struct rte_cryptodev *dev;
83         /**< rte crypto device to which this qp belongs */
84 } __rte_cache_aligned;
85
86
87 /**< device specific operations function pointer structure */
88 extern struct rte_cryptodev_ops *ccp_pmd_ops;
89
90 uint16_t
91 ccp_cpu_pmd_enqueue_burst(void *queue_pair,
92                           struct rte_crypto_op **ops,
93                           uint16_t nb_ops);
94 uint16_t
95 ccp_cpu_pmd_dequeue_burst(void *queue_pair,
96                           struct rte_crypto_op **ops,
97                           uint16_t nb_ops);
98
99 #endif /* _CCP_PMD_PRIVATE_H_ */