code: plan9front

Download patch

ref: c3589ef3cf33189d342a3ab638b558fd9249b220
parent: 51a351e84570e8ac4322ad202bfc57f648755019
author: cinap_lenrek <>
date: Sat Jul 10 14:34:22 EDT 2021

kernel: export pcienumcaps() for custom capability enumeration in drivers (virtio)

This used to be a internal function, but virtio
uses multiple structures with the same cap type
to indicate the location of various register
blocks in the pci bars so export it.

--- a/sys/src/9/port/pci.c
+++ b/sys/src/9/port/pci.c
@@ -910,8 +910,8 @@
 	pcicfgw16(p, PciPCR, p->pcr);
-static int
-enumcaps(Pcidev *p, int (*fmatch)(Pcidev*, int, int, int), int arg)
+pcienumcaps(Pcidev *p, int (*fmatch)(Pcidev*, int, int, int), int arg)
 	int i, r, cap, off;
@@ -971,13 +971,13 @@
 pcicap(Pcidev *p, int cap)
-	return enumcaps(p, matchcap, cap);
+	return pcienumcaps(p, matchcap, cap);
 pcihtcap(Pcidev *p, int cap)
-	return enumcaps(p, matchhtcap, cap);
+	return pcienumcaps(p, matchhtcap, cap);
 static int
--- a/sys/src/9/port/pci.h
+++ b/sys/src/9/port/pci.h
@@ -254,6 +254,7 @@
 extern int pcicap(Pcidev *p, int cap);
 extern int pcihtcap(Pcidev *p, int cap);
+extern int pcienumcaps(Pcidev *p, int (*fmatch)(Pcidev*, int, int, int), int arg);
 extern int pcimsienable(Pcidev *p, uvlong addr, ulong data);
 extern int pcimsidisable(Pcidev *p);