DPDK  26.07.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 
647 __rte_experimental
648 uint32_t
649 rte_soring_enqueue_bulk_start(struct rte_soring *r, uint32_t n,
650  uint32_t *free_space);
651 
673 __rte_experimental
674 uint32_t
675 rte_soring_enqueue_burst_start(struct rte_soring *r, uint32_t n,
676  uint32_t *free_space);
677 
695 __rte_experimental
696 void
697 rte_soring_enqueue_finish(struct rte_soring *r, const void *objs, uint32_t n);
698 
725 __rte_experimental
726 void
727 rte_soring_enqueux_finish(struct rte_soring *r, const void *objs,
728  const void *meta, uint32_t n);
729 
754 __rte_experimental
755 uint32_t
756 rte_soring_dequeue_bulk_start(struct rte_soring *r, void *objs, uint32_t num,
757  uint32_t *available);
758 
792 __rte_experimental
793 uint32_t
794 rte_soring_dequeux_bulk_start(struct rte_soring *r, void *objs, void *meta,
795  uint32_t num, uint32_t *available);
796 
821 __rte_experimental
822 uint32_t
823 rte_soring_dequeue_burst_start(struct rte_soring *r, void *objs, uint32_t num,
824  uint32_t *available);
825 
859 __rte_experimental
860 uint32_t
861 rte_soring_dequeux_burst_start(struct rte_soring *r, void *objs, void *meta,
862  uint32_t num, uint32_t *available);
863 
877 __rte_experimental
878 void
879 rte_soring_dequeue_finish(struct rte_soring *r, uint32_t num);
880 
881 
882 #ifdef __cplusplus
883 }
884 #endif
885 
886 #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_dequeux_burst_start(struct rte_soring *r, void *objs, void *meta, uint32_t num, uint32_t *available)
__rte_experimental uint32_t rte_soring_enqueue_burst_start(struct rte_soring *r, uint32_t n, uint32_t *free_space)
__rte_experimental uint32_t rte_soring_dequeue_burst_start(struct rte_soring *r, void *objs, uint32_t num, uint32_t *available)
__rte_experimental uint32_t rte_soring_dequeue_bulk_start(struct rte_soring *r, void *objs, uint32_t num, uint32_t *available)
__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_bulk_start(struct rte_soring *r, uint32_t n, uint32_t *free_space)
__rte_experimental void rte_soring_dequeue_finish(struct rte_soring *r, uint32_t num)
__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 void rte_soring_enqueux_finish(struct rte_soring *r, const void *objs, const void *meta, uint32_t n)
__rte_experimental void rte_soring_enqueue_finish(struct rte_soring *r, const void *objs, uint32_t n)
__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)
__rte_experimental uint32_t rte_soring_dequeux_bulk_start(struct rte_soring *r, void *objs, void *meta, uint32_t num, uint32_t *available)