Session layer improvements
[vpp.git] / src / svm / svm_fifo_segment.h
index 793fa7c..4218013 100644 (file)
@@ -15,8 +15,9 @@
 #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
 {
@@ -32,6 +33,8 @@ typedef struct
 
 typedef struct
 {
+  volatile u32 lock;
+
   /** pool of segments */
   svm_fifo_segment_private_t *segments;
   /* Where to put the next one */
@@ -55,6 +58,18 @@ svm_fifo_get_segment (u32 segment_index)
   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)
 
@@ -66,6 +81,8 @@ typedef enum
 } 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);
 
@@ -73,9 +90,7 @@ svm_fifo_t *svm_fifo_segment_alloc_fifo (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__ */