* @{
*/
-/** 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)
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.
*/
@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 *
memif_get_external_buffer_offset_t
* go);
-/** @} */
+ @} */
/**
* @defgroup ARGS_N_BUFS Connection arguments and buffers
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;
@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
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
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
*/
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