DPDK  25.03.0
rte_soring.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2024 Huawei Technologies Co., Ltd
3  */
4 
5 #ifndef _RTE_SORING_H_
6 #define _RTE_SORING_H_
7 
26 #include <rte_ring.h>
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
33 #define RTE_SORING_ST_BIT 30
34 
36 #define RTE_SORING_ELEM_MAX (RTE_BIT32(RTE_SORING_ST_BIT) - 1)
37 
38 struct rte_soring_param {
40  const char *name;
42  uint32_t elems;
44  uint32_t elem_size;
59  uint32_t meta_size;
61  uint32_t stages;
63  enum rte_ring_sync_type prod_synt;
65  enum rte_ring_sync_type cons_synt;
66 };
67 
68 struct rte_soring;
69 
88 __rte_experimental
89 ssize_t
90 rte_soring_get_memsize(const struct rte_soring_param *prm);
91 
111 __rte_experimental
112 int
113 rte_soring_init(struct rte_soring *r, const struct rte_soring_param *prm);
114 
126 __rte_experimental
127 unsigned int
128 rte_soring_count(const struct rte_soring *r);
129 
141 __rte_experimental
142 unsigned int
143 rte_soring_free_count(const struct rte_soring *r);
144 
156 __rte_experimental
157 void
158 rte_soring_dump(FILE *f, const struct rte_soring *r);
159 
181 __rte_experimental
182 uint32_t
183 rte_soring_enqueue_bulk(struct rte_soring *r, const void *objs,
184  uint32_t n, uint32_t *free_space);
185 
215 __rte_experimental
216 uint32_t
217 rte_soring_enqueux_bulk(struct rte_soring *r, const void *objs,
218  const void *meta, uint32_t n, uint32_t *free_space);
219 
241 __rte_experimental
242 uint32_t
243 rte_soring_enqueue_burst(struct rte_soring *r, const void *objs,
244  uint32_t n, uint32_t *free_space);
245 
275 __rte_experimental
276 uint32_t
277 rte_soring_enqueux_burst(struct rte_soring *r, const void *objs,
278  const void *meta, uint32_t n, uint32_t *free_space);
279 
301 __rte_experimental
302 uint32_t
303 rte_soring_dequeue_bulk(struct rte_soring *r, void *objs,
304  uint32_t num, uint32_t *available);
305 
335 __rte_experimental
336 uint32_t
337 rte_soring_dequeux_bulk(struct rte_soring *r, void *objs, void *meta,
338  uint32_t num, uint32_t *available);
339 
361 __rte_experimental
362 uint32_t
363 rte_soring_dequeue_burst(struct rte_soring *r, void *objs,
364  uint32_t num, uint32_t *available);
365 
395 __rte_experimental
396 uint32_t
397 rte_soring_dequeux_burst(struct rte_soring *r, void *objs, void *meta,
398  uint32_t num, uint32_t *available);
399 
427 __rte_experimental
428 uint32_t
429 rte_soring_acquire_bulk(struct rte_soring *r, void *objs,
430  uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available);
431 
467 __rte_experimental
468 uint32_t
469 rte_soring_acquirx_bulk(struct rte_soring *r, void *objs, void *meta,
470  uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available);
471 
499 __rte_experimental
500 uint32_t
501 rte_soring_acquire_burst(struct rte_soring *r, void *objs,
502  uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available);
503 
539 __rte_experimental
540 uint32_t
541 rte_soring_acquirx_burst(struct rte_soring *r, void *objs, void *meta,
542  uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available);
543 
568 __rte_experimental
569 void
570 rte_soring_release(struct rte_soring *r, const void *objs,
571  uint32_t stage, uint32_t n, uint32_t ftoken);
572 
605 __rte_experimental
606 void
607 rte_soring_releasx(struct rte_soring *r, const void *objs,
608  const void *meta, uint32_t stage, uint32_t n, uint32_t ftoken);
609 
610 #ifdef __cplusplus
611 }
612 #endif
613 
614 #endif /* _RTE_SORING_H_ */
__rte_experimental uint32_t rte_soring_dequeue_bulk(struct rte_soring *r, void *objs, uint32_t num, uint32_t *available)
__rte_experimental uint32_t rte_soring_acquirx_burst(struct rte_soring *r, void *objs, void *meta, uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
__rte_experimental ssize_t rte_soring_get_memsize(const struct rte_soring_param *prm)
__rte_experimental int rte_soring_init(struct rte_soring *r, const struct rte_soring_param *prm)
__rte_experimental unsigned int rte_soring_free_count(const struct rte_soring *r)
__rte_experimental uint32_t rte_soring_acquirx_bulk(struct rte_soring *r, void *objs, void *meta, uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
__rte_experimental void rte_soring_releasx(struct rte_soring *r, const void *objs, const void *meta, uint32_t stage, uint32_t n, uint32_t ftoken)
__rte_experimental void rte_soring_release(struct rte_soring *r, const void *objs, uint32_t stage, uint32_t n, uint32_t ftoken)
__rte_experimental uint32_t rte_soring_acquire_bulk(struct rte_soring *r, void *objs, uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
__rte_experimental uint32_t rte_soring_dequeue_burst(struct rte_soring *r, void *objs, uint32_t num, uint32_t *available)
rte_ring_sync_type
Definition: rte_ring_core.h:53
__rte_experimental uint32_t rte_soring_enqueue_burst(struct rte_soring *r, const void *objs, uint32_t n, uint32_t *free_space)
__rte_experimental uint32_t rte_soring_dequeux_bulk(struct rte_soring *r, void *objs, void *meta, uint32_t num, uint32_t *available)
__rte_experimental unsigned int rte_soring_count(const struct rte_soring *r)
__rte_experimental uint32_t rte_soring_dequeux_burst(struct rte_soring *r, void *objs, void *meta, uint32_t num, uint32_t *available)
__rte_experimental uint32_t rte_soring_enqueux_bulk(struct rte_soring *r, const void *objs, const void *meta, uint32_t n, uint32_t *free_space)
__rte_experimental uint32_t rte_soring_enqueue_bulk(struct rte_soring *r, const void *objs, uint32_t n, uint32_t *free_space)
__rte_experimental uint32_t rte_soring_acquire_burst(struct rte_soring *r, void *objs, uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
__rte_experimental void rte_soring_dump(FILE *f, const struct rte_soring *r)
__rte_experimental uint32_t rte_soring_enqueux_burst(struct rte_soring *r, const void *objs, const void *meta, uint32_t n, uint32_t *free_space)