net/txgbe: add PHY init
[dpdk.git] / app / test / test_ring.h
index 2785559..c8bfec8 100644 (file)
@@ -42,6 +42,61 @@ test_ring_create(const char *name, int esize, unsigned int count,
                                                socket_id, flags);
 }
 
+static inline void*
+test_ring_inc_ptr(void *obj, int esize, unsigned int n)
+{
+       size_t sz;
+
+       sz = sizeof(void *);
+       /* Legacy queue APIs? */
+       if (esize != -1)
+               sz = esize;
+
+       return (void *)((uint32_t *)obj + (n * sz / sizeof(uint32_t)));
+}
+
+static inline void
+test_ring_mem_copy(void *dst, void * const *src, int esize, unsigned int num)
+{
+       size_t sz;
+
+       sz = num * sizeof(void *);
+       if (esize != -1)
+               sz = esize * num;
+
+       memcpy(dst, src, sz);
+}
+
+/* Copy to the ring memory */
+static inline void
+test_ring_copy_to(struct rte_ring_zc_data *zcd, void * const *src, int esize,
+       unsigned int num)
+{
+       test_ring_mem_copy(zcd->ptr1, src, esize, zcd->n1);
+       if (zcd->n1 != num) {
+               if (esize == -1)
+                       src = src + zcd->n1;
+               else
+                       src = (void * const *)((const uint32_t *)src +
+                                       (zcd->n1 * esize / sizeof(uint32_t)));
+               test_ring_mem_copy(zcd->ptr2, src,
+                                       esize, num - zcd->n1);
+       }
+}
+
+/* Copy from the ring memory */
+static inline void
+test_ring_copy_from(struct rte_ring_zc_data *zcd, void *dst, int esize,
+       unsigned int num)
+{
+       test_ring_mem_copy(dst, zcd->ptr1, esize, zcd->n1);
+
+       if (zcd->n1 != num) {
+               dst = test_ring_inc_ptr(dst, esize, zcd->n1);
+               test_ring_mem_copy(dst, zcd->ptr2, esize, num - zcd->n1);
+       }
+}
+
 static __rte_always_inline unsigned int
 test_ring_enqueue(struct rte_ring *r, void **obj, int esize, unsigned int n,
                        unsigned int api_type)