+ return ret;
+}
+
+static const struct {
+ const char *desc;
+ uint32_t api_type;
+ uint32_t create_flags;
+ struct {
+ unsigned int (*flegacy)(struct rte_ring *r,
+ void * const *obj_table, unsigned int n,
+ unsigned int *free_space);
+ unsigned int (*felem)(struct rte_ring *r, const void *obj_table,
+ unsigned int esize, unsigned int n,
+ unsigned int *free_space);
+ } enq;
+ struct {
+ unsigned int (*flegacy)(struct rte_ring *r,
+ void **obj_table, unsigned int n,
+ unsigned int *available);
+ unsigned int (*felem)(struct rte_ring *r, void *obj_table,
+ unsigned int esize, unsigned int n,
+ unsigned int *available);
+ } deq;
+} test_enqdeq_impl[] = {
+ {
+ .desc = "MP/MC sync mode",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_DEF,
+ .create_flags = 0,
+ .enq = {
+ .flegacy = rte_ring_enqueue_bulk,
+ .felem = rte_ring_enqueue_bulk_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_dequeue_bulk,
+ .felem = rte_ring_dequeue_bulk_elem,
+ },
+ },
+ {
+ .desc = "SP/SC sync mode",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_SPSC,
+ .create_flags = RING_F_SP_ENQ | RING_F_SC_DEQ,
+ .enq = {
+ .flegacy = rte_ring_sp_enqueue_bulk,
+ .felem = rte_ring_sp_enqueue_bulk_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_sc_dequeue_bulk,
+ .felem = rte_ring_sc_dequeue_bulk_elem,
+ },
+ },
+ {
+ .desc = "MP/MC sync mode",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_MPMC,
+ .create_flags = 0,
+ .enq = {
+ .flegacy = rte_ring_mp_enqueue_bulk,
+ .felem = rte_ring_mp_enqueue_bulk_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_mc_dequeue_bulk,
+ .felem = rte_ring_mc_dequeue_bulk_elem,
+ },
+ },
+ {
+ .desc = "MP_RTS/MC_RTS sync mode",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_DEF,
+ .create_flags = RING_F_MP_RTS_ENQ | RING_F_MC_RTS_DEQ,
+ .enq = {
+ .flegacy = rte_ring_enqueue_bulk,
+ .felem = rte_ring_enqueue_bulk_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_dequeue_bulk,
+ .felem = rte_ring_dequeue_bulk_elem,
+ },
+ },
+ {
+ .desc = "MP_HTS/MC_HTS sync mode",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_DEF,
+ .create_flags = RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ,
+ .enq = {
+ .flegacy = rte_ring_enqueue_bulk,
+ .felem = rte_ring_enqueue_bulk_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_dequeue_bulk,
+ .felem = rte_ring_dequeue_bulk_elem,
+ },
+ },
+ {
+ .desc = "MP/MC sync mode",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_DEF,
+ .create_flags = 0,
+ .enq = {
+ .flegacy = rte_ring_enqueue_burst,
+ .felem = rte_ring_enqueue_burst_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_dequeue_burst,
+ .felem = rte_ring_dequeue_burst_elem,
+ },
+ },
+ {
+ .desc = "SP/SC sync mode",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_SPSC,
+ .create_flags = RING_F_SP_ENQ | RING_F_SC_DEQ,
+ .enq = {
+ .flegacy = rte_ring_sp_enqueue_burst,
+ .felem = rte_ring_sp_enqueue_burst_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_sc_dequeue_burst,
+ .felem = rte_ring_sc_dequeue_burst_elem,
+ },
+ },
+ {
+ .desc = "MP/MC sync mode",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_MPMC,
+ .create_flags = 0,
+ .enq = {
+ .flegacy = rte_ring_mp_enqueue_burst,
+ .felem = rte_ring_mp_enqueue_burst_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_mc_dequeue_burst,
+ .felem = rte_ring_mc_dequeue_burst_elem,
+ },
+ },
+ {
+ .desc = "MP_RTS/MC_RTS sync mode",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_DEF,
+ .create_flags = RING_F_MP_RTS_ENQ | RING_F_MC_RTS_DEQ,
+ .enq = {
+ .flegacy = rte_ring_enqueue_burst,
+ .felem = rte_ring_enqueue_burst_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_dequeue_burst,
+ .felem = rte_ring_dequeue_burst_elem,
+ },
+ },
+ {
+ .desc = "MP_HTS/MC_HTS sync mode",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_DEF,
+ .create_flags = RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ,
+ .enq = {
+ .flegacy = rte_ring_enqueue_burst,
+ .felem = rte_ring_enqueue_burst_elem,
+ },
+ .deq = {
+ .flegacy = rte_ring_dequeue_burst,
+ .felem = rte_ring_dequeue_burst_elem,
+ },
+ },
+ {
+ .desc = "SP/SC sync mode (ZC)",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_SPSC,
+ .create_flags = RING_F_SP_ENQ | RING_F_SC_DEQ,
+ .enq = {
+ .flegacy = test_ring_enqueue_zc_bulk,
+ .felem = test_ring_enqueue_zc_bulk_elem,
+ },
+ .deq = {
+ .flegacy = test_ring_dequeue_zc_bulk,
+ .felem = test_ring_dequeue_zc_bulk_elem,
+ },
+ },
+ {
+ .desc = "MP_HTS/MC_HTS sync mode (ZC)",
+ .api_type = TEST_RING_ELEM_BULK | TEST_RING_THREAD_DEF,
+ .create_flags = RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ,
+ .enq = {
+ .flegacy = test_ring_enqueue_zc_bulk,
+ .felem = test_ring_enqueue_zc_bulk_elem,
+ },
+ .deq = {
+ .flegacy = test_ring_dequeue_zc_bulk,
+ .felem = test_ring_dequeue_zc_bulk_elem,
+ },
+ },
+ {
+ .desc = "SP/SC sync mode (ZC)",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_SPSC,
+ .create_flags = RING_F_SP_ENQ | RING_F_SC_DEQ,
+ .enq = {
+ .flegacy = test_ring_enqueue_zc_burst,
+ .felem = test_ring_enqueue_zc_burst_elem,
+ },
+ .deq = {
+ .flegacy = test_ring_dequeue_zc_burst,
+ .felem = test_ring_dequeue_zc_burst_elem,
+ },
+ },
+ {
+ .desc = "MP_HTS/MC_HTS sync mode (ZC)",
+ .api_type = TEST_RING_ELEM_BURST | TEST_RING_THREAD_DEF,
+ .create_flags = RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ,
+ .enq = {
+ .flegacy = test_ring_enqueue_zc_burst,
+ .felem = test_ring_enqueue_zc_burst_elem,
+ },
+ .deq = {
+ .flegacy = test_ring_dequeue_zc_burst,
+ .felem = test_ring_dequeue_zc_burst_elem,
+ },