X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest%2Ftest_ring.h;h=c8bfec8399b9dacadece4c3420049ee5ffd9040e;hb=5364a1ce30dfbf2a8acc41bb64cae4cdfeff4735;hp=2785559b3fd862dc7e2dbf83dae71614c0562464;hpb=31354c762cafed5959359db8078e4f44cbf0565c;p=dpdk.git diff --git a/app/test/test_ring.h b/app/test/test_ring.h index 2785559b3f..c8bfec8399 100644 --- a/app/test/test_ring.h +++ b/app/test/test_ring.h @@ -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)