xref: /dpdk/drivers/compress/qat/qat_comp.h (revision e77506397fc8005c5129e22e9e2d15d5876790fd)
17a34c215SFiona Trahe /* SPDX-License-Identifier: BSD-3-Clause
235233274STomasz Jozwiak  * Copyright(c) 2015-2019 Intel Corporation
37a34c215SFiona Trahe  */
47a34c215SFiona Trahe 
57a34c215SFiona Trahe #ifndef _QAT_COMP_H_
67a34c215SFiona Trahe #define _QAT_COMP_H_
77a34c215SFiona Trahe 
8a8d0d473SBruce Richardson #ifdef RTE_LIB_COMPRESSDEV
97a34c215SFiona Trahe 
107a34c215SFiona Trahe #include <rte_compressdev.h>
117a34c215SFiona Trahe #include <rte_compressdev_pmd.h>
127a34c215SFiona Trahe 
1332842f2aSFiona Trahe #include "qat_common.h"
14c13cecf6SAdam Dybkowski #include "qat_qp.h"
156a7ea148SFiona Trahe #include "icp_qat_hw.h"
166a7ea148SFiona Trahe #include "icp_qat_fw_comp.h"
176a7ea148SFiona Trahe #include "icp_qat_fw_la.h"
186a7ea148SFiona Trahe 
19a124830aSFiona Trahe #define QAT_64_BYTE_ALIGN_MASK (~0x3f)
20a124830aSFiona Trahe #define QAT_64_BYTE_ALIGN (64)
21a124830aSFiona Trahe #define QAT_NUM_BUFS_IN_IM_SGL 1
22a124830aSFiona Trahe 
233cc14fc4SFiona Trahe #define ERR_CODE_QAT_COMP_WRONG_FW -99
243cc14fc4SFiona Trahe 
25a720e674STomasz Jozwiak /* fallback to fixed compression threshold */
26c13cecf6SAdam Dybkowski #define QAT_FALLBACK_THLD ((uint32_t)(RTE_PMD_QAT_COMP_IM_BUFFER_SIZE / 1.3))
27a720e674STomasz Jozwiak 
28b643808fSTomasz Jozwiak #define QAT_MIN_OUT_BUF_SIZE 46
29b643808fSTomasz Jozwiak 
3082822753SAdam Dybkowski /* maximum size of the state registers */
314c6912d3SFan Zhang #define QAT_STATE_REGISTERS_MAX_SIZE 256 /* 64 bytes for GEN1-3, 256 for GEN4 */
3282822753SAdam Dybkowski 
3382822753SAdam Dybkowski /* decompressor context size */
3482822753SAdam Dybkowski #define QAT_INFLATE_CONTEXT_SIZE_GEN1 36864
3582822753SAdam Dybkowski #define QAT_INFLATE_CONTEXT_SIZE_GEN2 34032
3682822753SAdam Dybkowski #define QAT_INFLATE_CONTEXT_SIZE_GEN3 34032
374c6912d3SFan Zhang #define QAT_INFLATE_CONTEXT_SIZE_GEN4 36864
384c6912d3SFan Zhang #define QAT_INFLATE_CONTEXT_SIZE RTE_MAX(RTE_MAX(RTE_MAX(\
394c6912d3SFan Zhang 		QAT_INFLATE_CONTEXT_SIZE_GEN1, QAT_INFLATE_CONTEXT_SIZE_GEN2), \
404c6912d3SFan Zhang 		QAT_INFLATE_CONTEXT_SIZE_GEN3), QAT_INFLATE_CONTEXT_SIZE_GEN4)
4182822753SAdam Dybkowski 
426a7ea148SFiona Trahe enum qat_comp_request_type {
436a7ea148SFiona Trahe 	QAT_COMP_REQUEST_FIXED_COMP_STATELESS,
446a7ea148SFiona Trahe 	QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS,
456a7ea148SFiona Trahe 	QAT_COMP_REQUEST_DECOMPRESS,
466a7ea148SFiona Trahe 	REQ_COMP_END
476a7ea148SFiona Trahe };
486a7ea148SFiona Trahe 
49a124830aSFiona Trahe struct array_of_ptrs {
50a124830aSFiona Trahe 	phys_addr_t pointer[0];
51a124830aSFiona Trahe };
52a124830aSFiona Trahe 
53*e7750639SAndre Muezerie struct __rte_cache_aligned __rte_packed_begin qat_inter_sgl {
54a124830aSFiona Trahe 	qat_sgl_hdr;
55a124830aSFiona Trahe 	struct qat_flat_buf buffers[QAT_NUM_BUFS_IN_IM_SGL];
56*e7750639SAndre Muezerie } __rte_packed_end;
57a124830aSFiona Trahe 
581947bd18SFiona Trahe 
59be8343b0SFiona Trahe struct qat_comp_op_cookie {
601947bd18SFiona Trahe 	phys_addr_t qat_sgl_src_phys_addr;
611947bd18SFiona Trahe 	phys_addr_t qat_sgl_dst_phys_addr;
6235233274STomasz Jozwiak 	/* dynamically created SGLs */
63b643808fSTomasz Jozwiak 	uint8_t error;
6435233274STomasz Jozwiak 	uint8_t socket_id;
6535233274STomasz Jozwiak 	uint16_t src_nb_elems;
6635233274STomasz Jozwiak 	uint16_t dst_nb_elems;
6735233274STomasz Jozwiak 	struct qat_sgl *qat_sgl_src_d;
6835233274STomasz Jozwiak 	struct qat_sgl *qat_sgl_dst_d;
69c13cecf6SAdam Dybkowski 	struct qat_qp *qp;
70c13cecf6SAdam Dybkowski 	uint32_t cookie_index;
71c13cecf6SAdam Dybkowski 
72c13cecf6SAdam Dybkowski 	/* QAT IM buffer too small handling: */
73c13cecf6SAdam Dybkowski 	uint8_t split_op;
74c13cecf6SAdam Dybkowski 	uint8_t nb_children;
75c13cecf6SAdam Dybkowski 
76c13cecf6SAdam Dybkowski 	/* used by the parent only */
77c13cecf6SAdam Dybkowski 	uint8_t nb_child_responses;
78c13cecf6SAdam Dybkowski 	uint32_t total_consumed;
79c13cecf6SAdam Dybkowski 	uint32_t total_produced;
80c13cecf6SAdam Dybkowski 	const struct rte_memzone **dst_memzones;
81c13cecf6SAdam Dybkowski 	struct rte_mbuf *dst_data;
82c13cecf6SAdam Dybkowski 	uint32_t dst_data_offset;
83c13cecf6SAdam Dybkowski 
84c13cecf6SAdam Dybkowski 	/* used by the child only */
85c13cecf6SAdam Dybkowski 	struct qat_comp_op_cookie *parent_cookie;
86c13cecf6SAdam Dybkowski 	void *dest_buffer;
87be8343b0SFiona Trahe };
886a7ea148SFiona Trahe 
896a7ea148SFiona Trahe struct qat_comp_xform {
906a7ea148SFiona Trahe 	struct icp_qat_fw_comp_req qat_comp_req_tmpl;
916a7ea148SFiona Trahe 	enum qat_comp_request_type qat_comp_request_type;
926a7ea148SFiona Trahe 	enum rte_comp_checksum_type checksum_type;
936a7ea148SFiona Trahe };
946a7ea148SFiona Trahe 
9582822753SAdam Dybkowski struct qat_comp_stream {
9682822753SAdam Dybkowski 	struct qat_comp_xform qat_xform;
9782822753SAdam Dybkowski 	void *state_registers_decomp;
9882822753SAdam Dybkowski 	phys_addr_t state_registers_decomp_phys;
9982822753SAdam Dybkowski 	void *inflate_context;
10082822753SAdam Dybkowski 	phys_addr_t inflate_context_phys;
10182822753SAdam Dybkowski 	const struct rte_memzone *memzone;
10282822753SAdam Dybkowski 	uint8_t start_of_packet;
10382822753SAdam Dybkowski 	volatile uint8_t op_in_progress;
10482822753SAdam Dybkowski };
10582822753SAdam Dybkowski 
10632842f2aSFiona Trahe int
10732842f2aSFiona Trahe qat_comp_build_request(void *in_op, uint8_t *out_msg, void *op_cookie,
10832842f2aSFiona Trahe 		       enum qat_device_gen qat_dev_gen __rte_unused);
10932842f2aSFiona Trahe 
11032842f2aSFiona Trahe int
111c13cecf6SAdam Dybkowski qat_comp_build_multiple_requests(void *in_op, struct qat_qp *qp,
112c13cecf6SAdam Dybkowski 				 uint32_t parent_tail, int nb_descr);
113c13cecf6SAdam Dybkowski 
114c13cecf6SAdam Dybkowski void
115c13cecf6SAdam Dybkowski qat_comp_free_split_op_memzones(struct qat_comp_op_cookie *cookie,
116c13cecf6SAdam Dybkowski 				unsigned int nb_children);
117c13cecf6SAdam Dybkowski 
118c13cecf6SAdam Dybkowski int
119b643808fSTomasz Jozwiak qat_comp_process_response(void **op, uint8_t *resp, void *op_cookie,
120ba83e5c0STomasz Jozwiak 			  uint64_t *dequeue_err_count);
1216a7ea148SFiona Trahe 
1226a7ea148SFiona Trahe int
1236a7ea148SFiona Trahe qat_comp_private_xform_create(struct rte_compressdev *dev,
1246a7ea148SFiona Trahe 			      const struct rte_comp_xform *xform,
1256a7ea148SFiona Trahe 			      void **private_xform);
1266a7ea148SFiona Trahe 
1276a7ea148SFiona Trahe int
1286a7ea148SFiona Trahe qat_comp_private_xform_free(struct rte_compressdev *dev, void *private_xform);
1296a7ea148SFiona Trahe 
1306a7ea148SFiona Trahe unsigned int
1316a7ea148SFiona Trahe qat_comp_xform_size(void);
1326a7ea148SFiona Trahe 
13382822753SAdam Dybkowski unsigned int
13482822753SAdam Dybkowski qat_comp_stream_size(void);
13582822753SAdam Dybkowski 
13682822753SAdam Dybkowski int
13782822753SAdam Dybkowski qat_comp_stream_create(struct rte_compressdev *dev,
13882822753SAdam Dybkowski 		       const struct rte_comp_xform *xform,
13982822753SAdam Dybkowski 		       void **stream);
14082822753SAdam Dybkowski 
14182822753SAdam Dybkowski int
14282822753SAdam Dybkowski qat_comp_stream_free(struct rte_compressdev *dev, void *stream);
14382822753SAdam Dybkowski 
1447cb939f6SVikash Poddar uint16_t
1457cb939f6SVikash Poddar qat_enqueue_comp_op_burst(void *qp, void **ops, uint16_t nb_ops);
1467cb939f6SVikash Poddar 
1477a34c215SFiona Trahe #endif
1487a34c215SFiona Trahe #endif
149