summaryrefslogtreecommitdiffstats
path: root/vnet
diff options
context:
space:
mode:
Diffstat (limited to 'vnet')
-rw-r--r--vnet/vnet/devices/dpdk/device.c25
-rw-r--r--vnet/vnet/devices/dpdk/dpdk.h3
-rw-r--r--vnet/vnet/devices/dpdk/init.c24
3 files changed, 50 insertions, 2 deletions
diff --git a/vnet/vnet/devices/dpdk/device.c b/vnet/vnet/devices/dpdk/device.c
index 781fff46782..72df02a4455 100644
--- a/vnet/vnet/devices/dpdk/device.c
+++ b/vnet/vnet/devices/dpdk/device.c
@@ -753,6 +753,7 @@ static u8 * format_dpdk_device_name (u8 * s, va_list * args)
char *device_name;
u32 i = va_arg (*args, u32);
struct rte_eth_dev_info dev_info;
+ u8 * ret;
if (dm->interface_name_format_decimal)
devname_format = "%s%d/%d/%d";
@@ -799,9 +800,27 @@ static u8 * format_dpdk_device_name (u8 * s, va_list * args)
}
rte_eth_dev_info_get(i, &dev_info);
- return format (s, devname_format, device_name, dev_info.pci_dev->addr.bus,
+ ret = format (s, devname_format, device_name, dev_info.pci_dev->addr.bus,
dev_info.pci_dev->addr.devid,
dev_info.pci_dev->addr.function);
+
+ /* address Chelsio cards which share PCI address */
+ if (dm->devices[i].pmd == VNET_DPDK_PMD_CXGBE) {
+ struct rte_eth_dev_info di;
+
+ di.pci_dev = 0;
+ rte_eth_dev_info_get(i+1, &di);
+ if (di.pci_dev && memcmp(&dev_info.pci_dev->addr, &di.pci_dev->addr,
+ sizeof(struct rte_pci_addr)) == 0)
+ return format(ret, "/0");
+
+ di.pci_dev = 0;
+ rte_eth_dev_info_get(i-1, &di);
+ if (di.pci_dev && memcmp(&dev_info.pci_dev->addr, &di.pci_dev->addr,
+ sizeof(struct rte_pci_addr)) == 0)
+ return format(ret, "/1");
+ }
+ return ret;
}
static u8 * format_dpdk_device_type (u8 * s, va_list * args)
@@ -859,6 +878,10 @@ static u8 * format_dpdk_device_type (u8 * s, va_list * args)
dev_type = "Cisco VIC";
break;
+ case VNET_DPDK_PMD_CXGBE:
+ dev_type = "Chelsio T4/T5";
+ break;
+
case VNET_DPDK_PMD_VMXNET3:
dev_type = "VMware VMXNET3";
break;
diff --git a/vnet/vnet/devices/dpdk/dpdk.h b/vnet/vnet/devices/dpdk/dpdk.h
index bb3ef4ffba8..82456a0661c 100644
--- a/vnet/vnet/devices/dpdk/dpdk.h
+++ b/vnet/vnet/devices/dpdk/dpdk.h
@@ -88,7 +88,8 @@ typedef enum {
_ ("rte_enic_pmd", ENIC) \
_ ("rte_vmxnet3_pmd", VMXNET3) \
_ ("AF_PACKET PMD", AF_PACKET) \
- _ ("rte_pmd_fm10k", FM10K)
+ _ ("rte_pmd_fm10k", FM10K) \
+ _ ("rte_cxgbe_pmd", CXGBE)
typedef enum {
VNET_DPDK_PMD_NONE,
diff --git a/vnet/vnet/devices/dpdk/init.c b/vnet/vnet/devices/dpdk/init.c
index a8e84949a52..f2ba79d4dba 100644
--- a/vnet/vnet/devices/dpdk/init.c
+++ b/vnet/vnet/devices/dpdk/init.c
@@ -317,6 +317,12 @@ dpdk_lib_init (dpdk_main_t * dm)
xd->rx_q_used = 1;
xd->dev_type = VNET_DPDK_DEV_ETH;
+
+ /* workaround for drivers not setting driver_name */
+ if (!dev_info.driver_name)
+ dev_info.driver_name = dev_info.pci_dev->driver->name;
+ ASSERT(dev_info.driver_name);
+
if (!xd->pmd) {
@@ -392,6 +398,20 @@ dpdk_lib_init (dpdk_main_t * dm)
}
break;
+ case VNET_DPDK_PMD_CXGBE:
+ switch (dev_info.pci_dev->id.device_id) {
+ case 0x5410: /* T580-LP-cr */
+ xd->nb_rx_desc = DPDK_NB_RX_DESC_40GE;
+ xd->nb_tx_desc = DPDK_NB_TX_DESC_40GE;
+ xd->port_type = VNET_DPDK_PORT_TYPE_ETH_40G;
+ break;
+ default:
+ xd->nb_rx_desc = DPDK_NB_RX_DESC_10GE;
+ xd->nb_tx_desc = DPDK_NB_TX_DESC_10GE;
+ xd->port_type = VNET_DPDK_PORT_TYPE_UNKNOWN;
+ }
+ break;
+
/* Intel Red Rock Canyon */
case VNET_DPDK_PMD_FM10K:
xd->port_type = VNET_DPDK_PORT_TYPE_ETH_SWITCH;
@@ -1685,6 +1705,10 @@ do { \
_(pmd_af_packet_drv)
#endif
+#ifdef RTE_LIBRTE_CXGBE_PMD
+ _(rte_cxgbe_driver)
+#endif
+
#undef _
/*