26 #define AVF_TXQ_DESC_CMD(x) (1 << (x + 4)) 27 #define AVF_TXQ_DESC_CMD_EOP AVF_TXQ_DESC_CMD(0) 28 #define AVF_TXQ_DESC_CMD_RS AVF_TXQ_DESC_CMD(1) 33 return d->
qword[1] & 0x0f;
45 u8 qid = thread_index;
49 u32 bi0, bi1, bi2, bi3;
50 u16 n_left = frame->n_vectors;
60 first = slot = (txq->
next - txq->
n_bufs) & mask;
61 d0 = txq->
descs + slot;
65 slot = (slot + 1) & mask;
66 d0 = txq->
descs + slot;
79 u16 slot0, slot1, slot2, slot3;
87 slot1 = (txq->
next + 1) & mask;
88 slot2 = (txq->
next + 2) & mask;
89 slot3 = (txq->
next + 3) & mask;
91 d0 = txq->
descs + slot0;
92 d1 = txq->
descs + slot1;
93 d2 = txq->
descs + slot2;
94 d3 = txq->
descs + slot3;
101 txq->
bufs[slot0] = bi0;
102 txq->
bufs[slot1] = bi1;
103 txq->
bufs[slot2] = bi2;
104 txq->
bufs[slot3] = bi3;
159 return frame->n_vectors - n_left;
162 #ifndef CLIB_MULTIARCH_VARIANT 166 static void __clib_constructor
#define AVF_TXQ_DESC_CMD_RS
static_always_inline void clib_spinlock_unlock_if_init(clib_spinlock_t *p)
static u64 vlib_get_buffer_data_physical_address(vlib_main_t *vm, u32 buffer_index)
vnet_device_class_t avf_device_class
vlib_node_function_t __clib_weak avf_interface_tx_avx512
i16 current_data
signed offset in data[], pre_data[] that we are currently processing.
#define static_always_inline
#define vlib_prefetch_buffer_with_index(vm, bi, type)
Prefetch buffer metadata by buffer index The first 64 bytes of buffer contains most header informatio...
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
static uword pointer_to_uword(const void *p)
static void vlib_buffer_free_from_ring(vlib_main_t *vm, u32 *ring, u32 start, u32 ring_size, u32 n_buffers)
Free buffers from ring.
static heap_elt_t * first(heap_header_t *h)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
u16 current_length
Nbytes between current data and the end of this buffer.
static void __clib_constructor avf_interface_tx_multiarch_select(void)
uword( vlib_node_function_t)(struct vlib_main_t *vm, struct vlib_node_runtime_t *node, struct vlib_frame_t *frame)
static_always_inline uword vlib_get_thread_index(void)
static_always_inline u8 avf_tx_desc_get_dtyp(avf_tx_desc_t *d)
#define AVF_TXQ_DESC_CMD_EOP
static void * vlib_frame_args(vlib_frame_t *f)
Get pointer to frame scalar data.
vlib_node_function_t __clib_weak avf_interface_tx_avx2
uword CLIB_MULTIARCH_FN() avf_interface_tx(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
#define CLIB_MEMORY_BARRIER()
static_always_inline void clib_spinlock_lock_if_init(clib_spinlock_t *p)
static vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.
#define CLIB_MULTIARCH_FN(fn)