Capability 0x12 is called "SATA".  I have a diff to add PCI_CAP_SATA
to pcireg.h, but given the fact that we're in ABI lock, that'll have
to wait.  But it is anyhow better to use the number of elements in the
array to decide whether we "know" about a capability or not.

ok?

Index: pcidump.c
===================================================================
RCS file: /cvs/src/usr.sbin/pcidump/pcidump.c,v
retrieving revision 1.26
diff -u -p -r1.26 pcidump.c
--- pcidump.c   19 Dec 2010 23:23:21 -0000      1.26
+++ pcidump.c   11 Jan 2011 22:41:28 -0000
@@ -35,6 +35,10 @@
 
 #define PCIDEV "/dev/pci"
 
+#ifndef nitems
+#define nitems(_a)     (sizeof((_a)) / sizeof((_a)[0]))
+#endif
+
 __dead void usage(void);
 void scanpcidomain(void);
 int probe(int, int, int);
@@ -86,9 +90,9 @@ const char *pci_capnames[] = {
        "AGP8",
        "Secure",
        "PCI Express",
-       "Extended Message Signaled Interrupts (MSI-X)"
+       "Extended Message Signaled Interrupts (MSI-X)",
+       "SATA"
 };
-#define PCI_CAPNAMES_MAX       PCI_CAP_MSIX
 
 int
 main(int argc, char *argv[])
@@ -337,7 +341,7 @@ dump_caplist(int bus, int dev, int func,
                        return;
                cap = PCI_CAPLIST_CAP(reg);
                printf("\t0x%04x: Capability 0x%02x: ", ptr, cap);
-               if (cap > PCI_CAPNAMES_MAX)
+               if (cap > nitems(pci_capnames))
                        cap = 0;
                printf("%s\n", pci_capnames[cap]);
                if (cap == PCI_CAP_PCIEXPRESS)

Reply via email to