X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fproc.c;h=cb9d08d17768dd1379849ca505d58ebe33067fae;hb=d00975720cdb4837623c065cb1781f61740a975c;hp=1b44b4e80643831fd6a98689c4924d4c6b2a297d;hpb=9ff67879d0d4f2421c376825bf0aa3d7ff924e78;p=pciutils.git diff --git a/lib/proc.c b/lib/proc.c index 1b44b4e..cb9d08d 100644 --- a/lib/proc.c +++ b/lib/proc.c @@ -97,10 +97,10 @@ proc_scan(struct pci_access *a) d->func = PCI_FUNC(dfn & 0xff); d->vendor_id = vend >> 16U; d->device_id = vend & 0xffff; - known = PCI_FILL_IDENT; + known = 0; if (!a->buscentric) { - known |= PCI_FILL_IRQ | PCI_FILL_BASES; + known |= PCI_FILL_IDENT | PCI_FILL_IRQ | PCI_FILL_BASES; if (cnt >= 10) known |= PCI_FILL_ROM_BASE; if (cnt >= 17) @@ -130,6 +130,15 @@ proc_setup(struct pci_dev *d, int rw) a->error("File name too long"); a->fd_rw = a->writeable || rw; a->fd = open(buf, a->fd_rw ? O_RDWR : O_RDONLY); + if (a->fd < 0) + { + e = snprintf(buf, sizeof(buf), "%s/%04x:%02x/%02x.%d", + pci_get_param(a, "proc.path"), + d->domain, d->bus, d->dev, d->func); + if (e < 0 || e >= (int) sizeof(buf)) + a->error("File name too long"); + a->fd = open(buf, a->fd_rw ? O_RDWR : O_RDONLY); + } if (a->fd < 0) a->warning("Cannot open %s", buf); a->cached_dev = d; @@ -197,6 +206,7 @@ struct pci_methods pm_linux_proc = { pci_generic_fill_info, proc_read, proc_write, + NULL, /* read_vpd */ NULL, /* init_dev */ proc_cleanup_dev };