]> mj.ucw.cz Git - pciutils.git/commitdiff
Improved listing of vendor-specific information
authorMartin Mares <mj@ucw.cz>
Thu, 22 Jan 2015 21:42:33 +0000 (22:42 +0100)
committerMartin Mares <mj@ucw.cz>
Thu, 22 Jan 2015 21:42:33 +0000 (22:42 +0100)
ls-caps-vendor.c

index 4cdfe227b4f8fdfc7ac2a813cc8ce519a0cf5109..dc24f90002a2f7bc1753d38b465f0af1ff829387 100644 (file)
@@ -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));
 }