static char *id_lookup(struct pci_access *a, int flags, int cat, int id1, int id2, int id3, int id4)
{
char *name;
static char *id_lookup(struct pci_access *a, int flags, int cat, int id1, int id2, int id3, int id4)
{
char *name;
while (!(name = pci_id_lookup(a, flags, cat, id1, id2, id3, id4)))
{
while (!(name = pci_id_lookup(a, flags, cat, id1, id2, id3, id4)))
{
+ if (!tried_hwdb && !(flags & (PCI_LOOKUP_SKIP_LOCAL | PCI_LOOKUP_NO_HWDB)))
+ {
+ tried_hwdb = 1;
+ if (name = pci_id_hwdb_lookup(a, cat, id1, id2, id3, id4))
+ {
+ pci_id_insert(a, cat, id1, id2, id3, id4, name, SRC_HWDB);
+ continue;
+ }
+ }
if (flags & PCI_LOOKUP_NETWORK)
{
if (name = pci_id_net_lookup(a, cat, id1, id2, id3, id4))
if (flags & PCI_LOOKUP_NETWORK)
{
if (name = pci_id_net_lookup(a, cat, id1, id2, id3, id4))
return format_name(buf, size, flags, id_lookup(a, flags, ID_VENDOR, iv, 0, 0, 0), numbuf, "Vendor");
case PCI_LOOKUP_DEVICE:
iv = va_arg(args, int);
id = va_arg(args, int);
sprintf(numbuf, "%04x", id);
return format_name(buf, size, flags, id_lookup(a, flags, ID_VENDOR, iv, 0, 0, 0), numbuf, "Vendor");
case PCI_LOOKUP_DEVICE:
iv = va_arg(args, int);
id = va_arg(args, int);
sprintf(numbuf, "%04x", id);
return format_name(buf, size, flags, id_lookup(a, flags, ID_DEVICE, iv, id, 0, 0), numbuf, "Device");
case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
iv = va_arg(args, int);
return format_name(buf, size, flags, id_lookup(a, flags, ID_DEVICE, iv, id, 0, 0), numbuf, "Device");
case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
iv = va_arg(args, int);
sprintf(numbuf, "%04x:%04x", iv, id);
v = id_lookup(a, flags, ID_VENDOR, iv, 0, 0, 0);
d = id_lookup(a, flags, ID_DEVICE, iv, id, 0, 0);
sprintf(numbuf, "%04x:%04x", iv, id);
v = id_lookup(a, flags, ID_VENDOR, iv, 0, 0, 0);
d = id_lookup(a, flags, ID_DEVICE, iv, id, 0, 0);
return format_name_pair(buf, size, flags, v, d, numbuf);
case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR:
isv = va_arg(args, int);
sprintf(numbuf, "%04x", isv);
v = id_lookup(a, flags, ID_VENDOR, isv, 0, 0, 0);
return format_name_pair(buf, size, flags, v, d, numbuf);
case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR:
isv = va_arg(args, int);
sprintf(numbuf, "%04x", isv);
v = id_lookup(a, flags, ID_VENDOR, isv, 0, 0, 0);
return format_name(buf, size, flags, v, numbuf, "Unknown vendor");
case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE:
iv = va_arg(args, int);
return format_name(buf, size, flags, v, numbuf, "Unknown vendor");
case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE:
iv = va_arg(args, int);
return format_name(buf, size, flags, id_lookup_subsys(a, flags, iv, id, isv, isd), numbuf, "Device");
case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
iv = va_arg(args, int);
return format_name(buf, size, flags, id_lookup_subsys(a, flags, iv, id, isv, isd), numbuf, "Device");
case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
iv = va_arg(args, int);
v = id_lookup(a, flags, ID_VENDOR, isv, 0, 0, 0);
d = id_lookup_subsys(a, flags, iv, id, isv, isd);
sprintf(numbuf, "%04x:%04x", isv, isd);
v = id_lookup(a, flags, ID_VENDOR, isv, 0, 0, 0);
d = id_lookup_subsys(a, flags, iv, id, isv, isd);
sprintf(numbuf, "%04x:%04x", isv, isd);
return format_name_pair(buf, size, flags, v, d, numbuf);
case PCI_LOOKUP_CLASS:
icls = va_arg(args, int);
return format_name_pair(buf, size, flags, v, d, numbuf);
case PCI_LOOKUP_CLASS:
icls = va_arg(args, int);
return format_name(buf, size, flags, cls, numbuf, "Class");
case PCI_LOOKUP_PROGIF:
icls = va_arg(args, int);
return format_name(buf, size, flags, cls, numbuf, "Class");
case PCI_LOOKUP_PROGIF:
icls = va_arg(args, int);
return format_name(buf, size, flags, pif, numbuf, "ProgIf");
default:
return format_name(buf, size, flags, pif, numbuf, "ProgIf");
default: