svm: make more fifo segment header fields private
[vpp.git] / src / svm / fifo_segment.h
index 9d2ab28..de4622f 100644 (file)
@@ -38,6 +38,7 @@ typedef enum fifo_segment_flags_
   FIFO_SEGMENT_F_IS_PREALLOCATED = 1 << 0,
   FIFO_SEGMENT_F_WILL_DELETE = 1 << 1,
   FIFO_SEGMENT_F_MEM_LIMIT = 1 << 2,
+  FIFO_SEGMENT_F_CUSTOM_USE = 1 << 3,
 } fifo_segment_flags_t;
 
 #define foreach_segment_mem_status     \
@@ -68,10 +69,13 @@ typedef struct
 {
   ssvm_private_t ssvm;         /**< ssvm segment data */
   fifo_segment_header_t *h;    /**< fifo segment data */
-  uword max_byte_index;
-  u8 n_slices;                 /**< number of fifo segment slices */
   fifo_slice_private_t *slices; /**< private slice information */
   svm_msg_q_t *mqs;            /**< private vec of attached mqs */
+  uword max_byte_index;                /**< max byte index for segment */
+  u8 n_slices;                 /**< number of fifo segment slices */
+  u8 flags;                    /**< private fifo segment flags */
+  u8 high_watermark;           /**< memory pressure watermark high */
+  u8 low_watermark;            /**< memory pressure watermark low */
 } fifo_segment_t;
 
 typedef struct
@@ -90,7 +94,7 @@ typedef struct
   u32 *new_segment_indices;            /**< return vec of new seg indices */
 } fifo_segment_create_args_t;
 
-#define fifo_segment_flags(_fs) _fs->h->flags
+#define fifo_segment_flags(_fs) _fs->flags
 
 int fifo_segment_init (fifo_segment_t * fs);
 int fifo_segment_create (fifo_segment_main_t * sm,
@@ -101,6 +105,8 @@ void fifo_segment_delete (fifo_segment_main_t * sm, fifo_segment_t * fs);
 void fifo_segment_cleanup (fifo_segment_t *fs);
 fifo_segment_t *fifo_segment_get_segment (fifo_segment_main_t * sm,
                                          u32 fs_index);
+fifo_segment_t *fifo_segment_get_segment_if_valid (fifo_segment_main_t *sm,
+                                                  u32 segment_index);
 u32 fifo_segment_index (fifo_segment_main_t * sm, fifo_segment_t * fs);
 void fifo_segment_info (fifo_segment_t * seg, char **address, size_t * size);
 
@@ -130,6 +136,7 @@ svm_fifo_t *fifo_segment_alloc_fifo_w_slice (fifo_segment_t * fs,
                                             fifo_segment_ftype_t ftype);
 svm_fifo_t *fifo_segment_alloc_fifo_w_offset (fifo_segment_t *fs,
                                              uword offset);
+svm_fifo_t *fifo_segment_duplicate_fifo (fifo_segment_t *fs, svm_fifo_t *f);
 
 /**
  * Free fifo allocated in fifo segment
@@ -139,6 +146,14 @@ svm_fifo_t *fifo_segment_alloc_fifo_w_offset (fifo_segment_t *fs,
  */
 void fifo_segment_free_fifo (fifo_segment_t * fs, svm_fifo_t * f);
 
+/**
+ * Free fifo allocated by external applications
+ *
+ * @params fs          fifo segment for fifo
+ * @param f            fifo to be freed
+ */
+void fifo_segment_free_client_fifo (fifo_segment_t *fs, svm_fifo_t *f);
+
 void fifo_segment_detach_fifo (fifo_segment_t *fs, svm_fifo_t **f);
 void fifo_segment_attach_fifo (fifo_segment_t *fs, svm_fifo_t **f,
                               u32 slice_index);
@@ -250,21 +265,6 @@ svm_fifo_chunk_t *fsh_alloc_chunk (fifo_segment_header_t * fsh,
 void fsh_collect_chunks (fifo_segment_header_t * fsh, u32 slice_index,
                         svm_fifo_chunk_t * c);
 
-/**
- * Fifo segment has reached mem limit
- *
- * @param fsh           fifo segment header
- * @return              1 (if reached) or 0 (otherwise)
- */
-u8 fsh_has_reached_mem_limit (fifo_segment_header_t * fsh);
-
-/**
- * Fifo segment reset mem limit flag
- *
- * @param fs            fifo segment
- */
-void fsh_reset_mem_limit (fifo_segment_header_t * fsh);
-
 /**
  * Fifo segment reset mem limit flag
  *
@@ -319,6 +319,14 @@ svm_fifo_t *fifo_segment_get_slice_fifo_list (fifo_segment_t * fs,
                                              u32 slice_index);
 u32 fifo_segment_num_fifos (fifo_segment_t * fs);
 u32 fifo_segment_num_free_fifos (fifo_segment_t * fs);
+
+svm_fifo_chunk_t *fifo_segment_alloc_chunk_w_slice (fifo_segment_t *fs,
+                                                   u32 slice_index,
+                                                   u32 chunk_size);
+void fifo_segment_collect_chunk (fifo_segment_t *fs, u32 slice_index,
+                                svm_fifo_chunk_t *c);
+uword fifo_segment_chunk_offset (fifo_segment_t *fs, svm_fifo_chunk_t *c);
+
 /**
  * Find number of free chunks of given size
  *
@@ -329,8 +337,6 @@ u32 fifo_segment_num_free_fifos (fifo_segment_t * fs);
 u32 fifo_segment_num_free_chunks (fifo_segment_t * fs, u32 size);
 
 u8 fifo_segment_get_mem_usage (fifo_segment_t * fs);
-fifo_segment_mem_status_t fifo_segment_determine_status
-  (fifo_segment_header_t * fsh, u8 usage);
 fifo_segment_mem_status_t fifo_segment_get_mem_status (fifo_segment_t * fs);
 
 void fifo_segment_main_init (fifo_segment_main_t * sm, u64 baseva,