return 0;
}
+clib_error_t *__attribute__ ((weak))
+vlib_pci_get_device_root_bus (vlib_pci_addr_t *addr, vlib_pci_addr_t *root_bus)
+{
+ return 0;
+}
+
vlib_pci_addr_t * __attribute__ ((weak)) vlib_pci_get_all_dev_addrs ()
{
return 0;
"Product Name", "Vital Product Data");
addrs = vlib_pci_get_all_dev_addrs ();
- /* *INDENT-OFF* */
+
vec_foreach (addr, addrs)
{
vlib_pci_device_info_t *d;
continue;
if (d->device_class != PCI_CLASS_NETWORK_ETHERNET && !show_all)
- continue;
-
- vec_reset_length (s);
- if (d->numa_node >= 0)
- s = format (s, " %d", d->numa_node);
-
- vlib_cli_output (vm, "%-13U%-5v%04x:%04x %-14U%-16s%-32v%U",
- format_vlib_pci_addr, addr, s,
- d->vendor_id, d->device_id,
- format_vlib_pci_link_speed, d,
- d->driver_name ? (char *) d->driver_name : "",
- d->product_name,
- format_vlib_pci_vpd, d->vpd_r, (u8 *) 0);
- vlib_pci_free_device_info (d);
+ continue;
+
+ vec_reset_length (s);
+ if (d->numa_node >= 0)
+ s = format (s, " %d", d->numa_node);
+
+ vlib_cli_output (
+ vm, "%-13U%-5v%04x:%04x %-14U%-16s%-32v%U", format_vlib_pci_addr,
+ addr, s, d->vendor_id, d->device_id, format_vlib_pci_link_speed, d,
+ d->driver_name ? (char *) d->driver_name : "", d->product_name,
+ format_vlib_pci_vpd, d->vpd_r, (u8 *) 0);
+ vlib_pci_free_device_info (d);
}
- /* *INDENT-ON* */
vec_free (s);
vec_free (addrs);
addr->slot, addr->function);
}
+u8 *
+format_vlib_pci_link_port (u8 *s, va_list *va)
+{
+ vlib_pci_device_info_t *d = va_arg (*va, vlib_pci_device_info_t *);
+ pcie_config_regs_t *r =
+ pci_config_find_capability (&d->config0, PCI_CAP_ID_PCIE);
+
+ if (!r)
+ return format (s, "unknown");
+
+ return format (s, "P%d", r->link_capabilities >> 24);
+}
+
u8 *
format_vlib_pci_link_speed (u8 * s, va_list * va)
{