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)
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;
pci_generic_fill_info,
proc_read,
proc_write,
+ NULL, /* read_vpd */
NULL, /* init_dev */
proc_cleanup_dev
};