if (CLIB_DEBUG > 0)
clib_warning ("DPDK drivers found %d ports...", nports);
- /*
- * All buffers are all allocated from the same rte_mempool.
- * Thus they all have the same number of data bytes.
- */
- dm->vlib_buffer_free_list_index =
- vlib_buffer_get_or_create_free_list (vm,
- VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES,
- "dpdk rx");
-
if (dm->conf->enable_tcp_udp_checksum)
dm->buffer_flags_template &= ~(VNET_BUFFER_F_L4_CHECKSUM_CORRECT
| VNET_BUFFER_F_L4_CHECKSUM_COMPUTED);
clib_memcpy (&xd->tx_conf, &dev_info.default_txconf,
sizeof (struct rte_eth_txconf));
- if (dm->conf->no_tx_checksum_offload == 0)
- xd->tx_conf.txq_flags &= ~ETH_TXQ_FLAGS_NOXSUMS;
-
if (dm->conf->no_multi_seg)
{
xd->tx_conf.txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS;
case VNET_DPDK_PMD_IXGBE:
case VNET_DPDK_PMD_I40E:
xd->port_type = port_type_from_speed_capa (&dev_info);
- xd->flags |= DPDK_DEVICE_FLAG_TX_OFFLOAD |
- DPDK_DEVICE_FLAG_INTEL_PHDR_CKSUM;
+ if (dm->conf->no_tx_checksum_offload == 0)
+ {
+ xd->tx_conf.txq_flags &= ~ETH_TXQ_FLAGS_NOXSUMS;
+ xd->flags |=
+ DPDK_DEVICE_FLAG_TX_OFFLOAD |
+ DPDK_DEVICE_FLAG_INTEL_PHDR_CKSUM;
+ }
+
break;
case VNET_DPDK_PMD_CXGBE:
xd->port_conf.rxmode.hw_strip_crc = 1;
break;
+ case VNET_DPDK_PMD_ENA:
+ xd->port_type = VNET_DPDK_PORT_TYPE_ETH_VF;
+ break;
+
case VNET_DPDK_PMD_DPAA2:
xd->port_type = VNET_DPDK_PORT_TYPE_ETH_10G;
break;
vec_reset_length (xd->rx_vectors[j]);
}
- vec_validate_aligned (xd->d_trace_buffers, tm->n_vlib_mains,
- CLIB_CACHE_LINE_BYTES);
-
-
/* count the number of descriptors used for this device */
nb_desc += xd->nb_rx_desc + xd->nb_tx_desc * xd->tx_q_used;
static void
dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
{
- vlib_pci_main_t *pm = &pci_main;
clib_error_t *error;
- vlib_pci_device_t *d;
u8 *pci_addr = 0;
int num_whitelisted = vec_len (conf->dev_confs);
+ vlib_pci_device_info_t *d = 0;
+ vlib_pci_addr_t *addr = 0, *addrs;
+ addrs = vlib_pci_get_all_dev_addrs ();
/* *INDENT-OFF* */
- pool_foreach (d, pm->pci_devs, ({
+ vec_foreach (addr, addrs)
+ {
dpdk_device_config_t * devconf = 0;
vec_reset_length (pci_addr);
- pci_addr = format (pci_addr, "%U%c", format_vlib_pci_addr, &d->bus_address, 0);
+ pci_addr = format (pci_addr, "%U%c", format_vlib_pci_addr, addr, 0);
+ if (d)
+ {
+ vlib_pci_free_device_info (d);
+ d = 0;
+ }
+ d = vlib_pci_get_device_info (addr, &error);
+ if (error)
+ {
+ clib_error_report (error);
+ continue;
+ }
if (d->device_class != PCI_CLASS_NETWORK_ETHERNET && d->device_class != PCI_CLASS_PROCESSOR_CO)
continue;
if (num_whitelisted)
{
- uword * p = hash_get (conf->device_config_index_by_pci_addr, d->bus_address.as_u32);
+ uword * p = hash_get (conf->device_config_index_by_pci_addr, addr->as_u32);
if (!p)
continue;
/* Chelsio T4/T5 */
else if (d->vendor_id == 0x1425 && (d->device_id & 0xe000) == 0x4000)
;
+ /* Amazen Elastic Network Adapter */
+ else if (d->vendor_id == 0x1d0f && d->device_id >= 0xec20 && d->device_id <= 0xec21)
+ ;
/* Mellanox */
else if (d->vendor_id == 0x15b3 && d->device_id >= 0x1013 && d->device_id <= 0x101a)
{
continue;
}
- error = vlib_pci_bind_to_uio (d, (char *) conf->uio_driver_name);
+ error = vlib_pci_bind_to_uio (addr, (char *) conf->uio_driver_name);
if (error)
{
if (devconf == 0)
{
pool_get (conf->dev_confs, devconf);
- hash_set (conf->device_config_index_by_pci_addr, d->bus_address.as_u32,
+ hash_set (conf->device_config_index_by_pci_addr, addr->as_u32,
devconf - conf->dev_confs);
- devconf->pci_addr.as_u32 = d->bus_address.as_u32;
+ devconf->pci_addr.as_u32 = addr->as_u32;
}
devconf->is_blacklisted = 1;
clib_error_report (error);
}
- }));
+ }
/* *INDENT-ON* */
vec_free (pci_addr);
+ vlib_pci_free_device_info (d);
}
static clib_error_t *
}
if (!conf->uio_driver_name)
- conf->uio_driver_name = format (0, "uio_pci_generic%c", 0);
+ conf->uio_driver_name = format (0, "auto%c", 0);
/*
* Use 1G huge pages if available.