libmemif: set next free buffer
[vpp.git] / extras / libmemif / src / libmemif.h
index 37540de..0146bb7 100644 (file)
@@ -85,10 +85,10 @@ typedef enum
  * @{
  */
 
-/** user needs to set events that occured on fd and pass them to memif_control_fd_handler */
+/** user needs to set events that occurred on fd and pass them to memif_control_fd_handler */
 #define MEMIF_FD_EVENT_READ  (1 << 0)
 #define MEMIF_FD_EVENT_WRITE (1 << 1)
-/** inform libmemif that error occured on fd */
+/** inform libmemif that error occurred on fd */
 #define MEMIF_FD_EVENT_ERROR (1 << 2)
 /** if set, informs that fd is going to be closed (user may want to stop watching for events on this fd) */
 #define MEMIF_FD_EVENT_DEL   (1 << 3)
@@ -167,10 +167,10 @@ typedef int (memif_control_fd_update_t) (int fd, uint8_t events,
 typedef int (memif_connection_update_t) (memif_conn_handle_t conn,
                                         void *private_ctx);
 
-/** \brief Memif interrupt occured (callback function)
+/** \brief Memif interrupt occurred (callback function)
     @param conn - memif connection handle
     @param private_ctx - private context
-    @param qid - queue id on which interrupt occured
+    @param qid - queue id on which interrupt occurred
 
     Called when event is received on interrupt fd.
 */
@@ -244,7 +244,7 @@ void memif_register_external_region (memif_add_external_region_t * ar,
     @param gr - get external region addr callback
     @param dr - delete external region callback
     @param go - get external buffer offset callback (optional)
-*/
+
 void memif_per_thread_register_external_region (memif_per_thread_main_handle_t
                                                pt_main,
                                                memif_add_external_region_t *
@@ -256,7 +256,7 @@ void memif_per_thread_register_external_region (memif_per_thread_main_handle_t
                                                memif_get_external_buffer_offset_t
                                                * go);
 
-/** @} */
+ @} */
 
 /**
  * @defgroup ARGS_N_BUFS Connection arguments and buffers
@@ -323,12 +323,10 @@ typedef enum
 typedef struct
 {
   uint16_t desc_index;
-  void *ring;
+  void *queue;
   uint32_t len;
 /** next buffer present (chained buffers) */
 #define MEMIF_BUFFER_FLAG_NEXT (1 << 0)
-/** states that buffer is from rx ring */
-#define MEMIF_BUFFER_FLAG_RX (1 << 1)
   uint8_t flags;
   void *data;
 } memif_buffer_t;
@@ -616,7 +614,8 @@ int memif_delete (memif_conn_handle_t * conn);
     @param count - number of memif buffers to enqueue
     @param count_out - returns number of allocated buffers
 
-    Slave is producer of buffers.
+    Enqueue buffers to specified tx queue. Can only be used by slave.
+    Updates desc_index field for each memif buffer.
     If connection handle points to master returns MEMIF_ERR_INVAL_ARG.
 
     \return memif_err_t
@@ -625,6 +624,16 @@ int memif_buffer_enq_tx (memif_conn_handle_t conn, uint16_t qid,
                         memif_buffer_t * bufs, uint16_t count,
                         uint16_t * count_out);
 
+/** \brief Memif buffer enq tx at idx
+    @param conn - memif connection handle
+    @param buf_a - memif buffer
+    @param buf_b - memif buffer
+
+    Swap descriptors for provided buffers and update the buffers
+*/
+int memif_buffer_requeue (memif_conn_handle_t conn, memif_buffer_t *buf_a,
+                         memif_buffer_t *buf_b);
+
 /** \brief Memif buffer alloc
     @param conn - memif connection handle
     @param qid - number identifying queue
@@ -639,7 +648,18 @@ int memif_buffer_alloc (memif_conn_handle_t conn, uint16_t qid,
                        memif_buffer_t * bufs, uint16_t count,
                        uint16_t * count_out, uint16_t size);
 
-/** \brief Memif refill ring
+/** \brief Memif set next free buffer
+    @param conn - memif connection handle
+    @param qid - number identifying queue
+    @param buf - next free buffer
+
+    Sets next free descriptor pointer for specified tx queue.
+    The next allocation will happen at this buffer.
+*/
+int memif_set_next_free_buffer (memif_conn_handle_t conn, uint16_t qid,
+                               memif_buffer_t *buf);
+
+/** \brief Memif refill queue
     @param conn - memif connection handle
     @param qid - number identifying queue
     @param count - number of buffers to be placed on ring
@@ -688,7 +708,7 @@ int memif_rx_burst (memif_conn_handle_t conn, uint16_t qid,
 */
 int memif_poll_event (int timeout);
 
-/** \brief Memif poll event
+/** \brief Memif per thread poll event
     @param pt_main - per thread main handle
     @param timeout - timeout in seconds