1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2021 Intel Corporation
5 #include <rte_compressdev.h>
6 #include <rte_compressdev_pmd.h>
8 #include "qat_comp_pmd.h"
10 #include "qat_comp_pmd_gens.h"
12 #define QAT_NUM_INTERM_BUFS_GEN1 12
14 const struct rte_compressdev_capabilities qat_gen1_comp_capabilities[] = {
15 {/* COMPRESSION - deflate */
16 .algo = RTE_COMP_ALGO_DEFLATE,
17 .comp_feature_flags = RTE_COMP_FF_MULTI_PKT_CHECKSUM |
18 RTE_COMP_FF_CRC32_CHECKSUM |
19 RTE_COMP_FF_ADLER32_CHECKSUM |
20 RTE_COMP_FF_CRC32_ADLER32_CHECKSUM |
21 RTE_COMP_FF_SHAREABLE_PRIV_XFORM |
22 RTE_COMP_FF_HUFFMAN_FIXED |
23 RTE_COMP_FF_HUFFMAN_DYNAMIC |
24 RTE_COMP_FF_OOP_SGL_IN_SGL_OUT |
25 RTE_COMP_FF_OOP_SGL_IN_LB_OUT |
26 RTE_COMP_FF_OOP_LB_IN_SGL_OUT |
27 RTE_COMP_FF_STATEFUL_DECOMPRESSION,
28 .window_size = {.min = 15, .max = 15, .increment = 0} },
29 {RTE_COMP_ALGO_LIST_END, 0, {0, 0, 0} } };
32 qat_comp_dev_config_gen1(struct rte_compressdev *dev,
33 struct rte_compressdev_config *config)
35 struct qat_comp_dev_private *comp_dev = dev->data->dev_private;
37 if (RTE_PMD_QAT_COMP_IM_BUFFER_SIZE == 0) {
39 "RTE_PMD_QAT_COMP_IM_BUFFER_SIZE = 0 in config file, so"
40 " QAT device can't be used for Dynamic Deflate.");
42 comp_dev->interm_buff_mz =
43 qat_comp_setup_inter_buffers(comp_dev,
44 RTE_PMD_QAT_COMP_IM_BUFFER_SIZE);
45 if (comp_dev->interm_buff_mz == NULL)
49 return qat_comp_dev_config(dev, config);
52 struct rte_compressdev_ops qat_comp_ops_gen1 = {
54 /* Device related operations */
55 .dev_configure = qat_comp_dev_config_gen1,
56 .dev_start = qat_comp_dev_start,
57 .dev_stop = qat_comp_dev_stop,
58 .dev_close = qat_comp_dev_close,
59 .dev_infos_get = qat_comp_dev_info_get,
61 .stats_get = qat_comp_stats_get,
62 .stats_reset = qat_comp_stats_reset,
63 .queue_pair_setup = qat_comp_qp_setup,
64 .queue_pair_release = qat_comp_qp_release,
66 /* Compression related operations */
67 .private_xform_create = qat_comp_private_xform_create,
68 .private_xform_free = qat_comp_private_xform_free,
69 .stream_create = qat_comp_stream_create,
70 .stream_free = qat_comp_stream_free
73 struct qat_comp_capabilities_info
74 qat_comp_cap_get_gen1(struct qat_pci_device *qat_dev __rte_unused)
76 struct qat_comp_capabilities_info capa_info = {
77 .data = qat_gen1_comp_capabilities,
78 .size = sizeof(qat_gen1_comp_capabilities)
84 qat_comp_get_ram_bank_flags_gen1(void)
86 /* Enable A, B, C, D, and E (CAMs). */
87 return ICP_QAT_FW_COMP_RAM_FLAGS_BUILD(
88 ICP_QAT_FW_COMP_BANK_DISABLED, /* Bank I */
89 ICP_QAT_FW_COMP_BANK_DISABLED, /* Bank H */
90 ICP_QAT_FW_COMP_BANK_DISABLED, /* Bank G */
91 ICP_QAT_FW_COMP_BANK_DISABLED, /* Bank F */
92 ICP_QAT_FW_COMP_BANK_ENABLED, /* Bank E */
93 ICP_QAT_FW_COMP_BANK_ENABLED, /* Bank D */
94 ICP_QAT_FW_COMP_BANK_ENABLED, /* Bank C */
95 ICP_QAT_FW_COMP_BANK_ENABLED, /* Bank B */
96 ICP_QAT_FW_COMP_BANK_ENABLED); /* Bank A */
100 qat_comp_set_slice_cfg_word_gen1(struct qat_comp_xform *qat_xform,
101 const struct rte_comp_xform *xform,
102 __rte_unused enum rte_comp_op_type op_type,
103 uint32_t *comp_slice_cfg_word)
105 unsigned int algo, comp_level, direction;
107 if (xform->compress.algo == RTE_COMP_ALGO_DEFLATE)
108 algo = ICP_QAT_HW_COMPRESSION_ALGO_DEFLATE;
110 QAT_LOG(ERR, "compression algorithm not supported");
114 if (qat_xform->qat_comp_request_type == QAT_COMP_REQUEST_DECOMPRESS) {
115 direction = ICP_QAT_HW_COMPRESSION_DIR_DECOMPRESS;
116 comp_level = ICP_QAT_HW_COMPRESSION_DEPTH_8;
118 direction = ICP_QAT_HW_COMPRESSION_DIR_COMPRESS;
120 if (xform->compress.level == RTE_COMP_LEVEL_PMD_DEFAULT)
121 comp_level = ICP_QAT_HW_COMPRESSION_DEPTH_8;
122 else if (xform->compress.level == 1)
123 comp_level = ICP_QAT_HW_COMPRESSION_DEPTH_1;
124 else if (xform->compress.level == 2)
125 comp_level = ICP_QAT_HW_COMPRESSION_DEPTH_4;
126 else if (xform->compress.level == 3)
127 comp_level = ICP_QAT_HW_COMPRESSION_DEPTH_8;
128 else if (xform->compress.level >= 4 &&
129 xform->compress.level <= 9)
130 comp_level = ICP_QAT_HW_COMPRESSION_DEPTH_16;
132 QAT_LOG(ERR, "compression level not supported");
137 comp_slice_cfg_word[0] =
138 ICP_QAT_HW_COMPRESSION_CONFIG_BUILD(
140 /* In CPM 1.6 only valid mode ! */
141 ICP_QAT_HW_COMPRESSION_DELAYED_MATCH_ENABLED,
143 /* Translate level to depth */
145 ICP_QAT_HW_COMPRESSION_FILE_TYPE_0);
151 qat_comp_get_num_im_bufs_required_gen1(void)
153 return QAT_NUM_INTERM_BUFS_GEN1;
157 qat_comp_get_features_gen1(void)
159 return RTE_COMPDEV_FF_HW_ACCELERATED;
162 RTE_INIT(qat_comp_pmd_gen1_init)
164 qat_comp_gen_dev_ops[QAT_GEN1].compressdev_ops =
166 qat_comp_gen_dev_ops[QAT_GEN1].qat_comp_get_capabilities =
167 qat_comp_cap_get_gen1;
168 qat_comp_gen_dev_ops[QAT_GEN1].qat_comp_get_num_im_bufs_required =
169 qat_comp_get_num_im_bufs_required_gen1;
170 qat_comp_gen_dev_ops[QAT_GEN1].qat_comp_get_ram_bank_flags =
171 qat_comp_get_ram_bank_flags_gen1;
172 qat_comp_gen_dev_ops[QAT_GEN1].qat_comp_set_slice_cfg_word =
173 qat_comp_set_slice_cfg_word_gen1;
174 qat_comp_gen_dev_ops[QAT_GEN1].qat_comp_get_feature_flags =
175 qat_comp_get_features_gen1;