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