1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2015-2019 Intel Corporation 3 */ 4 5 #ifndef _QAT_COMP_H_ 6 #define _QAT_COMP_H_ 7 8 #ifdef RTE_LIB_COMPRESSDEV 9 10 #include <rte_compressdev.h> 11 #include <rte_compressdev_pmd.h> 12 13 #include "qat_common.h" 14 #include "qat_qp.h" 15 #include "icp_qat_hw.h" 16 #include "icp_qat_fw_comp.h" 17 #include "icp_qat_fw_la.h" 18 19 #define QAT_64_BYTE_ALIGN_MASK (~0x3f) 20 #define QAT_64_BYTE_ALIGN (64) 21 #define QAT_NUM_BUFS_IN_IM_SGL 1 22 23 #define ERR_CODE_QAT_COMP_WRONG_FW -99 24 25 /* fallback to fixed compression threshold */ 26 #define QAT_FALLBACK_THLD ((uint32_t)(RTE_PMD_QAT_COMP_IM_BUFFER_SIZE / 1.3)) 27 28 #define QAT_MIN_OUT_BUF_SIZE 46 29 30 /* maximum size of the state registers */ 31 #define QAT_STATE_REGISTERS_MAX_SIZE 64 32 33 /* decompressor context size */ 34 #define QAT_INFLATE_CONTEXT_SIZE_GEN1 36864 35 #define QAT_INFLATE_CONTEXT_SIZE_GEN2 34032 36 #define QAT_INFLATE_CONTEXT_SIZE_GEN3 34032 37 #define QAT_INFLATE_CONTEXT_SIZE RTE_MAX(RTE_MAX(QAT_INFLATE_CONTEXT_SIZE_GEN1,\ 38 QAT_INFLATE_CONTEXT_SIZE_GEN2), QAT_INFLATE_CONTEXT_SIZE_GEN3) 39 40 enum qat_comp_request_type { 41 QAT_COMP_REQUEST_FIXED_COMP_STATELESS, 42 QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS, 43 QAT_COMP_REQUEST_DECOMPRESS, 44 REQ_COMP_END 45 }; 46 47 struct array_of_ptrs { 48 phys_addr_t pointer[0]; 49 }; 50 51 struct qat_inter_sgl { 52 qat_sgl_hdr; 53 struct qat_flat_buf buffers[QAT_NUM_BUFS_IN_IM_SGL]; 54 } __rte_packed __rte_cache_aligned; 55 56 57 struct qat_comp_op_cookie { 58 phys_addr_t qat_sgl_src_phys_addr; 59 phys_addr_t qat_sgl_dst_phys_addr; 60 /* dynamically created SGLs */ 61 uint8_t error; 62 uint8_t socket_id; 63 uint16_t src_nb_elems; 64 uint16_t dst_nb_elems; 65 struct qat_sgl *qat_sgl_src_d; 66 struct qat_sgl *qat_sgl_dst_d; 67 struct qat_qp *qp; 68 uint32_t cookie_index; 69 70 /* QAT IM buffer too small handling: */ 71 uint8_t split_op; 72 uint8_t nb_children; 73 74 /* used by the parent only */ 75 uint8_t nb_child_responses; 76 uint32_t total_consumed; 77 uint32_t total_produced; 78 const struct rte_memzone **dst_memzones; 79 struct rte_mbuf *dst_data; 80 uint32_t dst_data_offset; 81 82 /* used by the child only */ 83 struct qat_comp_op_cookie *parent_cookie; 84 void *dest_buffer; 85 }; 86 87 struct qat_comp_xform { 88 struct icp_qat_fw_comp_req qat_comp_req_tmpl; 89 enum qat_comp_request_type qat_comp_request_type; 90 enum rte_comp_checksum_type checksum_type; 91 }; 92 93 struct qat_comp_stream { 94 struct qat_comp_xform qat_xform; 95 void *state_registers_decomp; 96 phys_addr_t state_registers_decomp_phys; 97 void *inflate_context; 98 phys_addr_t inflate_context_phys; 99 const struct rte_memzone *memzone; 100 uint8_t start_of_packet; 101 volatile uint8_t op_in_progress; 102 }; 103 104 int 105 qat_comp_build_request(void *in_op, uint8_t *out_msg, void *op_cookie, 106 enum qat_device_gen qat_dev_gen __rte_unused); 107 108 int 109 qat_comp_build_multiple_requests(void *in_op, struct qat_qp *qp, 110 uint32_t parent_tail, int nb_descr); 111 112 void 113 qat_comp_free_split_op_memzones(struct qat_comp_op_cookie *cookie, 114 unsigned int nb_children); 115 116 int 117 qat_comp_process_response(void **op, uint8_t *resp, void *op_cookie, 118 uint64_t *dequeue_err_count); 119 120 int 121 qat_comp_private_xform_create(struct rte_compressdev *dev, 122 const struct rte_comp_xform *xform, 123 void **private_xform); 124 125 int 126 qat_comp_private_xform_free(struct rte_compressdev *dev, void *private_xform); 127 128 unsigned int 129 qat_comp_xform_size(void); 130 131 unsigned int 132 qat_comp_stream_size(void); 133 134 int 135 qat_comp_stream_create(struct rte_compressdev *dev, 136 const struct rte_comp_xform *xform, 137 void **stream); 138 139 int 140 qat_comp_stream_free(struct rte_compressdev *dev, void *stream); 141 142 #endif 143 #endif 144