Add QEDE poll mode driver (librte_pmd_qede)
[vpp.git] / src / plugins / dpdk / device / init.c
index 5bdb493..bd249e9 100644 (file)
@@ -315,9 +315,16 @@ dpdk_lib_init (dpdk_main_t * dm)
       if (pci_dev)
        {
          struct rte_eth_dev_info di = { 0 };
+         struct rte_pci_device *next_pci_dev;
          rte_eth_dev_info_get (i + 1, &di);
-         if (pci_dev && pci_addr.as_u32 != last_pci_addr.as_u32 &&
-             memcmp (&pci_dev->addr, &pci_dev->addr,
+#if RTE_VERSION < RTE_VERSION_NUM(18, 5, 0, 0)
+         next_pci_dev = di.pci_dev;
+#else
+         next_pci_dev = di.device ? RTE_DEV_TO_PCI (di.device) : 0;
+#endif
+         if (pci_dev && next_pci_dev &&
+             pci_addr.as_u32 != last_pci_addr.as_u32 &&
+             memcmp (&pci_dev->addr, &next_pci_dev->addr,
                      sizeof (struct rte_pci_addr)) == 0)
            {
              xd->interface_name_suffix = format (0, "0");
@@ -429,6 +436,7 @@ dpdk_lib_init (dpdk_main_t * dm)
            case VNET_DPDK_PMD_CXGBE:
            case VNET_DPDK_PMD_MLX4:
            case VNET_DPDK_PMD_MLX5:
+           case VNET_DPDK_PMD_QEDE:
              xd->port_type = port_type_from_speed_capa (&dev_info);
              break;
 
@@ -740,8 +748,8 @@ dpdk_lib_init (dpdk_main_t * dm)
        }
 
       if (hi)
-       hi->max_l3_packet_bytes[VLIB_RX] = hi->max_l3_packet_bytes[VLIB_TX] =
-         xd->port_conf.rxmode.max_rx_pkt_len - sizeof (ethernet_header_t);
+       hi->max_packet_bytes = xd->port_conf.rxmode.max_rx_pkt_len
+         - sizeof (ethernet_header_t);
       else
        clib_warning ("hi NULL");
 
@@ -827,6 +835,9 @@ dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
     /* Cavium Network Adapter */
     else if (d->vendor_id == 0x177d && d->device_id == 0x9712)
       ;
+    /* Cavium FastlinQ QL41000 Series */
+    else if (d->vendor_id == 0x1077 && d->device_id >= 0x8070 && d->device_id <= 0x8090)
+      ;
     /* Mellanox  */
     else if (d->vendor_id == 0x15b3 && d->device_id >= 0x1013 && d->device_id <= 0x101a)
       {
@@ -995,7 +1006,6 @@ static clib_error_t *
 dpdk_config (vlib_main_t * vm, unformat_input_t * input)
 {
   clib_error_t *error = 0;
-  dpdk_main_t *dm = &dpdk_main;
   dpdk_config_main_t *conf = &dpdk_config_main;
   vlib_thread_main_t *tm = vlib_get_thread_main ();
   dpdk_device_config_t *devconf;
@@ -1003,7 +1013,6 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
   unformat_input_t sub_input;
   uword x;
   u8 *s, *tmp = 0;
-  u8 *rte_cmd = 0, *ethname = 0;
   u32 log_level;
   int ret, i;
   int num_whitelisted = 0;
@@ -1025,7 +1034,7 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
       /* Prime the pump */
       if (unformat (input, "no-hugetlb"))
        {
-         vec_add1 (conf->eal_init_args, (u8 *) "no-huge");
+         vec_add1 (conf->eal_init_args, (u8 *) "--no-huge");
          no_huge = 1;
        }
 
@@ -1087,8 +1096,6 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
          tmp = format (0, "--no-pci%c", 0);
          vec_add1 (conf->eal_init_args, tmp);
        }
-      else if (unformat (input, "poll-sleep %d", &dm->poll_sleep_usec))
-       ;
 
 #define _(a)                                    \
       else if (unformat(input, #a))             \
@@ -1252,9 +1259,6 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
        }
     }
 
-  vec_free (rte_cmd);
-  vec_free (ethname);
-
   if (error)
     return error;
 
@@ -1329,10 +1333,13 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
   vec_add1 (conf->eal_init_args, tmp);
 
   /* set socket-mem */
-  tmp = format (0, "--socket-mem%c", 0);
-  vec_add1 (conf->eal_init_args, tmp);
-  tmp = format (0, "%s%c", socket_mem, 0);
-  vec_add1 (conf->eal_init_args, tmp);
+  if (!no_huge)
+    {
+      tmp = format (0, "--socket-mem%c", 0);
+      vec_add1 (conf->eal_init_args, tmp);
+      tmp = format (0, "%s%c", socket_mem, 0);
+      vec_add1 (conf->eal_init_args, tmp);
+    }
 
   /* NULL terminate the "argv" vector, in case of stupidity */
   vec_add1 (conf->eal_init_args, 0);
@@ -1633,9 +1640,6 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
 
                    /* Init l3 packet size allowed on bonded interface */
                    bhi->max_packet_bytes = ETHERNET_MAX_PACKET_BYTES;
-                   bhi->max_l3_packet_bytes[VLIB_RX] =
-                     bhi->max_l3_packet_bytes[VLIB_TX] =
-                     ETHERNET_MAX_PACKET_BYTES - sizeof (ethernet_header_t);
                    while (nlink >= 1)
                      {         /* for all slave links */
                        int slave = slink[--nlink];
@@ -1674,12 +1678,6 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
                        clib_memcpy (shi->hw_address, addr, 6);
                        clib_memcpy (sei->address, addr, 6);
                        /* Set l3 packet size allowed as the lowest of slave */
-                       if (bhi->max_l3_packet_bytes[VLIB_RX] >
-                           shi->max_l3_packet_bytes[VLIB_RX])
-                         bhi->max_l3_packet_bytes[VLIB_RX] =
-                           bhi->max_l3_packet_bytes[VLIB_TX] =
-                           shi->max_l3_packet_bytes[VLIB_RX];
-                       /* Set max packet size allowed as the lowest of slave */
                        if (bhi->max_packet_bytes > shi->max_packet_bytes)
                          bhi->max_packet_bytes = shi->max_packet_bytes;
                      }