}
void
-show_forest(void)
+show_forest(struct pci_filter *filter)
{
char line[256];
- show_tree_bridge(&host_bridge, line, line);
+ if (filter == NULL)
+ show_tree_bridge(&host_bridge, line, line);
+ else
+ {
+ struct bridge *b;
+ for (b=&host_bridge; b; b=b->chain)
+ {
+ if (b->br_dev && pci_filter_match(filter, b->br_dev->dev))
+ {
+ struct pci_dev *d = b->br_dev->dev;
+ char *p = line;
+ p += sprintf(line, "%04x:%02x:", d->domain_16, d->bus);
+ show_tree_dev(b->br_dev, line, p);
+ }
+ }
+ }
}
if (optind < argc)
goto bad;
- if (opt_tree && opt_filter)
- die("Tree mode does not support filtering");
-
if (opt_query_dns)
{
pacc->id_lookup_mode |= PCI_LOOKUP_NETWORK;
if (need_topology)
grow_tree();
if (opt_tree)
- show_forest();
+ show_forest(opt_filter ? &filter : NULL);
else
show();
}