1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606 * Copyright(c) 2017-2018 Intel Corporation
3d30ea906Sjfb8856606 */
4d30ea906Sjfb8856606
5d30ea906Sjfb8856606 #include <string.h>
6d30ea906Sjfb8856606 #include <stdarg.h>
7d30ea906Sjfb8856606 #include <stdio.h>
8d30ea906Sjfb8856606 #include <inttypes.h>
9d30ea906Sjfb8856606
104418919fSjohnjiang #include <rte_string_fns.h>
11d30ea906Sjfb8856606 #include <rte_malloc.h>
12d30ea906Sjfb8856606 #include <rte_eal.h>
13d30ea906Sjfb8856606 #include <rte_memzone.h>
14d30ea906Sjfb8856606
15d30ea906Sjfb8856606 #include "rte_compressdev.h"
16d30ea906Sjfb8856606 #include "rte_compressdev_internal.h"
17d30ea906Sjfb8856606 #include "rte_compressdev_pmd.h"
18d30ea906Sjfb8856606
19d30ea906Sjfb8856606 #define RTE_COMPRESSDEV_DETACHED (0)
20d30ea906Sjfb8856606 #define RTE_COMPRESSDEV_ATTACHED (1)
21d30ea906Sjfb8856606
22d30ea906Sjfb8856606 static struct rte_compressdev rte_comp_devices[RTE_COMPRESS_MAX_DEVS];
23d30ea906Sjfb8856606
24d30ea906Sjfb8856606 static struct rte_compressdev_global compressdev_globals = {
25d30ea906Sjfb8856606 .devs = rte_comp_devices,
26d30ea906Sjfb8856606 .data = { NULL },
27d30ea906Sjfb8856606 .nb_devs = 0,
28d30ea906Sjfb8856606 .max_devs = RTE_COMPRESS_MAX_DEVS
29d30ea906Sjfb8856606 };
30d30ea906Sjfb8856606
314418919fSjohnjiang const struct rte_compressdev_capabilities *
rte_compressdev_capability_get(uint8_t dev_id,enum rte_comp_algorithm algo)32d30ea906Sjfb8856606 rte_compressdev_capability_get(uint8_t dev_id,
33d30ea906Sjfb8856606 enum rte_comp_algorithm algo)
34d30ea906Sjfb8856606 {
35d30ea906Sjfb8856606 const struct rte_compressdev_capabilities *capability;
36d30ea906Sjfb8856606 struct rte_compressdev_info dev_info;
37d30ea906Sjfb8856606 int i = 0;
38d30ea906Sjfb8856606
39d30ea906Sjfb8856606 if (dev_id >= compressdev_globals.nb_devs) {
40d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%d", dev_id);
41d30ea906Sjfb8856606 return NULL;
42d30ea906Sjfb8856606 }
43d30ea906Sjfb8856606 rte_compressdev_info_get(dev_id, &dev_info);
44d30ea906Sjfb8856606
45d30ea906Sjfb8856606 while ((capability = &dev_info.capabilities[i++])->algo !=
46d30ea906Sjfb8856606 RTE_COMP_ALGO_UNSPECIFIED){
47d30ea906Sjfb8856606 if (capability->algo == algo)
48d30ea906Sjfb8856606 return capability;
49d30ea906Sjfb8856606 }
50d30ea906Sjfb8856606
51d30ea906Sjfb8856606 return NULL;
52d30ea906Sjfb8856606 }
53d30ea906Sjfb8856606
544418919fSjohnjiang const char *
rte_compressdev_get_feature_name(uint64_t flag)55d30ea906Sjfb8856606 rte_compressdev_get_feature_name(uint64_t flag)
56d30ea906Sjfb8856606 {
57d30ea906Sjfb8856606 switch (flag) {
58d30ea906Sjfb8856606 case RTE_COMPDEV_FF_HW_ACCELERATED:
59d30ea906Sjfb8856606 return "HW_ACCELERATED";
60d30ea906Sjfb8856606 case RTE_COMPDEV_FF_CPU_SSE:
61d30ea906Sjfb8856606 return "CPU_SSE";
62d30ea906Sjfb8856606 case RTE_COMPDEV_FF_CPU_AVX:
63d30ea906Sjfb8856606 return "CPU_AVX";
64d30ea906Sjfb8856606 case RTE_COMPDEV_FF_CPU_AVX2:
65d30ea906Sjfb8856606 return "CPU_AVX2";
66d30ea906Sjfb8856606 case RTE_COMPDEV_FF_CPU_AVX512:
67d30ea906Sjfb8856606 return "CPU_AVX512";
68d30ea906Sjfb8856606 case RTE_COMPDEV_FF_CPU_NEON:
69d30ea906Sjfb8856606 return "CPU_NEON";
704418919fSjohnjiang case RTE_COMPDEV_FF_OP_DONE_IN_DEQUEUE:
714418919fSjohnjiang return "OP_DONE_IN_DEQ";
72d30ea906Sjfb8856606 default:
73d30ea906Sjfb8856606 return NULL;
74d30ea906Sjfb8856606 }
75d30ea906Sjfb8856606 }
76d30ea906Sjfb8856606
77d30ea906Sjfb8856606 static struct rte_compressdev *
rte_compressdev_get_dev(uint8_t dev_id)78d30ea906Sjfb8856606 rte_compressdev_get_dev(uint8_t dev_id)
79d30ea906Sjfb8856606 {
80d30ea906Sjfb8856606 return &compressdev_globals.devs[dev_id];
81d30ea906Sjfb8856606 }
82d30ea906Sjfb8856606
834418919fSjohnjiang struct rte_compressdev *
rte_compressdev_pmd_get_named_dev(const char * name)84d30ea906Sjfb8856606 rte_compressdev_pmd_get_named_dev(const char *name)
85d30ea906Sjfb8856606 {
86d30ea906Sjfb8856606 struct rte_compressdev *dev;
87d30ea906Sjfb8856606 unsigned int i;
88d30ea906Sjfb8856606
89d30ea906Sjfb8856606 if (name == NULL)
90d30ea906Sjfb8856606 return NULL;
91d30ea906Sjfb8856606
92d30ea906Sjfb8856606 for (i = 0; i < compressdev_globals.max_devs; i++) {
93d30ea906Sjfb8856606 dev = &compressdev_globals.devs[i];
94d30ea906Sjfb8856606
95d30ea906Sjfb8856606 if ((dev->attached == RTE_COMPRESSDEV_ATTACHED) &&
96d30ea906Sjfb8856606 (strcmp(dev->data->name, name) == 0))
97d30ea906Sjfb8856606 return dev;
98d30ea906Sjfb8856606 }
99d30ea906Sjfb8856606
100d30ea906Sjfb8856606 return NULL;
101d30ea906Sjfb8856606 }
102d30ea906Sjfb8856606
103d30ea906Sjfb8856606 static unsigned int
rte_compressdev_is_valid_dev(uint8_t dev_id)104d30ea906Sjfb8856606 rte_compressdev_is_valid_dev(uint8_t dev_id)
105d30ea906Sjfb8856606 {
106d30ea906Sjfb8856606 struct rte_compressdev *dev = NULL;
107d30ea906Sjfb8856606
108d30ea906Sjfb8856606 if (dev_id >= compressdev_globals.nb_devs)
109d30ea906Sjfb8856606 return 0;
110d30ea906Sjfb8856606
111d30ea906Sjfb8856606 dev = rte_compressdev_get_dev(dev_id);
112d30ea906Sjfb8856606 if (dev->attached != RTE_COMPRESSDEV_ATTACHED)
113d30ea906Sjfb8856606 return 0;
114d30ea906Sjfb8856606 else
115d30ea906Sjfb8856606 return 1;
116d30ea906Sjfb8856606 }
117d30ea906Sjfb8856606
118d30ea906Sjfb8856606
1194418919fSjohnjiang int
rte_compressdev_get_dev_id(const char * name)120d30ea906Sjfb8856606 rte_compressdev_get_dev_id(const char *name)
121d30ea906Sjfb8856606 {
122d30ea906Sjfb8856606 unsigned int i;
123d30ea906Sjfb8856606
124d30ea906Sjfb8856606 if (name == NULL)
125d30ea906Sjfb8856606 return -1;
126d30ea906Sjfb8856606
127d30ea906Sjfb8856606 for (i = 0; i < compressdev_globals.nb_devs; i++)
128d30ea906Sjfb8856606 if ((strcmp(compressdev_globals.devs[i].data->name, name)
129d30ea906Sjfb8856606 == 0) &&
130d30ea906Sjfb8856606 (compressdev_globals.devs[i].attached ==
131d30ea906Sjfb8856606 RTE_COMPRESSDEV_ATTACHED))
132d30ea906Sjfb8856606 return i;
133d30ea906Sjfb8856606
134d30ea906Sjfb8856606 return -1;
135d30ea906Sjfb8856606 }
136d30ea906Sjfb8856606
1374418919fSjohnjiang uint8_t
rte_compressdev_count(void)138d30ea906Sjfb8856606 rte_compressdev_count(void)
139d30ea906Sjfb8856606 {
140d30ea906Sjfb8856606 return compressdev_globals.nb_devs;
141d30ea906Sjfb8856606 }
142d30ea906Sjfb8856606
1434418919fSjohnjiang uint8_t
rte_compressdev_devices_get(const char * driver_name,uint8_t * devices,uint8_t nb_devices)144d30ea906Sjfb8856606 rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
145d30ea906Sjfb8856606 uint8_t nb_devices)
146d30ea906Sjfb8856606 {
147d30ea906Sjfb8856606 uint8_t i, count = 0;
148d30ea906Sjfb8856606 struct rte_compressdev *devs = compressdev_globals.devs;
149d30ea906Sjfb8856606 uint8_t max_devs = compressdev_globals.max_devs;
150d30ea906Sjfb8856606
151d30ea906Sjfb8856606 for (i = 0; i < max_devs && count < nb_devices; i++) {
152d30ea906Sjfb8856606
153d30ea906Sjfb8856606 if (devs[i].attached == RTE_COMPRESSDEV_ATTACHED) {
154d30ea906Sjfb8856606 int cmp;
155d30ea906Sjfb8856606
156d30ea906Sjfb8856606 cmp = strncmp(devs[i].device->driver->name,
157d30ea906Sjfb8856606 driver_name,
158d30ea906Sjfb8856606 strlen(driver_name));
159d30ea906Sjfb8856606
160d30ea906Sjfb8856606 if (cmp == 0)
161d30ea906Sjfb8856606 devices[count++] = devs[i].data->dev_id;
162d30ea906Sjfb8856606 }
163d30ea906Sjfb8856606 }
164d30ea906Sjfb8856606
165d30ea906Sjfb8856606 return count;
166d30ea906Sjfb8856606 }
167d30ea906Sjfb8856606
1684418919fSjohnjiang int
rte_compressdev_socket_id(uint8_t dev_id)169d30ea906Sjfb8856606 rte_compressdev_socket_id(uint8_t dev_id)
170d30ea906Sjfb8856606 {
171d30ea906Sjfb8856606 struct rte_compressdev *dev;
172d30ea906Sjfb8856606
173d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id))
174d30ea906Sjfb8856606 return -1;
175d30ea906Sjfb8856606
176d30ea906Sjfb8856606 dev = rte_compressdev_get_dev(dev_id);
177d30ea906Sjfb8856606
178d30ea906Sjfb8856606 return dev->data->socket_id;
179d30ea906Sjfb8856606 }
180d30ea906Sjfb8856606
181d30ea906Sjfb8856606 static inline int
rte_compressdev_data_alloc(uint8_t dev_id,struct rte_compressdev_data ** data,int socket_id)182d30ea906Sjfb8856606 rte_compressdev_data_alloc(uint8_t dev_id, struct rte_compressdev_data **data,
183d30ea906Sjfb8856606 int socket_id)
184d30ea906Sjfb8856606 {
185d30ea906Sjfb8856606 char mz_name[RTE_COMPRESSDEV_NAME_MAX_LEN];
186d30ea906Sjfb8856606 const struct rte_memzone *mz;
187d30ea906Sjfb8856606 int n;
188d30ea906Sjfb8856606
189d30ea906Sjfb8856606 /* generate memzone name */
190d30ea906Sjfb8856606 n = snprintf(mz_name, sizeof(mz_name),
191d30ea906Sjfb8856606 "rte_compressdev_data_%u", dev_id);
192d30ea906Sjfb8856606 if (n >= (int)sizeof(mz_name))
193d30ea906Sjfb8856606 return -EINVAL;
194d30ea906Sjfb8856606
195d30ea906Sjfb8856606 if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
196d30ea906Sjfb8856606 mz = rte_memzone_reserve(mz_name,
197d30ea906Sjfb8856606 sizeof(struct rte_compressdev_data),
198d30ea906Sjfb8856606 socket_id, 0);
199d30ea906Sjfb8856606 } else
200d30ea906Sjfb8856606 mz = rte_memzone_lookup(mz_name);
201d30ea906Sjfb8856606
202d30ea906Sjfb8856606 if (mz == NULL)
203d30ea906Sjfb8856606 return -ENOMEM;
204d30ea906Sjfb8856606
205d30ea906Sjfb8856606 *data = mz->addr;
206d30ea906Sjfb8856606 if (rte_eal_process_type() == RTE_PROC_PRIMARY)
207d30ea906Sjfb8856606 memset(*data, 0, sizeof(struct rte_compressdev_data));
208d30ea906Sjfb8856606
209d30ea906Sjfb8856606 return 0;
210d30ea906Sjfb8856606 }
211d30ea906Sjfb8856606
212d30ea906Sjfb8856606 static uint8_t
rte_compressdev_find_free_device_index(void)213d30ea906Sjfb8856606 rte_compressdev_find_free_device_index(void)
214d30ea906Sjfb8856606 {
215d30ea906Sjfb8856606 uint8_t dev_id;
216d30ea906Sjfb8856606
217d30ea906Sjfb8856606 for (dev_id = 0; dev_id < RTE_COMPRESS_MAX_DEVS; dev_id++) {
218d30ea906Sjfb8856606 if (rte_comp_devices[dev_id].attached ==
219d30ea906Sjfb8856606 RTE_COMPRESSDEV_DETACHED)
220d30ea906Sjfb8856606 return dev_id;
221d30ea906Sjfb8856606 }
222d30ea906Sjfb8856606 return RTE_COMPRESS_MAX_DEVS;
223d30ea906Sjfb8856606 }
224d30ea906Sjfb8856606
2254418919fSjohnjiang struct rte_compressdev *
rte_compressdev_pmd_allocate(const char * name,int socket_id)226d30ea906Sjfb8856606 rte_compressdev_pmd_allocate(const char *name, int socket_id)
227d30ea906Sjfb8856606 {
228d30ea906Sjfb8856606 struct rte_compressdev *compressdev;
229d30ea906Sjfb8856606 uint8_t dev_id;
230d30ea906Sjfb8856606
231d30ea906Sjfb8856606 if (rte_compressdev_pmd_get_named_dev(name) != NULL) {
232d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
233d30ea906Sjfb8856606 "comp device with name %s already allocated!", name);
234d30ea906Sjfb8856606 return NULL;
235d30ea906Sjfb8856606 }
236d30ea906Sjfb8856606
237d30ea906Sjfb8856606 dev_id = rte_compressdev_find_free_device_index();
238d30ea906Sjfb8856606 if (dev_id == RTE_COMPRESS_MAX_DEVS) {
239d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Reached maximum number of comp devices");
240d30ea906Sjfb8856606 return NULL;
241d30ea906Sjfb8856606 }
242d30ea906Sjfb8856606 compressdev = rte_compressdev_get_dev(dev_id);
243d30ea906Sjfb8856606
244d30ea906Sjfb8856606 if (compressdev->data == NULL) {
245d30ea906Sjfb8856606 struct rte_compressdev_data *compressdev_data =
246d30ea906Sjfb8856606 compressdev_globals.data[dev_id];
247d30ea906Sjfb8856606
248d30ea906Sjfb8856606 int retval = rte_compressdev_data_alloc(dev_id,
249d30ea906Sjfb8856606 &compressdev_data, socket_id);
250d30ea906Sjfb8856606
251d30ea906Sjfb8856606 if (retval < 0 || compressdev_data == NULL)
252d30ea906Sjfb8856606 return NULL;
253d30ea906Sjfb8856606
254d30ea906Sjfb8856606 compressdev->data = compressdev_data;
255d30ea906Sjfb8856606
2564418919fSjohnjiang strlcpy(compressdev->data->name, name,
2574418919fSjohnjiang RTE_COMPRESSDEV_NAME_MAX_LEN);
258d30ea906Sjfb8856606
259d30ea906Sjfb8856606 compressdev->data->dev_id = dev_id;
260d30ea906Sjfb8856606 compressdev->data->socket_id = socket_id;
261d30ea906Sjfb8856606 compressdev->data->dev_started = 0;
262d30ea906Sjfb8856606
263d30ea906Sjfb8856606 compressdev->attached = RTE_COMPRESSDEV_ATTACHED;
264d30ea906Sjfb8856606
265d30ea906Sjfb8856606 compressdev_globals.nb_devs++;
266d30ea906Sjfb8856606 }
267d30ea906Sjfb8856606
268d30ea906Sjfb8856606 return compressdev;
269d30ea906Sjfb8856606 }
270d30ea906Sjfb8856606
2714418919fSjohnjiang int
rte_compressdev_pmd_release_device(struct rte_compressdev * compressdev)272d30ea906Sjfb8856606 rte_compressdev_pmd_release_device(struct rte_compressdev *compressdev)
273d30ea906Sjfb8856606 {
274d30ea906Sjfb8856606 int ret;
275d30ea906Sjfb8856606
276d30ea906Sjfb8856606 if (compressdev == NULL)
277d30ea906Sjfb8856606 return -EINVAL;
278d30ea906Sjfb8856606
279d30ea906Sjfb8856606 /* Close device only if device operations have been set */
280d30ea906Sjfb8856606 if (compressdev->dev_ops) {
281d30ea906Sjfb8856606 ret = rte_compressdev_close(compressdev->data->dev_id);
282d30ea906Sjfb8856606 if (ret < 0)
283d30ea906Sjfb8856606 return ret;
284d30ea906Sjfb8856606 }
285d30ea906Sjfb8856606
286d30ea906Sjfb8856606 compressdev->attached = RTE_COMPRESSDEV_DETACHED;
287d30ea906Sjfb8856606 compressdev_globals.nb_devs--;
288d30ea906Sjfb8856606 return 0;
289d30ea906Sjfb8856606 }
290d30ea906Sjfb8856606
2914418919fSjohnjiang uint16_t
rte_compressdev_queue_pair_count(uint8_t dev_id)292d30ea906Sjfb8856606 rte_compressdev_queue_pair_count(uint8_t dev_id)
293d30ea906Sjfb8856606 {
294d30ea906Sjfb8856606 struct rte_compressdev *dev;
295d30ea906Sjfb8856606
296d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
297d30ea906Sjfb8856606 return dev->data->nb_queue_pairs;
298d30ea906Sjfb8856606 }
299d30ea906Sjfb8856606
300d30ea906Sjfb8856606 static int
rte_compressdev_queue_pairs_config(struct rte_compressdev * dev,uint16_t nb_qpairs,int socket_id)301d30ea906Sjfb8856606 rte_compressdev_queue_pairs_config(struct rte_compressdev *dev,
302d30ea906Sjfb8856606 uint16_t nb_qpairs, int socket_id)
303d30ea906Sjfb8856606 {
304d30ea906Sjfb8856606 struct rte_compressdev_info dev_info;
305d30ea906Sjfb8856606 void **qp;
306d30ea906Sjfb8856606 unsigned int i;
307d30ea906Sjfb8856606
308d30ea906Sjfb8856606 if ((dev == NULL) || (nb_qpairs < 1)) {
309d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "invalid param: dev %p, nb_queues %u",
310d30ea906Sjfb8856606 dev, nb_qpairs);
311d30ea906Sjfb8856606 return -EINVAL;
312d30ea906Sjfb8856606 }
313d30ea906Sjfb8856606
314d30ea906Sjfb8856606 COMPRESSDEV_LOG(DEBUG, "Setup %d queues pairs on device %u",
315d30ea906Sjfb8856606 nb_qpairs, dev->data->dev_id);
316d30ea906Sjfb8856606
317d30ea906Sjfb8856606 memset(&dev_info, 0, sizeof(struct rte_compressdev_info));
318d30ea906Sjfb8856606
319d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);
320d30ea906Sjfb8856606 (*dev->dev_ops->dev_infos_get)(dev, &dev_info);
321d30ea906Sjfb8856606
322d30ea906Sjfb8856606 if ((dev_info.max_nb_queue_pairs != 0) &&
323d30ea906Sjfb8856606 (nb_qpairs > dev_info.max_nb_queue_pairs)) {
324d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid num queue_pairs (%u) for dev %u",
325d30ea906Sjfb8856606 nb_qpairs, dev->data->dev_id);
326d30ea906Sjfb8856606 return -EINVAL;
327d30ea906Sjfb8856606 }
328d30ea906Sjfb8856606
329d30ea906Sjfb8856606 if (dev->data->queue_pairs == NULL) { /* first time configuration */
330d30ea906Sjfb8856606 dev->data->queue_pairs = rte_zmalloc_socket(
331d30ea906Sjfb8856606 "compressdev->queue_pairs",
332d30ea906Sjfb8856606 sizeof(dev->data->queue_pairs[0]) * nb_qpairs,
333d30ea906Sjfb8856606 RTE_CACHE_LINE_SIZE, socket_id);
334d30ea906Sjfb8856606
335d30ea906Sjfb8856606 if (dev->data->queue_pairs == NULL) {
336d30ea906Sjfb8856606 dev->data->nb_queue_pairs = 0;
337d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
338d30ea906Sjfb8856606 "failed to get memory for qp meta data, nb_queues %u",
339d30ea906Sjfb8856606 nb_qpairs);
340d30ea906Sjfb8856606 return -(ENOMEM);
341d30ea906Sjfb8856606 }
342d30ea906Sjfb8856606 } else { /* re-configure */
343d30ea906Sjfb8856606 int ret;
344d30ea906Sjfb8856606 uint16_t old_nb_queues = dev->data->nb_queue_pairs;
345d30ea906Sjfb8856606
346d30ea906Sjfb8856606 qp = dev->data->queue_pairs;
347d30ea906Sjfb8856606
348d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_release,
349d30ea906Sjfb8856606 -ENOTSUP);
350d30ea906Sjfb8856606
351d30ea906Sjfb8856606 for (i = nb_qpairs; i < old_nb_queues; i++) {
352d30ea906Sjfb8856606 ret = (*dev->dev_ops->queue_pair_release)(dev, i);
353d30ea906Sjfb8856606 if (ret < 0)
354d30ea906Sjfb8856606 return ret;
355d30ea906Sjfb8856606 }
356d30ea906Sjfb8856606
357d30ea906Sjfb8856606 qp = rte_realloc(qp, sizeof(qp[0]) * nb_qpairs,
358d30ea906Sjfb8856606 RTE_CACHE_LINE_SIZE);
359d30ea906Sjfb8856606 if (qp == NULL) {
360d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
361d30ea906Sjfb8856606 "failed to realloc qp meta data, nb_queues %u",
362d30ea906Sjfb8856606 nb_qpairs);
363d30ea906Sjfb8856606 return -(ENOMEM);
364d30ea906Sjfb8856606 }
365d30ea906Sjfb8856606
366d30ea906Sjfb8856606 if (nb_qpairs > old_nb_queues) {
367d30ea906Sjfb8856606 uint16_t new_qs = nb_qpairs - old_nb_queues;
368d30ea906Sjfb8856606
369d30ea906Sjfb8856606 memset(qp + old_nb_queues, 0,
370d30ea906Sjfb8856606 sizeof(qp[0]) * new_qs);
371d30ea906Sjfb8856606 }
372d30ea906Sjfb8856606
373d30ea906Sjfb8856606 dev->data->queue_pairs = qp;
374d30ea906Sjfb8856606
375d30ea906Sjfb8856606 }
376d30ea906Sjfb8856606 dev->data->nb_queue_pairs = nb_qpairs;
377d30ea906Sjfb8856606 return 0;
378d30ea906Sjfb8856606 }
379d30ea906Sjfb8856606
380d30ea906Sjfb8856606 static int
rte_compressdev_queue_pairs_release(struct rte_compressdev * dev)381d30ea906Sjfb8856606 rte_compressdev_queue_pairs_release(struct rte_compressdev *dev)
382d30ea906Sjfb8856606 {
383d30ea906Sjfb8856606 uint16_t num_qps, i;
384d30ea906Sjfb8856606 int ret;
385d30ea906Sjfb8856606
386d30ea906Sjfb8856606 if (dev == NULL) {
387d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "invalid param: dev %p", dev);
388d30ea906Sjfb8856606 return -EINVAL;
389d30ea906Sjfb8856606 }
390d30ea906Sjfb8856606
391d30ea906Sjfb8856606 num_qps = dev->data->nb_queue_pairs;
392d30ea906Sjfb8856606
393d30ea906Sjfb8856606 if (num_qps == 0)
394d30ea906Sjfb8856606 return 0;
395d30ea906Sjfb8856606
396d30ea906Sjfb8856606 COMPRESSDEV_LOG(DEBUG, "Free %d queues pairs on device %u",
397d30ea906Sjfb8856606 dev->data->nb_queue_pairs, dev->data->dev_id);
398d30ea906Sjfb8856606
399d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_release,
400d30ea906Sjfb8856606 -ENOTSUP);
401d30ea906Sjfb8856606
402d30ea906Sjfb8856606 for (i = 0; i < num_qps; i++) {
403d30ea906Sjfb8856606 ret = (*dev->dev_ops->queue_pair_release)(dev, i);
404d30ea906Sjfb8856606 if (ret < 0)
405d30ea906Sjfb8856606 return ret;
406d30ea906Sjfb8856606 }
407d30ea906Sjfb8856606
408d30ea906Sjfb8856606 if (dev->data->queue_pairs != NULL)
409d30ea906Sjfb8856606 rte_free(dev->data->queue_pairs);
410d30ea906Sjfb8856606 dev->data->queue_pairs = NULL;
411d30ea906Sjfb8856606 dev->data->nb_queue_pairs = 0;
412d30ea906Sjfb8856606
413d30ea906Sjfb8856606 return 0;
414d30ea906Sjfb8856606 }
415d30ea906Sjfb8856606
4164418919fSjohnjiang int
rte_compressdev_configure(uint8_t dev_id,struct rte_compressdev_config * config)417d30ea906Sjfb8856606 rte_compressdev_configure(uint8_t dev_id, struct rte_compressdev_config *config)
418d30ea906Sjfb8856606 {
419d30ea906Sjfb8856606 struct rte_compressdev *dev;
420d30ea906Sjfb8856606 int diag;
421d30ea906Sjfb8856606
422d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
423d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%" PRIu8, dev_id);
424d30ea906Sjfb8856606 return -EINVAL;
425d30ea906Sjfb8856606 }
426d30ea906Sjfb8856606
427d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
428d30ea906Sjfb8856606
429d30ea906Sjfb8856606 if (dev->data->dev_started) {
430d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
431d30ea906Sjfb8856606 "device %d must be stopped to allow configuration", dev_id);
432d30ea906Sjfb8856606 return -EBUSY;
433d30ea906Sjfb8856606 }
434d30ea906Sjfb8856606
435d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);
436d30ea906Sjfb8856606
437d30ea906Sjfb8856606 /* Setup new number of queue pairs and reconfigure device. */
438d30ea906Sjfb8856606 diag = rte_compressdev_queue_pairs_config(dev, config->nb_queue_pairs,
439d30ea906Sjfb8856606 config->socket_id);
440d30ea906Sjfb8856606 if (diag != 0) {
441d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
442d30ea906Sjfb8856606 "dev%d rte_comp_dev_queue_pairs_config = %d",
443d30ea906Sjfb8856606 dev_id, diag);
444d30ea906Sjfb8856606 return diag;
445d30ea906Sjfb8856606 }
446d30ea906Sjfb8856606
447d30ea906Sjfb8856606 return (*dev->dev_ops->dev_configure)(dev, config);
448d30ea906Sjfb8856606 }
449d30ea906Sjfb8856606
4504418919fSjohnjiang int
rte_compressdev_start(uint8_t dev_id)451d30ea906Sjfb8856606 rte_compressdev_start(uint8_t dev_id)
452d30ea906Sjfb8856606 {
453d30ea906Sjfb8856606 struct rte_compressdev *dev;
454d30ea906Sjfb8856606 int diag;
455d30ea906Sjfb8856606
456d30ea906Sjfb8856606 COMPRESSDEV_LOG(DEBUG, "Start dev_id=%" PRIu8, dev_id);
457d30ea906Sjfb8856606
458d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
459d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%" PRIu8, dev_id);
460d30ea906Sjfb8856606 return -EINVAL;
461d30ea906Sjfb8856606 }
462d30ea906Sjfb8856606
463d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
464d30ea906Sjfb8856606
465d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);
466d30ea906Sjfb8856606
467d30ea906Sjfb8856606 if (dev->data->dev_started != 0) {
468d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
469d30ea906Sjfb8856606 "Device with dev_id=%" PRIu8 " already started", dev_id);
470d30ea906Sjfb8856606 return 0;
471d30ea906Sjfb8856606 }
472d30ea906Sjfb8856606
473d30ea906Sjfb8856606 diag = (*dev->dev_ops->dev_start)(dev);
474d30ea906Sjfb8856606 if (diag == 0)
475d30ea906Sjfb8856606 dev->data->dev_started = 1;
476d30ea906Sjfb8856606 else
477d30ea906Sjfb8856606 return diag;
478d30ea906Sjfb8856606
479d30ea906Sjfb8856606 return 0;
480d30ea906Sjfb8856606 }
481d30ea906Sjfb8856606
4824418919fSjohnjiang void
rte_compressdev_stop(uint8_t dev_id)483d30ea906Sjfb8856606 rte_compressdev_stop(uint8_t dev_id)
484d30ea906Sjfb8856606 {
485d30ea906Sjfb8856606 struct rte_compressdev *dev;
486d30ea906Sjfb8856606
487d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
488d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%" PRIu8, dev_id);
489d30ea906Sjfb8856606 return;
490d30ea906Sjfb8856606 }
491d30ea906Sjfb8856606
492d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
493d30ea906Sjfb8856606
494d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop);
495d30ea906Sjfb8856606
496d30ea906Sjfb8856606 if (dev->data->dev_started == 0) {
497d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
498d30ea906Sjfb8856606 "Device with dev_id=%" PRIu8 " already stopped", dev_id);
499d30ea906Sjfb8856606 return;
500d30ea906Sjfb8856606 }
501d30ea906Sjfb8856606
502d30ea906Sjfb8856606 (*dev->dev_ops->dev_stop)(dev);
503d30ea906Sjfb8856606 dev->data->dev_started = 0;
504d30ea906Sjfb8856606 }
505d30ea906Sjfb8856606
5064418919fSjohnjiang int
rte_compressdev_close(uint8_t dev_id)507d30ea906Sjfb8856606 rte_compressdev_close(uint8_t dev_id)
508d30ea906Sjfb8856606 {
509d30ea906Sjfb8856606 struct rte_compressdev *dev;
510d30ea906Sjfb8856606 int retval;
511d30ea906Sjfb8856606
512d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
513d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%" PRIu8, dev_id);
514d30ea906Sjfb8856606 return -1;
515d30ea906Sjfb8856606 }
516d30ea906Sjfb8856606
517d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
518d30ea906Sjfb8856606
519d30ea906Sjfb8856606 /* Device must be stopped before it can be closed */
520d30ea906Sjfb8856606 if (dev->data->dev_started == 1) {
521d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Device %u must be stopped before closing",
522d30ea906Sjfb8856606 dev_id);
523d30ea906Sjfb8856606 return -EBUSY;
524d30ea906Sjfb8856606 }
525d30ea906Sjfb8856606
526d30ea906Sjfb8856606 /* Free queue pairs memory */
527d30ea906Sjfb8856606 retval = rte_compressdev_queue_pairs_release(dev);
528d30ea906Sjfb8856606
529d30ea906Sjfb8856606 if (retval < 0)
530d30ea906Sjfb8856606 return retval;
531d30ea906Sjfb8856606
532d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);
533d30ea906Sjfb8856606 retval = (*dev->dev_ops->dev_close)(dev);
534d30ea906Sjfb8856606
535d30ea906Sjfb8856606 if (retval < 0)
536d30ea906Sjfb8856606 return retval;
537d30ea906Sjfb8856606
538d30ea906Sjfb8856606 return 0;
539d30ea906Sjfb8856606 }
540d30ea906Sjfb8856606
5414418919fSjohnjiang int
rte_compressdev_queue_pair_setup(uint8_t dev_id,uint16_t queue_pair_id,uint32_t max_inflight_ops,int socket_id)542d30ea906Sjfb8856606 rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
543d30ea906Sjfb8856606 uint32_t max_inflight_ops, int socket_id)
544d30ea906Sjfb8856606 {
545d30ea906Sjfb8856606 struct rte_compressdev *dev;
546d30ea906Sjfb8856606
547d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
548d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%" PRIu8, dev_id);
549d30ea906Sjfb8856606 return -EINVAL;
550d30ea906Sjfb8856606 }
551d30ea906Sjfb8856606
552d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
553d30ea906Sjfb8856606 if (queue_pair_id >= dev->data->nb_queue_pairs) {
554d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid queue_pair_id=%d", queue_pair_id);
555d30ea906Sjfb8856606 return -EINVAL;
556d30ea906Sjfb8856606 }
557d30ea906Sjfb8856606
558d30ea906Sjfb8856606 if (dev->data->dev_started) {
559d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
560d30ea906Sjfb8856606 "device %d must be stopped to allow configuration", dev_id);
561d30ea906Sjfb8856606 return -EBUSY;
562d30ea906Sjfb8856606 }
563d30ea906Sjfb8856606
564d30ea906Sjfb8856606 if (max_inflight_ops == 0) {
565d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
566d30ea906Sjfb8856606 "Invalid maximum number of inflight operations");
567d30ea906Sjfb8856606 return -EINVAL;
568d30ea906Sjfb8856606 }
569d30ea906Sjfb8856606
570d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_setup, -ENOTSUP);
571d30ea906Sjfb8856606
572d30ea906Sjfb8856606 return (*dev->dev_ops->queue_pair_setup)(dev, queue_pair_id,
573d30ea906Sjfb8856606 max_inflight_ops, socket_id);
574d30ea906Sjfb8856606 }
575d30ea906Sjfb8856606
5764418919fSjohnjiang uint16_t
rte_compressdev_dequeue_burst(uint8_t dev_id,uint16_t qp_id,struct rte_comp_op ** ops,uint16_t nb_ops)577d30ea906Sjfb8856606 rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
578d30ea906Sjfb8856606 struct rte_comp_op **ops, uint16_t nb_ops)
579d30ea906Sjfb8856606 {
580d30ea906Sjfb8856606 struct rte_compressdev *dev = &rte_comp_devices[dev_id];
581d30ea906Sjfb8856606
582d30ea906Sjfb8856606 nb_ops = (*dev->dequeue_burst)
583d30ea906Sjfb8856606 (dev->data->queue_pairs[qp_id], ops, nb_ops);
584d30ea906Sjfb8856606
585d30ea906Sjfb8856606 return nb_ops;
586d30ea906Sjfb8856606 }
587d30ea906Sjfb8856606
5884418919fSjohnjiang uint16_t
rte_compressdev_enqueue_burst(uint8_t dev_id,uint16_t qp_id,struct rte_comp_op ** ops,uint16_t nb_ops)589d30ea906Sjfb8856606 rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
590d30ea906Sjfb8856606 struct rte_comp_op **ops, uint16_t nb_ops)
591d30ea906Sjfb8856606 {
592d30ea906Sjfb8856606 struct rte_compressdev *dev = &rte_comp_devices[dev_id];
593d30ea906Sjfb8856606
594d30ea906Sjfb8856606 return (*dev->enqueue_burst)(
595d30ea906Sjfb8856606 dev->data->queue_pairs[qp_id], ops, nb_ops);
596d30ea906Sjfb8856606 }
597d30ea906Sjfb8856606
5984418919fSjohnjiang int
rte_compressdev_stats_get(uint8_t dev_id,struct rte_compressdev_stats * stats)599d30ea906Sjfb8856606 rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats)
600d30ea906Sjfb8856606 {
601d30ea906Sjfb8856606 struct rte_compressdev *dev;
602d30ea906Sjfb8856606
603d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
604d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%d", dev_id);
605d30ea906Sjfb8856606 return -ENODEV;
606d30ea906Sjfb8856606 }
607d30ea906Sjfb8856606
608d30ea906Sjfb8856606 if (stats == NULL) {
609d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid stats ptr");
610d30ea906Sjfb8856606 return -EINVAL;
611d30ea906Sjfb8856606 }
612d30ea906Sjfb8856606
613d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
614d30ea906Sjfb8856606 memset(stats, 0, sizeof(*stats));
615d30ea906Sjfb8856606
616d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP);
617d30ea906Sjfb8856606 (*dev->dev_ops->stats_get)(dev, stats);
618d30ea906Sjfb8856606 return 0;
619d30ea906Sjfb8856606 }
620d30ea906Sjfb8856606
6214418919fSjohnjiang void
rte_compressdev_stats_reset(uint8_t dev_id)622d30ea906Sjfb8856606 rte_compressdev_stats_reset(uint8_t dev_id)
623d30ea906Sjfb8856606 {
624d30ea906Sjfb8856606 struct rte_compressdev *dev;
625d30ea906Sjfb8856606
626d30ea906Sjfb8856606 if (!rte_compressdev_is_valid_dev(dev_id)) {
627d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%" PRIu8, dev_id);
628d30ea906Sjfb8856606 return;
629d30ea906Sjfb8856606 }
630d30ea906Sjfb8856606
631d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
632d30ea906Sjfb8856606
633d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_RET(*dev->dev_ops->stats_reset);
634d30ea906Sjfb8856606 (*dev->dev_ops->stats_reset)(dev);
635d30ea906Sjfb8856606 }
636d30ea906Sjfb8856606
637d30ea906Sjfb8856606
6384418919fSjohnjiang void
rte_compressdev_info_get(uint8_t dev_id,struct rte_compressdev_info * dev_info)639d30ea906Sjfb8856606 rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info)
640d30ea906Sjfb8856606 {
641d30ea906Sjfb8856606 struct rte_compressdev *dev;
642d30ea906Sjfb8856606
643d30ea906Sjfb8856606 if (dev_id >= compressdev_globals.nb_devs) {
644d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR, "Invalid dev_id=%d", dev_id);
645d30ea906Sjfb8856606 return;
646d30ea906Sjfb8856606 }
647d30ea906Sjfb8856606
648d30ea906Sjfb8856606 dev = &rte_comp_devices[dev_id];
649d30ea906Sjfb8856606
650d30ea906Sjfb8856606 memset(dev_info, 0, sizeof(struct rte_compressdev_info));
651d30ea906Sjfb8856606
652d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
653d30ea906Sjfb8856606 (*dev->dev_ops->dev_infos_get)(dev, dev_info);
654d30ea906Sjfb8856606
655d30ea906Sjfb8856606 dev_info->driver_name = dev->device->driver->name;
656d30ea906Sjfb8856606 }
657d30ea906Sjfb8856606
6584418919fSjohnjiang int
rte_compressdev_private_xform_create(uint8_t dev_id,const struct rte_comp_xform * xform,void ** priv_xform)659d30ea906Sjfb8856606 rte_compressdev_private_xform_create(uint8_t dev_id,
660d30ea906Sjfb8856606 const struct rte_comp_xform *xform,
661d30ea906Sjfb8856606 void **priv_xform)
662d30ea906Sjfb8856606 {
663d30ea906Sjfb8856606 struct rte_compressdev *dev;
664d30ea906Sjfb8856606 int ret;
665d30ea906Sjfb8856606
666d30ea906Sjfb8856606 dev = rte_compressdev_get_dev(dev_id);
667d30ea906Sjfb8856606
668d30ea906Sjfb8856606 if (xform == NULL || priv_xform == NULL || dev == NULL)
669d30ea906Sjfb8856606 return -EINVAL;
670d30ea906Sjfb8856606
671d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->private_xform_create, -ENOTSUP);
672d30ea906Sjfb8856606 ret = (*dev->dev_ops->private_xform_create)(dev, xform, priv_xform);
673d30ea906Sjfb8856606 if (ret < 0) {
674d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
675d30ea906Sjfb8856606 "dev_id %d failed to create private_xform: err=%d",
676d30ea906Sjfb8856606 dev_id, ret);
677d30ea906Sjfb8856606 return ret;
678d30ea906Sjfb8856606 };
679d30ea906Sjfb8856606
680d30ea906Sjfb8856606 return 0;
681d30ea906Sjfb8856606 }
682d30ea906Sjfb8856606
6834418919fSjohnjiang int
rte_compressdev_private_xform_free(uint8_t dev_id,void * priv_xform)684d30ea906Sjfb8856606 rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)
685d30ea906Sjfb8856606 {
686d30ea906Sjfb8856606 struct rte_compressdev *dev;
687d30ea906Sjfb8856606 int ret;
688d30ea906Sjfb8856606
689d30ea906Sjfb8856606 dev = rte_compressdev_get_dev(dev_id);
690d30ea906Sjfb8856606
691d30ea906Sjfb8856606 if (dev == NULL || priv_xform == NULL)
692d30ea906Sjfb8856606 return -EINVAL;
693d30ea906Sjfb8856606
694d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->private_xform_free, -ENOTSUP);
695d30ea906Sjfb8856606 ret = dev->dev_ops->private_xform_free(dev, priv_xform);
696d30ea906Sjfb8856606 if (ret < 0) {
697d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
698d30ea906Sjfb8856606 "dev_id %d failed to free private xform: err=%d",
699d30ea906Sjfb8856606 dev_id, ret);
700d30ea906Sjfb8856606 return ret;
701d30ea906Sjfb8856606 };
702d30ea906Sjfb8856606
703d30ea906Sjfb8856606 return 0;
704d30ea906Sjfb8856606 }
705d30ea906Sjfb8856606
7064418919fSjohnjiang int
rte_compressdev_stream_create(uint8_t dev_id,const struct rte_comp_xform * xform,void ** stream)707d30ea906Sjfb8856606 rte_compressdev_stream_create(uint8_t dev_id,
708d30ea906Sjfb8856606 const struct rte_comp_xform *xform,
709d30ea906Sjfb8856606 void **stream)
710d30ea906Sjfb8856606 {
711d30ea906Sjfb8856606 struct rte_compressdev *dev;
712d30ea906Sjfb8856606 int ret;
713d30ea906Sjfb8856606
714d30ea906Sjfb8856606 dev = rte_compressdev_get_dev(dev_id);
715d30ea906Sjfb8856606
716d30ea906Sjfb8856606 if (xform == NULL || dev == NULL || stream == NULL)
717d30ea906Sjfb8856606 return -EINVAL;
718d30ea906Sjfb8856606
719d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stream_create, -ENOTSUP);
720d30ea906Sjfb8856606 ret = (*dev->dev_ops->stream_create)(dev, xform, stream);
721d30ea906Sjfb8856606 if (ret < 0) {
722d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
723d30ea906Sjfb8856606 "dev_id %d failed to create stream: err=%d",
724d30ea906Sjfb8856606 dev_id, ret);
725d30ea906Sjfb8856606 return ret;
726d30ea906Sjfb8856606 };
727d30ea906Sjfb8856606
728d30ea906Sjfb8856606 return 0;
729d30ea906Sjfb8856606 }
730d30ea906Sjfb8856606
731d30ea906Sjfb8856606
7324418919fSjohnjiang int
rte_compressdev_stream_free(uint8_t dev_id,void * stream)733d30ea906Sjfb8856606 rte_compressdev_stream_free(uint8_t dev_id, void *stream)
734d30ea906Sjfb8856606 {
735d30ea906Sjfb8856606 struct rte_compressdev *dev;
736d30ea906Sjfb8856606 int ret;
737d30ea906Sjfb8856606
738d30ea906Sjfb8856606 dev = rte_compressdev_get_dev(dev_id);
739d30ea906Sjfb8856606
740d30ea906Sjfb8856606 if (dev == NULL || stream == NULL)
741d30ea906Sjfb8856606 return -EINVAL;
742d30ea906Sjfb8856606
743d30ea906Sjfb8856606 RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stream_free, -ENOTSUP);
744d30ea906Sjfb8856606 ret = dev->dev_ops->stream_free(dev, stream);
745d30ea906Sjfb8856606 if (ret < 0) {
746d30ea906Sjfb8856606 COMPRESSDEV_LOG(ERR,
747d30ea906Sjfb8856606 "dev_id %d failed to free stream: err=%d",
748d30ea906Sjfb8856606 dev_id, ret);
749d30ea906Sjfb8856606 return ret;
750d30ea906Sjfb8856606 };
751d30ea906Sjfb8856606
752d30ea906Sjfb8856606 return 0;
753d30ea906Sjfb8856606 }
754d30ea906Sjfb8856606
7554418919fSjohnjiang const char *
rte_compressdev_name_get(uint8_t dev_id)756d30ea906Sjfb8856606 rte_compressdev_name_get(uint8_t dev_id)
757d30ea906Sjfb8856606 {
758d30ea906Sjfb8856606 struct rte_compressdev *dev = rte_compressdev_get_dev(dev_id);
759d30ea906Sjfb8856606
760d30ea906Sjfb8856606 if (dev == NULL)
761d30ea906Sjfb8856606 return NULL;
762d30ea906Sjfb8856606
763d30ea906Sjfb8856606 return dev->data->name;
764d30ea906Sjfb8856606 }
765d30ea906Sjfb8856606
766*2d9fd380Sjfb8856606 RTE_LOG_REGISTER(compressdev_logtype, lib.compressdev, NOTICE);
767