avf: used tx queue should be enabled
[vpp.git] / src / plugins / avf / avf.h
index 5db4074..3ee8015 100644 (file)
@@ -15,6 +15,9 @@
  *------------------------------------------------------------------
  */
 
+#ifndef _AVF_H_
+#define _AVF_H_
+
 #include <avf/virtchnl.h>
 
 #include <vlib/log.h>
@@ -35,19 +38,39 @@ enum
 #undef _
 };
 
-typedef struct
+typedef volatile struct
 {
-  u64 qword[4];
+  union
+  {
+    struct
+    {
+      u64 mirr:13;
+      u64 rsv1:3;
+      u64 l2tag1:16;
+      u64 filter_status:32;
+      u64 status:19;
+      u64 error:8;
+      u64 rsv2:3;
+      u64 ptype:8;
+      u64 length:26;
+    };
+    u64 qword[4];
+#ifdef CLIB_HAVE_VEC256
+    u64x4 as_u64x4;
+#endif
+  };
 } avf_rx_desc_t;
 
 STATIC_ASSERT_SIZEOF (avf_rx_desc_t, 32);
 
-typedef struct
+typedef volatile struct
 {
   union
   {
     u64 qword[2];
+#ifdef CLIB_HAVE_VEC128
     u64x2 as_u64x2;
+#endif
   };
 } avf_tx_desc_t;
 
@@ -61,7 +84,8 @@ typedef struct
   u16 size;
   avf_rx_desc_t *descs;
   u32 *bufs;
-  u16 n_bufs;
+  u16 n_enqueued;
+  u8 int_mode;
 } avf_rxq_t;
 
 typedef struct
@@ -73,7 +97,7 @@ typedef struct
   clib_spinlock_t lock;
   avf_tx_desc_t *descs;
   u32 *bufs;
-  u16 n_bufs;
+  u16 n_enqueued;
 } avf_txq_t;
 
 typedef struct
@@ -91,6 +115,8 @@ typedef struct
   /* queues */
   avf_rxq_t *rxqs;
   avf_txq_t *txqs;
+  u16 n_tx_queues;
+  u16 n_rx_queues;
 
   /* Admin queues */
   avf_aq_desc_t *atq;
@@ -122,15 +148,13 @@ typedef struct
 
 typedef struct
 {
-  u32 bi;
   u32 status;
   u16 length;
-  u16 tail_length;
   u8 ptype;
   u8 error;
 } avf_rx_vector_entry_t;
 
-STATIC_ASSERT_SIZEOF (avf_rx_vector_entry_t, 16);
+STATIC_ASSERT_SIZEOF (avf_rx_vector_entry_t, 8);
 
 #define AVF_RX_VECTOR_SZ VLIB_FRAME_SIZE
 
@@ -146,6 +170,7 @@ typedef struct
   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
   avf_rx_vector_entry_t rx_vector[AVF_RX_VECTOR_SZ];
   u32 *to_free;
+  vlib_buffer_t buffer_template;
 } avf_per_thread_data_t;
 
 typedef struct
@@ -159,6 +184,8 @@ STATIC_ASSERT (VNET_DEVICE_INPUT_N_NEXT_NODES < 256, "too many next nodes");
 
 typedef struct
 {
+  u16 msg_id_base;
+
   avf_device_t *devices;
   avf_per_thread_data_t *per_thread_data;
   vlib_physmem_region_index_t physmem_region;
@@ -176,8 +203,11 @@ typedef struct
 {
   vlib_pci_addr_t addr;
   int enable_elog;
+  u16 rxq_size;
+  u16 txq_size;
   /* return */
   int rv;
+  u32 sw_if_index;
   clib_error_t *error;
 } avf_create_if_args_t;
 
@@ -260,6 +290,8 @@ typedef struct
   avf_rx_vector_entry_t rxve;
 } avf_input_trace_t;
 
+#endif /* AVF_H */
+
 /*
  * fd.io coding-style-patch-verification: ON
  *