diff options
author | Martin Mares <mj@ucw.cz> | 2015-01-22 22:42:33 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2015-01-22 22:42:33 +0100 |
commit | 6ebebbaa0370c1b34a6aae9f25682ecd1c6c22b1 (patch) | |
tree | 4157efec2f37b8466c79510fa5d3c0150b34142d | |
parent | d769789d4be111bdfab2f2106b60456808a5649e (diff) | |
download | pciutils-6ebebbaa0370c1b34a6aae9f25682ecd1c6c22b1.tar.gz |
Improved listing of vendor-specific information
-rw-r--r-- | ls-caps-vendor.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/ls-caps-vendor.c b/ls-caps-vendor.c index 4cdfe22..dc24f90 100644 --- a/ls-caps-vendor.c +++ b/ls-caps-vendor.c @@ -11,7 +11,7 @@ #include "lspci.h" -static void +static int show_vendor_caps_virtio(struct device *d, int where, int cap) { int length = BITS(cap, 0, 8); @@ -19,9 +19,9 @@ show_vendor_caps_virtio(struct device *d, int where, int cap) char *tname; if (length < 16) - return; + return 0; if (!config_fetch(d, where, length)) - return; + return 0; switch (type) { @@ -45,32 +45,38 @@ show_vendor_caps_virtio(struct device *d, int where, int cap) printf("VirtIO: %s\n", tname); if (verbose < 2) - return; + return 1; - printf("\t\tBAR=%d offset=%08x size=%08x\n", + printf("\t\tBAR=%d offset=%08x size=%08x", get_conf_byte(d, where + 4), get_conf_long(d, where + 8), get_conf_long(d, where + 12)); - if (type != 2 || length < 20) - return; + if (type == 2 && length >= 20) + printf(" multiplier=%08x", get_conf_long(d, where+16)); - printf("\t\tmultiplier=%08x\n", - get_conf_long(d, where+16)); + printf("\n"); + return 1; } -void -show_vendor_caps(struct device *d, int where, int cap) +static int +do_show_vendor_caps(struct device *d, int where, int cap) { switch (get_conf_word(d, PCI_VENDOR_ID)) { case 0x1af4: /* Red Hat */ if (get_conf_word(d, PCI_DEVICE_ID) >= 0x1000 && get_conf_word(d, PCI_DEVICE_ID) <= 0x107f) - show_vendor_caps_virtio(d, where, cap); - break; - default: - printf("Vendor Specific Information: Len=%02x <?>\n", BITS(cap, 0, 8)); + return show_vendor_caps_virtio(d, where, cap); break; } + return 0; +} + +void +show_vendor_caps(struct device *d, int where, int cap) +{ + printf("Vendor Specific Information: "); + if (!do_show_vendor_caps(d, where, cap)) + printf("Len=%02x <?>\n", BITS(cap, 0, 8)); } |