summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci/pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/pci.c')
-rw-r--r--sys/dev/pci/pci.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index ef9893f..39ab54c 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -107,6 +107,8 @@ static device_method_t pci_methods[] = {
DEVMETHOD(bus_release_resource, bus_generic_rl_release_resource),
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+ DEVMETHOD(bus_child_pnpinfo_str, pci_child_pnpinfo_str_method),
+ DEVMETHOD(bus_child_location_str, pci_child_location_str_method),
/* PCI interface */
DEVMETHOD(pci_read_config, pci_read_config_method),
@@ -1390,6 +1392,35 @@ pci_write_config_method(device_t dev, device_t child, int reg,
cfg->bus, cfg->slot, cfg->func, reg, val, width);
}
+int
+pci_child_location_str_method(device_t cbdev, device_t child, char *buf,
+ size_t buflen)
+{
+ struct pci_devinfo *dinfo;
+ pcicfgregs *cfg;
+
+ dinfo = device_get_ivars(child);
+ cfg = &dinfo->cfg;
+ snprintf(buf, buflen, "slot=%d function=%d", pci_get_slot(child),
+ pci_get_function(child));
+ return (0);
+}
+
+int
+pci_child_pnpinfo_str_method(device_t cbdev, device_t child, char *buf,
+ size_t buflen)
+{
+ struct pci_devinfo *dinfo;
+ pcicfgregs *cfg;
+
+ dinfo = device_get_ivars(child);
+ cfg = &dinfo->cfg;
+ snprintf(buf, buflen, "vendor=0x%04x device=0x%04x subvendor=0x%04x "
+ "subdevice=0x%04x", cfg->vendor, cfg->device, cfg->subvendor,
+ cfg->subdevice);
+ return (0);
+}
+
static int
pci_modevent(module_t mod, int what, void *arg)
{
OpenPOWER on IntegriCloud