xref: /dpdk/drivers/common/qat/dev/qat_dev_gen_lce.c (revision e9271821e489668e466c7db36912b7c338717688)
1*e9271821SNishikant Nayak /* SPDX-License-Identifier: BSD-3-Clause
2*e9271821SNishikant Nayak  * Copyright(c) 2024 Intel Corporation
3*e9271821SNishikant Nayak  */
4*e9271821SNishikant Nayak 
5*e9271821SNishikant Nayak #include <rte_pci.h>
6*e9271821SNishikant Nayak #include <rte_vfio.h>
7*e9271821SNishikant Nayak 
8*e9271821SNishikant Nayak #include "qat_device.h"
9*e9271821SNishikant Nayak #include "qat_qp.h"
10*e9271821SNishikant Nayak #include "adf_transport_access_macros_gen_lcevf.h"
11*e9271821SNishikant Nayak #include "adf_pf2vf_msg.h"
12*e9271821SNishikant Nayak #include "qat_pf2vf.h"
13*e9271821SNishikant Nayak 
14*e9271821SNishikant Nayak #include <stdint.h>
15*e9271821SNishikant Nayak #include <sys/ioctl.h>
16*e9271821SNishikant Nayak #include <unistd.h>
17*e9271821SNishikant Nayak 
18*e9271821SNishikant Nayak #define BITS_PER_ULONG		(sizeof(unsigned long) * 8)
19*e9271821SNishikant Nayak 
20*e9271821SNishikant Nayak #define VFIO_PCI_LCE_DEVICE_CFG_REGION_INDEX	VFIO_PCI_NUM_REGIONS
21*e9271821SNishikant Nayak #define VFIO_PCI_LCE_CY_CFG_REGION_INDEX	(VFIO_PCI_NUM_REGIONS + 2)
22*e9271821SNishikant Nayak #define VFIO_PCI_LCE_RING_CFG_REGION_INDEX	(VFIO_PCI_NUM_REGIONS + 4)
23*e9271821SNishikant Nayak #define LCE_DEVICE_NAME_SIZE			64
24*e9271821SNishikant Nayak #define LCE_DEVICE_MAX_BANKS			2080
25*e9271821SNishikant Nayak #define LCE_DIV_ROUND_UP(n, d)  (((n) + (d) - 1) / (d))
26*e9271821SNishikant Nayak #define LCE_DEVICE_BITMAP_SIZE	LCE_DIV_ROUND_UP(LCE_DEVICE_MAX_BANKS, BITS_PER_ULONG)
27*e9271821SNishikant Nayak 
28*e9271821SNishikant Nayak /* QAT GEN_LCE specific macros */
29*e9271821SNishikant Nayak #define QAT_GEN_LCE_BUNDLE_NUM		LCE_DEVICE_MAX_BANKS
30*e9271821SNishikant Nayak #define QAT_GEN4_QPS_PER_BUNDLE_NUM	1
31*e9271821SNishikant Nayak 
32*e9271821SNishikant Nayak /**
33*e9271821SNishikant Nayak  * struct lce_vfio_dev_cap - LCE device capabilities
34*e9271821SNishikant Nayak  *
35*e9271821SNishikant Nayak  * Device level capabilities and service level capabilities
36*e9271821SNishikant Nayak  */
37*e9271821SNishikant Nayak struct lce_vfio_dev_cap {
38*e9271821SNishikant Nayak 	uint16_t device_num;
39*e9271821SNishikant Nayak 	uint16_t device_type;
40*e9271821SNishikant Nayak 	uint32_t capability_mask;
41*e9271821SNishikant Nayak 	uint32_t extended_capabilities;
42*e9271821SNishikant Nayak 	uint16_t max_banks;
43*e9271821SNishikant Nayak 	uint16_t max_rings_per_bank;
44*e9271821SNishikant Nayak 	uint16_t arb_mask;
45*e9271821SNishikant Nayak 	uint16_t services;
46*e9271821SNishikant Nayak 	uint16_t pkg_id;
47*e9271821SNishikant Nayak 	uint16_t node_id;
48*e9271821SNishikant Nayak 	uint8_t device_name[LCE_DEVICE_NAME_SIZE];
49*e9271821SNishikant Nayak };
50*e9271821SNishikant Nayak 
51*e9271821SNishikant Nayak /* struct lce_vfio_dev_cy_cap - CY capabilities of LCE device */
52*e9271821SNishikant Nayak struct lce_vfio_dev_cy_cap {
53*e9271821SNishikant Nayak 	uint32_t nr_banks;
54*e9271821SNishikant Nayak 	unsigned long bitmap[LCE_DEVICE_BITMAP_SIZE];
55*e9271821SNishikant Nayak };
56*e9271821SNishikant Nayak 
57*e9271821SNishikant Nayak struct lce_qat_domain {
58*e9271821SNishikant Nayak 	uint32_t nid        :3;
59*e9271821SNishikant Nayak 	uint32_t fid        :7;
60*e9271821SNishikant Nayak 	uint32_t ftype      :2;
61*e9271821SNishikant Nayak 	uint32_t vfid       :13;
62*e9271821SNishikant Nayak 	uint32_t rid        :4;
63*e9271821SNishikant Nayak 	uint32_t vld        :1;
64*e9271821SNishikant Nayak 	uint32_t desc_over  :1;
65*e9271821SNishikant Nayak 	uint32_t pasid_vld  :1;
66*e9271821SNishikant Nayak 	uint32_t pasid      :20;
67*e9271821SNishikant Nayak };
68*e9271821SNishikant Nayak 
69*e9271821SNishikant Nayak struct lce_qat_buf_domain {
70*e9271821SNishikant Nayak 	uint32_t bank_id:   20;
71*e9271821SNishikant Nayak 	uint32_t type:      4;
72*e9271821SNishikant Nayak 	uint32_t resv:      8;
73*e9271821SNishikant Nayak 	struct lce_qat_domain dom;
74*e9271821SNishikant Nayak };
75*e9271821SNishikant Nayak 
76*e9271821SNishikant Nayak struct qat_dev_gen_lce_extra {
77*e9271821SNishikant Nayak 	struct qat_qp_hw_data
78*e9271821SNishikant Nayak 	    qp_gen_lce_data[QAT_GEN_LCE_BUNDLE_NUM][QAT_GEN4_QPS_PER_BUNDLE_NUM];
79*e9271821SNishikant Nayak };
80*e9271821SNishikant Nayak 
81*e9271821SNishikant Nayak static struct qat_pf2vf_dev qat_pf2vf_gen_lce = {
82*e9271821SNishikant Nayak 	.pf2vf_offset = ADF_4XXXIOV_PF2VM_OFFSET,
83*e9271821SNishikant Nayak 	.vf2pf_offset = ADF_4XXXIOV_VM2PF_OFFSET,
84*e9271821SNishikant Nayak 	.pf2vf_type_shift = ADF_PFVF_2X_MSGTYPE_SHIFT,
85*e9271821SNishikant Nayak 	.pf2vf_type_mask = ADF_PFVF_2X_MSGTYPE_MASK,
86*e9271821SNishikant Nayak 	.pf2vf_data_shift = ADF_PFVF_2X_MSGDATA_SHIFT,
87*e9271821SNishikant Nayak 	.pf2vf_data_mask = ADF_PFVF_2X_MSGDATA_MASK,
88*e9271821SNishikant Nayak };
89*e9271821SNishikant Nayak 
90*e9271821SNishikant Nayak static int
qat_select_valid_queue_gen_lce(struct qat_pci_device * qat_dev,int qp_id,enum qat_service_type service_type)91*e9271821SNishikant Nayak qat_select_valid_queue_gen_lce(struct qat_pci_device *qat_dev, int qp_id,
92*e9271821SNishikant Nayak 			    enum qat_service_type service_type)
93*e9271821SNishikant Nayak {
94*e9271821SNishikant Nayak 	int i = 0, valid_qps = 0;
95*e9271821SNishikant Nayak 	struct qat_dev_gen_lce_extra *dev_extra = qat_dev->dev_private;
96*e9271821SNishikant Nayak 
97*e9271821SNishikant Nayak 	for (; i < QAT_GEN_LCE_BUNDLE_NUM; i++) {
98*e9271821SNishikant Nayak 		if (dev_extra->qp_gen_lce_data[i][0].service_type == service_type) {
99*e9271821SNishikant Nayak 			if (valid_qps == qp_id)
100*e9271821SNishikant Nayak 				return i;
101*e9271821SNishikant Nayak 			++valid_qps;
102*e9271821SNishikant Nayak 		}
103*e9271821SNishikant Nayak 	}
104*e9271821SNishikant Nayak 	return -1;
105*e9271821SNishikant Nayak }
106*e9271821SNishikant Nayak 
107*e9271821SNishikant Nayak static const struct qat_qp_hw_data *
qat_qp_get_hw_data_gen_lce(struct qat_pci_device * qat_dev,enum qat_service_type service_type,uint16_t qp_id)108*e9271821SNishikant Nayak qat_qp_get_hw_data_gen_lce(struct qat_pci_device *qat_dev,
109*e9271821SNishikant Nayak 			enum qat_service_type service_type, uint16_t qp_id)
110*e9271821SNishikant Nayak {
111*e9271821SNishikant Nayak 	struct qat_dev_gen_lce_extra *dev_extra = qat_dev->dev_private;
112*e9271821SNishikant Nayak 	int ring_pair = qat_select_valid_queue_gen_lce(qat_dev, qp_id, service_type);
113*e9271821SNishikant Nayak 
114*e9271821SNishikant Nayak 	if (ring_pair < 0)
115*e9271821SNishikant Nayak 		return NULL;
116*e9271821SNishikant Nayak 
117*e9271821SNishikant Nayak 	return &dev_extra->qp_gen_lce_data[ring_pair][0];
118*e9271821SNishikant Nayak }
119*e9271821SNishikant Nayak 
120*e9271821SNishikant Nayak static int
qat_qp_rings_per_service_gen_lce(struct qat_pci_device * qat_dev,enum qat_service_type service)121*e9271821SNishikant Nayak qat_qp_rings_per_service_gen_lce(struct qat_pci_device *qat_dev,
122*e9271821SNishikant Nayak 			      enum qat_service_type service)
123*e9271821SNishikant Nayak {
124*e9271821SNishikant Nayak 	int i = 0, count = 0, max_ops_per_srv = 0;
125*e9271821SNishikant Nayak 	struct qat_dev_gen_lce_extra *dev_extra = qat_dev->dev_private;
126*e9271821SNishikant Nayak 
127*e9271821SNishikant Nayak 	max_ops_per_srv = QAT_GEN_LCE_BUNDLE_NUM;
128*e9271821SNishikant Nayak 	for (i = 0, count = 0; i < max_ops_per_srv; i++)
129*e9271821SNishikant Nayak 		if (dev_extra->qp_gen_lce_data[i][0].service_type == service)
130*e9271821SNishikant Nayak 			count++;
131*e9271821SNishikant Nayak 	return count;
132*e9271821SNishikant Nayak }
133*e9271821SNishikant Nayak 
qat_dev_read_config_gen_lce(struct qat_pci_device * qat_dev)134*e9271821SNishikant Nayak static int qat_dev_read_config_gen_lce(struct qat_pci_device *qat_dev)
135*e9271821SNishikant Nayak {
136*e9271821SNishikant Nayak 	struct qat_dev_gen_lce_extra *dev_extra = qat_dev->dev_private;
137*e9271821SNishikant Nayak 	struct qat_qp_hw_data *hw_data;
138*e9271821SNishikant Nayak 
139*e9271821SNishikant Nayak 	/** Enable only crypto ring: RP-0 */
140*e9271821SNishikant Nayak 	hw_data = &dev_extra->qp_gen_lce_data[0][0];
141*e9271821SNishikant Nayak 	memset(hw_data, 0, sizeof(*hw_data));
142*e9271821SNishikant Nayak 
143*e9271821SNishikant Nayak 	hw_data->service_type = QAT_SERVICE_SYMMETRIC;
144*e9271821SNishikant Nayak 	hw_data->tx_msg_size = 128;
145*e9271821SNishikant Nayak 	hw_data->rx_msg_size = 32;
146*e9271821SNishikant Nayak 
147*e9271821SNishikant Nayak 	hw_data->tx_ring_num = 0;
148*e9271821SNishikant Nayak 	hw_data->rx_ring_num = 1;
149*e9271821SNishikant Nayak 
150*e9271821SNishikant Nayak 	hw_data->hw_bundle_num = 0;
151*e9271821SNishikant Nayak 
152*e9271821SNishikant Nayak 	return 0;
153*e9271821SNishikant Nayak }
154*e9271821SNishikant Nayak 
qat_qp_build_ring_base_gen_lce(void * io_addr,struct qat_queue * queue)155*e9271821SNishikant Nayak static void qat_qp_build_ring_base_gen_lce(void *io_addr, struct qat_queue *queue)
156*e9271821SNishikant Nayak {
157*e9271821SNishikant Nayak 	uint64_t queue_base;
158*e9271821SNishikant Nayak 
159*e9271821SNishikant Nayak 	queue_base = BUILD_RING_BASE_ADDR_GEN_LCE(queue->base_phys_addr, queue->queue_size);
160*e9271821SNishikant Nayak 	WRITE_CSR_RING_BASE_GEN_LCEVF(io_addr, queue->hw_bundle_number,
161*e9271821SNishikant Nayak 			queue->hw_queue_number, queue_base);
162*e9271821SNishikant Nayak }
163*e9271821SNishikant Nayak 
164*e9271821SNishikant Nayak static void
qat_qp_adf_arb_enable_gen_lce(const struct qat_queue * txq,void * base_addr,rte_spinlock_t * lock)165*e9271821SNishikant Nayak qat_qp_adf_arb_enable_gen_lce(const struct qat_queue *txq,
166*e9271821SNishikant Nayak 			   void *base_addr, rte_spinlock_t *lock)
167*e9271821SNishikant Nayak {
168*e9271821SNishikant Nayak 	uint32_t arb_csr_offset = 0, value;
169*e9271821SNishikant Nayak 
170*e9271821SNishikant Nayak 	rte_spinlock_lock(lock);
171*e9271821SNishikant Nayak 	arb_csr_offset = ADF_ARB_RINGSRVARBEN_OFFSET +
172*e9271821SNishikant Nayak 			(ADF_RING_BUNDLE_SIZE_GEN_LCE * txq->hw_bundle_number);
173*e9271821SNishikant Nayak 	value = ADF_CSR_RD(base_addr + ADF_RING_CSR_ADDR_OFFSET_GEN_LCEVF, arb_csr_offset);
174*e9271821SNishikant Nayak 	value |= 0x01;
175*e9271821SNishikant Nayak 	ADF_CSR_WR(base_addr, arb_csr_offset, value);
176*e9271821SNishikant Nayak 	rte_spinlock_unlock(lock);
177*e9271821SNishikant Nayak }
178*e9271821SNishikant Nayak 
179*e9271821SNishikant Nayak static void
qat_qp_adf_arb_disable_gen_lce(const struct qat_queue * txq,void * base_addr,rte_spinlock_t * lock)180*e9271821SNishikant Nayak qat_qp_adf_arb_disable_gen_lce(const struct qat_queue *txq, void *base_addr, rte_spinlock_t *lock)
181*e9271821SNishikant Nayak {
182*e9271821SNishikant Nayak 	uint32_t arb_csr_offset = 0, value;
183*e9271821SNishikant Nayak 
184*e9271821SNishikant Nayak 	rte_spinlock_lock(lock);
185*e9271821SNishikant Nayak 	arb_csr_offset = ADF_ARB_RINGSRVARBEN_OFFSET +
186*e9271821SNishikant Nayak 			(ADF_RING_BUNDLE_SIZE_GEN_LCE * txq->hw_bundle_number);
187*e9271821SNishikant Nayak 	value = ADF_CSR_RD(base_addr + ADF_RING_CSR_ADDR_OFFSET_GEN_LCEVF, arb_csr_offset);
188*e9271821SNishikant Nayak 	value &= ~(0x01);
189*e9271821SNishikant Nayak 	ADF_CSR_WR(base_addr, arb_csr_offset, value);
190*e9271821SNishikant Nayak 	rte_spinlock_unlock(lock);
191*e9271821SNishikant Nayak }
192*e9271821SNishikant Nayak 
193*e9271821SNishikant Nayak static void
qat_qp_adf_configure_queues_gen_lce(struct qat_qp * qp)194*e9271821SNishikant Nayak qat_qp_adf_configure_queues_gen_lce(struct qat_qp *qp)
195*e9271821SNishikant Nayak {
196*e9271821SNishikant Nayak 	uint32_t q_tx_config, q_resp_config;
197*e9271821SNishikant Nayak 	struct qat_queue *q_tx = &qp->tx_q, *q_rx = &qp->rx_q;
198*e9271821SNishikant Nayak 
199*e9271821SNishikant Nayak 	/* q_tx/rx->queue_size is initialized as per bundle config register */
200*e9271821SNishikant Nayak 	q_tx_config = BUILD_RING_CONFIG(q_tx->queue_size);
201*e9271821SNishikant Nayak 
202*e9271821SNishikant Nayak 	q_resp_config = BUILD_RESP_RING_CONFIG(q_rx->queue_size,
203*e9271821SNishikant Nayak 					       ADF_RING_NEAR_WATERMARK_512,
204*e9271821SNishikant Nayak 					       ADF_RING_NEAR_WATERMARK_0);
205*e9271821SNishikant Nayak 
206*e9271821SNishikant Nayak 	WRITE_CSR_RING_CONFIG_GEN_LCEVF(qp->mmap_bar_addr, q_tx->hw_bundle_number,
207*e9271821SNishikant Nayak 			q_tx->hw_queue_number, q_tx_config);
208*e9271821SNishikant Nayak 	WRITE_CSR_RING_CONFIG_GEN_LCEVF(qp->mmap_bar_addr, q_rx->hw_bundle_number,
209*e9271821SNishikant Nayak 			q_rx->hw_queue_number, q_resp_config);
210*e9271821SNishikant Nayak }
211*e9271821SNishikant Nayak 
212*e9271821SNishikant Nayak static void
qat_qp_csr_write_tail_gen_lce(struct qat_qp * qp,struct qat_queue * q)213*e9271821SNishikant Nayak qat_qp_csr_write_tail_gen_lce(struct qat_qp *qp, struct qat_queue *q)
214*e9271821SNishikant Nayak {
215*e9271821SNishikant Nayak 	WRITE_CSR_RING_TAIL_GEN_LCEVF(qp->mmap_bar_addr, q->hw_bundle_number,
216*e9271821SNishikant Nayak 				   q->hw_queue_number, q->tail);
217*e9271821SNishikant Nayak }
218*e9271821SNishikant Nayak 
219*e9271821SNishikant Nayak static void
qat_qp_csr_write_head_gen_lce(struct qat_qp * qp,struct qat_queue * q,uint32_t new_head)220*e9271821SNishikant Nayak qat_qp_csr_write_head_gen_lce(struct qat_qp *qp, struct qat_queue *q, uint32_t new_head)
221*e9271821SNishikant Nayak {
222*e9271821SNishikant Nayak 	WRITE_CSR_RING_HEAD_GEN_LCEVF(qp->mmap_bar_addr, q->hw_bundle_number,
223*e9271821SNishikant Nayak 				   q->hw_queue_number, new_head);
224*e9271821SNishikant Nayak }
225*e9271821SNishikant Nayak 
226*e9271821SNishikant Nayak static void
qat_qp_csr_setup_gen_lce(struct qat_pci_device * qat_dev,void * io_addr,struct qat_qp * qp)227*e9271821SNishikant Nayak qat_qp_csr_setup_gen_lce(struct qat_pci_device *qat_dev, void *io_addr, struct qat_qp *qp)
228*e9271821SNishikant Nayak {
229*e9271821SNishikant Nayak 	qat_qp_build_ring_base_gen_lce(io_addr, &qp->tx_q);
230*e9271821SNishikant Nayak 	qat_qp_build_ring_base_gen_lce(io_addr, &qp->rx_q);
231*e9271821SNishikant Nayak 	qat_qp_adf_configure_queues_gen_lce(qp);
232*e9271821SNishikant Nayak 	qat_qp_adf_arb_enable_gen_lce(&qp->tx_q, qp->mmap_bar_addr, &qat_dev->arb_csr_lock);
233*e9271821SNishikant Nayak }
234*e9271821SNishikant Nayak 
235*e9271821SNishikant Nayak static struct qat_qp_hw_spec_funcs qat_qp_hw_spec_gen_lce = {
236*e9271821SNishikant Nayak 	.qat_qp_rings_per_service = qat_qp_rings_per_service_gen_lce,
237*e9271821SNishikant Nayak 	.qat_qp_build_ring_base = qat_qp_build_ring_base_gen_lce,
238*e9271821SNishikant Nayak 	.qat_qp_adf_arb_enable = qat_qp_adf_arb_enable_gen_lce,
239*e9271821SNishikant Nayak 	.qat_qp_adf_arb_disable = qat_qp_adf_arb_disable_gen_lce,
240*e9271821SNishikant Nayak 	.qat_qp_adf_configure_queues = qat_qp_adf_configure_queues_gen_lce,
241*e9271821SNishikant Nayak 	.qat_qp_csr_write_tail = qat_qp_csr_write_tail_gen_lce,
242*e9271821SNishikant Nayak 	.qat_qp_csr_write_head = qat_qp_csr_write_head_gen_lce,
243*e9271821SNishikant Nayak 	.qat_qp_csr_setup = qat_qp_csr_setup_gen_lce,
244*e9271821SNishikant Nayak 	.qat_qp_get_hw_data = qat_qp_get_hw_data_gen_lce,
245*e9271821SNishikant Nayak };
246*e9271821SNishikant Nayak 
247*e9271821SNishikant Nayak static int
qat_reset_ring_pairs_gen_lce(struct qat_pci_device * qat_pci_dev __rte_unused)248*e9271821SNishikant Nayak qat_reset_ring_pairs_gen_lce(struct qat_pci_device *qat_pci_dev __rte_unused)
249*e9271821SNishikant Nayak {
250*e9271821SNishikant Nayak 	return 0;
251*e9271821SNishikant Nayak }
252*e9271821SNishikant Nayak 
253*e9271821SNishikant Nayak static const struct rte_mem_resource*
qat_dev_get_transport_bar_gen_lce(struct rte_pci_device * pci_dev)254*e9271821SNishikant Nayak qat_dev_get_transport_bar_gen_lce(struct rte_pci_device *pci_dev)
255*e9271821SNishikant Nayak {
256*e9271821SNishikant Nayak 	return &pci_dev->mem_resource[0];
257*e9271821SNishikant Nayak }
258*e9271821SNishikant Nayak 
259*e9271821SNishikant Nayak static int
qat_dev_get_misc_bar_gen_lce(struct rte_mem_resource ** mem_resource,struct rte_pci_device * pci_dev)260*e9271821SNishikant Nayak qat_dev_get_misc_bar_gen_lce(struct rte_mem_resource **mem_resource,
261*e9271821SNishikant Nayak 			  struct rte_pci_device *pci_dev)
262*e9271821SNishikant Nayak {
263*e9271821SNishikant Nayak 	*mem_resource = &pci_dev->mem_resource[2];
264*e9271821SNishikant Nayak 	return 0;
265*e9271821SNishikant Nayak }
266*e9271821SNishikant Nayak 
267*e9271821SNishikant Nayak static int
qat_dev_get_extra_size_gen_lce(void)268*e9271821SNishikant Nayak qat_dev_get_extra_size_gen_lce(void)
269*e9271821SNishikant Nayak {
270*e9271821SNishikant Nayak 	return sizeof(struct qat_dev_gen_lce_extra);
271*e9271821SNishikant Nayak }
272*e9271821SNishikant Nayak 
273*e9271821SNishikant Nayak static int
qat_dev_get_slice_map_gen_lce(uint32_t * map __rte_unused,const struct rte_pci_device * pci_dev __rte_unused)274*e9271821SNishikant Nayak qat_dev_get_slice_map_gen_lce(uint32_t *map __rte_unused,
275*e9271821SNishikant Nayak 	const struct rte_pci_device *pci_dev __rte_unused)
276*e9271821SNishikant Nayak {
277*e9271821SNishikant Nayak 	return 0;
278*e9271821SNishikant Nayak }
279*e9271821SNishikant Nayak 
280*e9271821SNishikant Nayak static struct qat_dev_hw_spec_funcs qat_dev_hw_spec_gen_lce = {
281*e9271821SNishikant Nayak 	.qat_dev_reset_ring_pairs = qat_reset_ring_pairs_gen_lce,
282*e9271821SNishikant Nayak 	.qat_dev_get_transport_bar = qat_dev_get_transport_bar_gen_lce,
283*e9271821SNishikant Nayak 	.qat_dev_get_misc_bar = qat_dev_get_misc_bar_gen_lce,
284*e9271821SNishikant Nayak 	.qat_dev_read_config = qat_dev_read_config_gen_lce,
285*e9271821SNishikant Nayak 	.qat_dev_get_extra_size = qat_dev_get_extra_size_gen_lce,
286*e9271821SNishikant Nayak 	.qat_dev_get_slice_map = qat_dev_get_slice_map_gen_lce,
287*e9271821SNishikant Nayak };
288*e9271821SNishikant Nayak 
RTE_INIT(qat_dev_gen_lce_init)289*e9271821SNishikant Nayak RTE_INIT(qat_dev_gen_lce_init)
290*e9271821SNishikant Nayak {
291*e9271821SNishikant Nayak 	qat_qp_hw_spec[QAT_GEN_LCE] = &qat_qp_hw_spec_gen_lce;
292*e9271821SNishikant Nayak 	qat_dev_hw_spec[QAT_GEN_LCE] = &qat_dev_hw_spec_gen_lce;
293*e9271821SNishikant Nayak 	qat_gen_config[QAT_GEN_LCE].dev_gen = QAT_GEN_LCE;
294*e9271821SNishikant Nayak 	qat_gen_config[QAT_GEN_LCE].pf2vf_dev = &qat_pf2vf_gen_lce;
295*e9271821SNishikant Nayak }
296