dpdk: allow configuration of max-simd-bitwidth
[vpp.git] / src / plugins / dpdk / device / dpdk.h
index ee768f2..d860a0c 100644 (file)
@@ -32,6 +32,7 @@
 #include <rte_per_lcore.h>
 #include <rte_interrupts.h>
 #include <rte_pci.h>
+#include <rte_bus_vmbus.h>
 #include <rte_ether.h>
 #include <rte_ethdev.h>
 #include <rte_ring.h>
@@ -52,6 +53,7 @@
 #endif
 
 #include <vlib/pci/pci.h>
+#include <vlib/vmbus/vmbus.h>
 #include <vnet/flow/flow.h>
 
 extern vnet_device_class_t dpdk_device_class;
@@ -126,17 +128,19 @@ typedef enum
 
 typedef uint16_t dpdk_portid_t;
 
-#define foreach_dpdk_device_flags \
-  _( 0, ADMIN_UP, "admin-up") \
-  _( 1, PROMISC, "promisc") \
-  _( 2, PMD, "pmd") \
-  _( 3, PMD_INIT_FAIL, "pmd-init-fail") \
-  _( 4, MAYBE_MULTISEG, "maybe-multiseg") \
-  _( 5, HAVE_SUBIF, "subif") \
-  _( 9, TX_OFFLOAD, "tx-offload") \
-  _(10, INTEL_PHDR_CKSUM, "intel-phdr-cksum") \
-  _(11, RX_FLOW_OFFLOAD, "rx-flow-offload") \
-  _(12, RX_IP4_CKSUM, "rx-ip4-cksum")
+#define foreach_dpdk_device_flags                                             \
+  _ (0, ADMIN_UP, "admin-up")                                                 \
+  _ (1, PROMISC, "promisc")                                                   \
+  _ (2, PMD, "pmd")                                                           \
+  _ (3, PMD_INIT_FAIL, "pmd-init-fail")                                       \
+  _ (4, MAYBE_MULTISEG, "maybe-multiseg")                                     \
+  _ (5, HAVE_SUBIF, "subif")                                                  \
+  _ (9, TX_OFFLOAD, "tx-offload")                                             \
+  _ (10, INTEL_PHDR_CKSUM, "intel-phdr-cksum")                                \
+  _ (11, RX_FLOW_OFFLOAD, "rx-flow-offload")                                  \
+  _ (12, RX_IP4_CKSUM, "rx-ip4-cksum")                                        \
+  _ (13, INT_SUPPORTED, "int-supported")                                      \
+  _ (14, INT_UNMASKABLE, "int-unmaskable")
 
 enum
 {
@@ -163,6 +167,9 @@ typedef struct
 {
   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
   u8 buffer_pool_index;
+  u32 queue_index;
+  int efd;
+  uword clib_file_index;
 } dpdk_rx_queue_t;
 
 typedef struct
@@ -250,9 +257,21 @@ typedef struct
   _ (num_tx_desc) \
   _ (rss_fn)
 
+typedef enum
+{
+  VNET_DEV_ADDR_PCI,
+  VNET_DEV_ADDR_VMBUS,
+  VNET_DEV_ADDR_ANY,
+} dpdk_device_addr_type_t;
+
 typedef struct
 {
-  vlib_pci_addr_t pci_addr;
+  union
+  {
+    vlib_pci_addr_t pci_addr;
+    vlib_vmbus_addr_t vmbus_addr;
+  };
+  dpdk_device_addr_type_t dev_addr_type;
   u8 *name;
   u8 is_blacklisted;
   u8 vlan_strip_offload;
@@ -283,6 +302,12 @@ typedef struct
   u8 no_multi_seg;
   u8 enable_tcp_udp_checksum;
   u8 no_tx_checksum_offload;
+  u8 enable_telemetry;
+  u16 max_simd_bitwidth;
+
+#define DPDK_MAX_SIMD_BITWIDTH_DEFAULT 0
+#define DPDK_MAX_SIMD_BITWIDTH_256     256
+#define DPDK_MAX_SIMD_BITWIDTH_512     512
 
   /* Required config parameters */
   u8 coremask_set_manually;
@@ -301,9 +326,12 @@ typedef struct
   dpdk_device_config_t default_devconf;
   dpdk_device_config_t *dev_confs;
   uword *device_config_index_by_pci_addr;
+  mhash_t device_config_index_by_vmbus_addr;
 
   /* devices blacklist by pci vendor_id, device_id */
   u32 *blacklist_by_pci_vendor_and_device;
+  /* devices blacklist by VMBUS address */
+  vlib_vmbus_addr_t *blacklist_by_vmbus_addr;
 
 } dpdk_config_main_t;
 
@@ -458,6 +486,8 @@ clib_error_t *unformat_rss_fn (unformat_input_t * input, uword * rss_fn);
 
 struct rte_pci_device *dpdk_get_pci_device (const struct rte_eth_dev_info
                                            *info);
+struct rte_vmbus_device *
+dpdk_get_vmbus_device (const struct rte_eth_dev_info *info);
 void dpdk_cli_reference (void);
 
 #if CLI_DEBUG