I dont think you can implement a mandatory ODP API based on an optional helper api.
The ring implementation should be inside the linux-generic implementation if you want to use it, other implementations can copy it as they do now from linux-generic for other features such as timers. Helpers need to be supporting the tests, examples and applications and not the implementations. We have been walking a fuzzy line previously but I think the complexities and coupling get unwound when linux-generic does not rely on or compile in any helper code. Mike On 8 May 2015 at 05:57, Maxim Uvarov <[email protected]> wrote: > Signed-off-by: Maxim Uvarov <[email protected]> > --- > helper/include/odp/helper/ring.h | 2 ++ > helper/ring.c | 9 ++++++++- > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/helper/include/odp/helper/ring.h > b/helper/include/odp/helper/ring.h > index 65c32ad..5e640a7 100644 > --- a/helper/include/odp/helper/ring.h > +++ b/helper/include/odp/helper/ring.h > @@ -158,6 +158,8 @@ typedef struct odph_ring { > > #define ODPH_RING_F_SP_ENQ 0x0001 /* The default enqueue is > "single-producer".*/ > #define ODPH_RING_F_SC_DEQ 0x0002 /* The default dequeue is > "single-consumer".*/ > +#define ODPH_RING_SHM_PROC 0x0004 /* If set - ring is visible from > different > + processes. Default is thread visible. > */ > #define ODPH_RING_QUOT_EXCEED (1 << 31) /* Quota exceed for burst ops */ > #define ODPH_RING_SZ_MASK (unsigned)(0x0fffffff) /* Ring size mask */ > > diff --git a/helper/ring.c b/helper/ring.c > index a24a020..0927a6c 100644 > --- a/helper/ring.c > +++ b/helper/ring.c > @@ -159,8 +159,14 @@ odph_ring_create(const char *name, unsigned count, > unsigned flags) > char ring_name[ODPH_RING_NAMESIZE]; > odph_ring_t *r; > size_t ring_size; > + uint32_t shm_flag; > odp_shm_t shm; > > + if (flags & ODPH_RING_SHM_PROC) > + shm_flag = ODP_SHM_PROC; > + else > + shm_flag = 0; > + > /* count must be a power of 2 */ > if (!ODP_VAL_IS_POWER_2(count) || (count > ODPH_RING_SZ_MASK)) { > ODP_ERR("Requested size is invalid, must be power of 2, > and do not exceed the size limit %u\n", > @@ -173,7 +179,8 @@ odph_ring_create(const char *name, unsigned count, > unsigned flags) > > odp_rwlock_write_lock(&qlock); > /* reserve a memory zone for this ring.*/ > - shm = odp_shm_reserve(ring_name, ring_size, ODP_CACHE_LINE_SIZE, > 0); > + shm = odp_shm_reserve(ring_name, ring_size, ODP_CACHE_LINE_SIZE, > + shm_flag); > > r = odp_shm_addr(shm); > > -- > 1.9.1 > > _______________________________________________ > lng-odp mailing list > [email protected] > https://lists.linaro.org/mailman/listinfo/lng-odp > -- Mike Holmes Technical Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
