38 #ifndef included_clib_smp_vec_h 39 #define included_clib_smp_vec_h 43 #define foreach_clib_smp_fifo_data_state \ 50 #define _(f) CLIB_SMP_FIFO_DATA_STATE_##f, 62 #define CLIB_SMP_DATA_FOOTER_MAGIC 0xfafbfcf0 108 ASSERT (n <= f->max_n_elts_less_one + 1);
123 uword n_bytes_per_elt_cache_aligned;
125 ASSERT (i <= f->max_n_elts_less_one);
129 return f->
data + i * n_bytes_per_elt_cache_aligned;
154 if (s != CLIB_SMP_FIFO_DATA_STATE_free)
212 if (s != CLIB_SMP_FIFO_DATA_STATE_write_done)
245 word n_bytes_left = n_bytes;
247 while (n_bytes_left >= 4 *
sizeof (
uword))
255 n_bytes_left -= 4 *
sizeof (dst[0]);
258 while (n_bytes_left > 0)
263 n_bytes_left -= 1 *
sizeof (dst[0]);
always_inline uword round_pow2(uword x, uword pow2)
#define clib_smp_compare_and_swap(addr, new, old)
sll srl srl sll sra u16x4 i
always_inline void clib_smp_fifo_write_inline(clib_smp_fifo_t *f, void *elt_to_write, uword n_bytes_per_elt)
always_inline void clib_smp_fifo_read_inline(clib_smp_fifo_t *f, void *elt_to_read, uword n_bytes_per_elt)
clib_smp_fifo_t * clib_smp_fifo_init(uword max_n_elts, uword n_bytes_per_elt)
always_inline void * clib_smp_fifo_elt_at_index(clib_smp_fifo_t *f, uword n_bytes_per_elt, uword i)
always_inline void clib_smp_fifo_read_done(clib_smp_fifo_t *f, void *d, uword n_bytes_per_elt)
always_inline void clib_smp_fifo_memcpy(uword *dst, uword *src, uword n_bytes)
always_inline void clib_smp_fifo_write_done(clib_smp_fifo_t *f, void *d, uword n_bytes_per_elt)
always_inline uword clib_smp_fifo_n_elts(clib_smp_fifo_t *f)
always_inline void * clib_smp_fifo_read_fetch(clib_smp_fifo_t *f, uword n_bytes_per_elt)
#define foreach_clib_smp_fifo_data_state
always_inline void clib_smp_fifo_data_footer_set_state(clib_smp_fifo_data_footer_t *f, clib_smp_fifo_data_state_t s)
clib_smp_fifo_data_state_t
always_inline clib_smp_fifo_data_state_t clib_smp_fifo_data_footer_get_state(clib_smp_fifo_data_footer_t *f)
#define CLIB_SMP_DATA_FOOTER_MAGIC
always_inline void * clib_smp_fifo_write_alloc(clib_smp_fifo_t *f, uword n_bytes_per_elt)
always_inline uword clib_smp_fifo_round_elt_bytes(uword n_bytes_per_elt)
always_inline clib_smp_fifo_data_footer_t * clib_smp_fifo_get_data_footer(void *d, uword n_bytes_per_elt)
#define CLIB_MEMORY_BARRIER()
#define CLIB_CACHE_LINE_BYTES