#ifndef __included_ssvm_fifo_segment_h__
#define __included_ssvm_fifo_segment_h__
-#include "svm_fifo.h"
-#include "ssvm.h"
+#include <svm/svm_fifo.h>
+#include <svm/ssvm.h>
+#include <vppinfra/lock.h>
typedef struct
{
typedef struct
{
+ volatile u32 lock;
+
/** pool of segments */
svm_fifo_segment_private_t *segments;
/* Where to put the next one */
return vec_elt_at_index (ssm->segments, segment_index);
}
+static inline u8
+svm_fifo_segment_has_fifos (svm_fifo_segment_private_t * fifo_segment)
+{
+ return vec_len ((svm_fifo_t **) fifo_segment->h->fifos) != 0;
+}
+
+static inline svm_fifo_t **
+svm_fifo_segment_get_fifos (svm_fifo_segment_private_t * fifo_segment)
+{
+ return (svm_fifo_t **) fifo_segment->h->fifos;
+}
+
#define foreach_ssvm_fifo_segment_api_error \
_(OUT_OF_SPACE, "Out of space in segment", -200)
} ssvm_fifo_segment_api_error_enum_t;
int svm_fifo_segment_create (svm_fifo_segment_create_args_t * a);
+int svm_fifo_segment_create_process_private (svm_fifo_segment_create_args_t
+ * a);
int svm_fifo_segment_attach (svm_fifo_segment_create_args_t * a);
void svm_fifo_segment_delete (svm_fifo_segment_private_t * s);
u32 data_size_in_bytes);
void svm_fifo_segment_free_fifo (svm_fifo_segment_private_t * s,
svm_fifo_t * f);
-
void svm_fifo_segment_init (u64 baseva, u32 timeout_in_seconds);
-
u32 svm_fifo_segment_index (svm_fifo_segment_private_t * s);
#endif /* __included_ssvm_fifo_segment_h__ */